GNU Linux-libre 4.14.332-gnu1
[releases.git] / drivers / staging / vc04_services / bcm2835-camera / mmal-parameters.h
1 /*
2  * Broadcom BM2835 V4L2 driver
3  *
4  * Copyright © 2013 Raspberry Pi (Trading) Ltd.
5  *
6  * This file is subject to the terms and conditions of the GNU General Public
7  * License.  See the file COPYING in the main directory of this archive
8  * for more details.
9  *
10  * Authors: Vincent Sanders <vincent.sanders@collabora.co.uk>
11  *          Dave Stevenson <dsteve@broadcom.com>
12  *          Simon Mellor <simellor@broadcom.com>
13  *          Luke Diamand <luked@broadcom.com>
14  */
15
16 /* common parameters */
17
18 /** @name Parameter groups
19  * Parameters are divided into groups, and then allocated sequentially within
20  * a group using an enum.
21  * @{
22  */
23
24 /** Common parameter ID group, used with many types of component. */
25 #define MMAL_PARAMETER_GROUP_COMMON            (0<<16)
26 /** Camera-specific parameter ID group. */
27 #define MMAL_PARAMETER_GROUP_CAMERA            (1<<16)
28 /** Video-specific parameter ID group. */
29 #define MMAL_PARAMETER_GROUP_VIDEO             (2<<16)
30 /** Audio-specific parameter ID group. */
31 #define MMAL_PARAMETER_GROUP_AUDIO             (3<<16)
32 /** Clock-specific parameter ID group. */
33 #define MMAL_PARAMETER_GROUP_CLOCK             (4<<16)
34 /** Miracast-specific parameter ID group. */
35 #define MMAL_PARAMETER_GROUP_MIRACAST       (5<<16)
36
37 /* Common parameters */
38 enum mmal_parameter_common_type {
39         MMAL_PARAMETER_UNUSED  /**< Never a valid parameter ID */
40                 = MMAL_PARAMETER_GROUP_COMMON,
41         MMAL_PARAMETER_SUPPORTED_ENCODINGS, /**< MMAL_PARAMETER_ENCODING_T */
42         MMAL_PARAMETER_URI, /**< MMAL_PARAMETER_URI_T */
43
44         /** MMAL_PARAMETER_CHANGE_EVENT_REQUEST_T */
45         MMAL_PARAMETER_CHANGE_EVENT_REQUEST,
46
47         /** MMAL_PARAMETER_BOOLEAN_T */
48         MMAL_PARAMETER_ZERO_COPY,
49
50         /**< MMAL_PARAMETER_BUFFER_REQUIREMENTS_T */
51         MMAL_PARAMETER_BUFFER_REQUIREMENTS,
52
53         MMAL_PARAMETER_STATISTICS, /**< MMAL_PARAMETER_STATISTICS_T */
54         MMAL_PARAMETER_CORE_STATISTICS, /**< MMAL_PARAMETER_CORE_STATISTICS_T */
55         MMAL_PARAMETER_MEM_USAGE, /**< MMAL_PARAMETER_MEM_USAGE_T */
56         MMAL_PARAMETER_BUFFER_FLAG_FILTER, /**< MMAL_PARAMETER_UINT32_T */
57         MMAL_PARAMETER_SEEK, /**< MMAL_PARAMETER_SEEK_T */
58         MMAL_PARAMETER_POWERMON_ENABLE, /**< MMAL_PARAMETER_BOOLEAN_T */
59         MMAL_PARAMETER_LOGGING, /**< MMAL_PARAMETER_LOGGING_T */
60         MMAL_PARAMETER_SYSTEM_TIME, /**< MMAL_PARAMETER_UINT64_T */
61         MMAL_PARAMETER_NO_IMAGE_PADDING  /**< MMAL_PARAMETER_BOOLEAN_T */
62 };
63
64 /* camera parameters */
65
66 enum mmal_parameter_camera_type {
67         /* 0 */
68         /** @ref MMAL_PARAMETER_THUMBNAIL_CONFIG_T */
69         MMAL_PARAMETER_THUMBNAIL_CONFIGURATION
70                 = MMAL_PARAMETER_GROUP_CAMERA,
71         MMAL_PARAMETER_CAPTURE_QUALITY, /**< Unused? */
72         MMAL_PARAMETER_ROTATION, /**< @ref MMAL_PARAMETER_INT32_T */
73         MMAL_PARAMETER_EXIF_DISABLE, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
74         MMAL_PARAMETER_EXIF, /**< @ref MMAL_PARAMETER_EXIF_T */
75         MMAL_PARAMETER_AWB_MODE, /**< @ref MMAL_PARAM_AWBMODE_T */
76         MMAL_PARAMETER_IMAGE_EFFECT, /**< @ref MMAL_PARAMETER_IMAGEFX_T */
77         MMAL_PARAMETER_COLOUR_EFFECT, /**< @ref MMAL_PARAMETER_COLOURFX_T */
78         MMAL_PARAMETER_FLICKER_AVOID, /**< @ref MMAL_PARAMETER_FLICKERAVOID_T */
79         MMAL_PARAMETER_FLASH, /**< @ref MMAL_PARAMETER_FLASH_T */
80         MMAL_PARAMETER_REDEYE, /**< @ref MMAL_PARAMETER_REDEYE_T */
81         MMAL_PARAMETER_FOCUS, /**< @ref MMAL_PARAMETER_FOCUS_T */
82         MMAL_PARAMETER_FOCAL_LENGTHS, /**< Unused? */
83         MMAL_PARAMETER_EXPOSURE_COMP, /**< @ref MMAL_PARAMETER_INT32_T */
84         MMAL_PARAMETER_ZOOM, /**< @ref MMAL_PARAMETER_SCALEFACTOR_T */
85         MMAL_PARAMETER_MIRROR, /**< @ref MMAL_PARAMETER_MIRROR_T */
86
87         /* 0x10 */
88         MMAL_PARAMETER_CAMERA_NUM, /**< @ref MMAL_PARAMETER_UINT32_T */
89         MMAL_PARAMETER_CAPTURE, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
90         MMAL_PARAMETER_EXPOSURE_MODE, /**< @ref MMAL_PARAMETER_EXPOSUREMODE_T */
91         MMAL_PARAMETER_EXP_METERING_MODE, /**< @ref MMAL_PARAMETER_EXPOSUREMETERINGMODE_T */
92         MMAL_PARAMETER_FOCUS_STATUS, /**< @ref MMAL_PARAMETER_FOCUS_STATUS_T */
93         MMAL_PARAMETER_CAMERA_CONFIG, /**< @ref MMAL_PARAMETER_CAMERA_CONFIG_T */
94         MMAL_PARAMETER_CAPTURE_STATUS, /**< @ref MMAL_PARAMETER_CAPTURE_STATUS_T */
95         MMAL_PARAMETER_FACE_TRACK, /**< @ref MMAL_PARAMETER_FACE_TRACK_T */
96         MMAL_PARAMETER_DRAW_BOX_FACES_AND_FOCUS, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
97         MMAL_PARAMETER_JPEG_Q_FACTOR, /**< @ref MMAL_PARAMETER_UINT32_T */
98         MMAL_PARAMETER_FRAME_RATE, /**< @ref MMAL_PARAMETER_FRAME_RATE_T */
99         MMAL_PARAMETER_USE_STC, /**< @ref MMAL_PARAMETER_CAMERA_STC_MODE_T */
100         MMAL_PARAMETER_CAMERA_INFO, /**< @ref MMAL_PARAMETER_CAMERA_INFO_T */
101         MMAL_PARAMETER_VIDEO_STABILISATION, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
102         MMAL_PARAMETER_FACE_TRACK_RESULTS, /**< @ref MMAL_PARAMETER_FACE_TRACK_RESULTS_T */
103         MMAL_PARAMETER_ENABLE_RAW_CAPTURE, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
104
105         /* 0x20 */
106         MMAL_PARAMETER_DPF_FILE, /**< @ref MMAL_PARAMETER_URI_T */
107         MMAL_PARAMETER_ENABLE_DPF_FILE, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
108         MMAL_PARAMETER_DPF_FAIL_IS_FATAL, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
109         MMAL_PARAMETER_CAPTURE_MODE, /**< @ref MMAL_PARAMETER_CAPTUREMODE_T */
110         MMAL_PARAMETER_FOCUS_REGIONS, /**< @ref MMAL_PARAMETER_FOCUS_REGIONS_T */
111         MMAL_PARAMETER_INPUT_CROP, /**< @ref MMAL_PARAMETER_INPUT_CROP_T */
112         MMAL_PARAMETER_SENSOR_INFORMATION, /**< @ref MMAL_PARAMETER_SENSOR_INFORMATION_T */
113         MMAL_PARAMETER_FLASH_SELECT, /**< @ref MMAL_PARAMETER_FLASH_SELECT_T */
114         MMAL_PARAMETER_FIELD_OF_VIEW, /**< @ref MMAL_PARAMETER_FIELD_OF_VIEW_T */
115         MMAL_PARAMETER_HIGH_DYNAMIC_RANGE, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
116         MMAL_PARAMETER_DYNAMIC_RANGE_COMPRESSION, /**< @ref MMAL_PARAMETER_DRC_T */
117         MMAL_PARAMETER_ALGORITHM_CONTROL, /**< @ref MMAL_PARAMETER_ALGORITHM_CONTROL_T */
118         MMAL_PARAMETER_SHARPNESS, /**< @ref MMAL_PARAMETER_RATIONAL_T */
119         MMAL_PARAMETER_CONTRAST, /**< @ref MMAL_PARAMETER_RATIONAL_T */
120         MMAL_PARAMETER_BRIGHTNESS, /**< @ref MMAL_PARAMETER_RATIONAL_T */
121         MMAL_PARAMETER_SATURATION, /**< @ref MMAL_PARAMETER_RATIONAL_T */
122
123         /* 0x30 */
124         MMAL_PARAMETER_ISO, /**< @ref MMAL_PARAMETER_UINT32_T */
125         MMAL_PARAMETER_ANTISHAKE, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
126
127         /** @ref MMAL_PARAMETER_IMAGEFX_PARAMETERS_T */
128         MMAL_PARAMETER_IMAGE_EFFECT_PARAMETERS,
129
130         /** @ref MMAL_PARAMETER_BOOLEAN_T */
131         MMAL_PARAMETER_CAMERA_BURST_CAPTURE,
132
133         /** @ref MMAL_PARAMETER_UINT32_T */
134         MMAL_PARAMETER_CAMERA_MIN_ISO,
135
136         /** @ref MMAL_PARAMETER_CAMERA_USE_CASE_T */
137         MMAL_PARAMETER_CAMERA_USE_CASE,
138
139         /**< @ref MMAL_PARAMETER_BOOLEAN_T */
140         MMAL_PARAMETER_CAPTURE_STATS_PASS,
141
142         /** @ref MMAL_PARAMETER_UINT32_T */
143         MMAL_PARAMETER_CAMERA_CUSTOM_SENSOR_CONFIG,
144
145         /** @ref MMAL_PARAMETER_BOOLEAN_T */
146         MMAL_PARAMETER_ENABLE_REGISTER_FILE,
147
148         /** @ref MMAL_PARAMETER_BOOLEAN_T */
149         MMAL_PARAMETER_REGISTER_FAIL_IS_FATAL,
150
151         /** @ref MMAL_PARAMETER_CONFIGFILE_T */
152         MMAL_PARAMETER_CONFIGFILE_REGISTERS,
153
154         /** @ref MMAL_PARAMETER_CONFIGFILE_CHUNK_T */
155         MMAL_PARAMETER_CONFIGFILE_CHUNK_REGISTERS,
156         MMAL_PARAMETER_JPEG_ATTACH_LOG, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
157         MMAL_PARAMETER_ZERO_SHUTTER_LAG, /**< @ref MMAL_PARAMETER_ZEROSHUTTERLAG_T */
158         MMAL_PARAMETER_FPS_RANGE, /**< @ref MMAL_PARAMETER_FPS_RANGE_T */
159         MMAL_PARAMETER_CAPTURE_EXPOSURE_COMP, /**< @ref MMAL_PARAMETER_INT32_T */
160
161         /* 0x40 */
162         MMAL_PARAMETER_SW_SHARPEN_DISABLE, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
163         MMAL_PARAMETER_FLASH_REQUIRED, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
164         MMAL_PARAMETER_SW_SATURATION_DISABLE, /**< @ref MMAL_PARAMETER_BOOLEAN_T */
165         MMAL_PARAMETER_SHUTTER_SPEED,             /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
166         MMAL_PARAMETER_CUSTOM_AWB_GAINS,          /**< Takes a @ref MMAL_PARAMETER_AWB_GAINS_T */
167 };
168
169 struct mmal_parameter_rational {
170         s32 num;    /**< Numerator */
171         s32 den;    /**< Denominator */
172 };
173
174 enum mmal_parameter_camera_config_timestamp_mode {
175         MMAL_PARAM_TIMESTAMP_MODE_ZERO = 0, /* Always timestamp frames as 0 */
176         MMAL_PARAM_TIMESTAMP_MODE_RAW_STC,  /* Use the raw STC value
177                                              * for the frame timestamp
178                                              */
179         MMAL_PARAM_TIMESTAMP_MODE_RESET_STC, /* Use the STC timestamp
180                                               * but subtract the
181                                               * timestamp of the first
182                                               * frame sent to give a
183                                               * zero based timestamp.
184                                               */
185 };
186
187 struct mmal_parameter_fps_range {
188         /**< Low end of the permitted framerate range */
189         struct mmal_parameter_rational  fps_low;
190         /**< High end of the permitted framerate range */
191         struct mmal_parameter_rational  fps_high;
192 };
193
194 /* camera configuration parameter */
195 struct mmal_parameter_camera_config {
196         /* Parameters for setting up the image pools */
197         u32 max_stills_w; /* Max size of stills capture */
198         u32 max_stills_h;
199         u32 stills_yuv422; /* Allow YUV422 stills capture */
200         u32 one_shot_stills; /* Continuous or one shot stills captures. */
201
202         u32 max_preview_video_w; /* Max size of the preview or video
203                                   * capture frames
204                                   */
205         u32 max_preview_video_h;
206         u32 num_preview_video_frames;
207
208         /** Sets the height of the circular buffer for stills capture. */
209         u32 stills_capture_circular_buffer_height;
210
211         /** Allows preview/encode to resume as fast as possible after the stills
212          * input frame has been received, and then processes the still frame in
213          * the background whilst preview/encode has resumed.
214          * Actual mode is controlled by MMAL_PARAMETER_CAPTURE_MODE.
215          */
216         u32 fast_preview_resume;
217
218         /** Selects algorithm for timestamping frames if
219          * there is no clock component connected.
220          * enum mmal_parameter_camera_config_timestamp_mode
221          */
222         s32 use_stc_timestamp;
223 };
224
225 enum mmal_parameter_exposuremode {
226         MMAL_PARAM_EXPOSUREMODE_OFF,
227         MMAL_PARAM_EXPOSUREMODE_AUTO,
228         MMAL_PARAM_EXPOSUREMODE_NIGHT,
229         MMAL_PARAM_EXPOSUREMODE_NIGHTPREVIEW,
230         MMAL_PARAM_EXPOSUREMODE_BACKLIGHT,
231         MMAL_PARAM_EXPOSUREMODE_SPOTLIGHT,
232         MMAL_PARAM_EXPOSUREMODE_SPORTS,
233         MMAL_PARAM_EXPOSUREMODE_SNOW,
234         MMAL_PARAM_EXPOSUREMODE_BEACH,
235         MMAL_PARAM_EXPOSUREMODE_VERYLONG,
236         MMAL_PARAM_EXPOSUREMODE_FIXEDFPS,
237         MMAL_PARAM_EXPOSUREMODE_ANTISHAKE,
238         MMAL_PARAM_EXPOSUREMODE_FIREWORKS,
239 };
240
241 enum mmal_parameter_exposuremeteringmode {
242         MMAL_PARAM_EXPOSUREMETERINGMODE_AVERAGE,
243         MMAL_PARAM_EXPOSUREMETERINGMODE_SPOT,
244         MMAL_PARAM_EXPOSUREMETERINGMODE_BACKLIT,
245         MMAL_PARAM_EXPOSUREMETERINGMODE_MATRIX,
246 };
247
248 enum mmal_parameter_awbmode {
249         MMAL_PARAM_AWBMODE_OFF,
250         MMAL_PARAM_AWBMODE_AUTO,
251         MMAL_PARAM_AWBMODE_SUNLIGHT,
252         MMAL_PARAM_AWBMODE_CLOUDY,
253         MMAL_PARAM_AWBMODE_SHADE,
254         MMAL_PARAM_AWBMODE_TUNGSTEN,
255         MMAL_PARAM_AWBMODE_FLUORESCENT,
256         MMAL_PARAM_AWBMODE_INCANDESCENT,
257         MMAL_PARAM_AWBMODE_FLASH,
258         MMAL_PARAM_AWBMODE_HORIZON,
259 };
260
261 enum mmal_parameter_imagefx {
262         MMAL_PARAM_IMAGEFX_NONE,
263         MMAL_PARAM_IMAGEFX_NEGATIVE,
264         MMAL_PARAM_IMAGEFX_SOLARIZE,
265         MMAL_PARAM_IMAGEFX_POSTERIZE,
266         MMAL_PARAM_IMAGEFX_WHITEBOARD,
267         MMAL_PARAM_IMAGEFX_BLACKBOARD,
268         MMAL_PARAM_IMAGEFX_SKETCH,
269         MMAL_PARAM_IMAGEFX_DENOISE,
270         MMAL_PARAM_IMAGEFX_EMBOSS,
271         MMAL_PARAM_IMAGEFX_OILPAINT,
272         MMAL_PARAM_IMAGEFX_HATCH,
273         MMAL_PARAM_IMAGEFX_GPEN,
274         MMAL_PARAM_IMAGEFX_PASTEL,
275         MMAL_PARAM_IMAGEFX_WATERCOLOUR,
276         MMAL_PARAM_IMAGEFX_FILM,
277         MMAL_PARAM_IMAGEFX_BLUR,
278         MMAL_PARAM_IMAGEFX_SATURATION,
279         MMAL_PARAM_IMAGEFX_COLOURSWAP,
280         MMAL_PARAM_IMAGEFX_WASHEDOUT,
281         MMAL_PARAM_IMAGEFX_POSTERISE,
282         MMAL_PARAM_IMAGEFX_COLOURPOINT,
283         MMAL_PARAM_IMAGEFX_COLOURBALANCE,
284         MMAL_PARAM_IMAGEFX_CARTOON,
285 };
286
287 enum MMAL_PARAM_FLICKERAVOID_T {
288         MMAL_PARAM_FLICKERAVOID_OFF,
289         MMAL_PARAM_FLICKERAVOID_AUTO,
290         MMAL_PARAM_FLICKERAVOID_50HZ,
291         MMAL_PARAM_FLICKERAVOID_60HZ,
292         MMAL_PARAM_FLICKERAVOID_MAX = 0x7FFFFFFF
293 };
294
295 struct mmal_parameter_awbgains {
296         struct mmal_parameter_rational r_gain;  /**< Red gain */
297         struct mmal_parameter_rational b_gain;  /**< Blue gain */
298 };
299
300 /** Manner of video rate control */
301 enum mmal_parameter_rate_control_mode {
302         MMAL_VIDEO_RATECONTROL_DEFAULT,
303         MMAL_VIDEO_RATECONTROL_VARIABLE,
304         MMAL_VIDEO_RATECONTROL_CONSTANT,
305         MMAL_VIDEO_RATECONTROL_VARIABLE_SKIP_FRAMES,
306         MMAL_VIDEO_RATECONTROL_CONSTANT_SKIP_FRAMES
307 };
308
309 enum mmal_video_profile {
310         MMAL_VIDEO_PROFILE_H263_BASELINE,
311         MMAL_VIDEO_PROFILE_H263_H320CODING,
312         MMAL_VIDEO_PROFILE_H263_BACKWARDCOMPATIBLE,
313         MMAL_VIDEO_PROFILE_H263_ISWV2,
314         MMAL_VIDEO_PROFILE_H263_ISWV3,
315         MMAL_VIDEO_PROFILE_H263_HIGHCOMPRESSION,
316         MMAL_VIDEO_PROFILE_H263_INTERNET,
317         MMAL_VIDEO_PROFILE_H263_INTERLACE,
318         MMAL_VIDEO_PROFILE_H263_HIGHLATENCY,
319         MMAL_VIDEO_PROFILE_MP4V_SIMPLE,
320         MMAL_VIDEO_PROFILE_MP4V_SIMPLESCALABLE,
321         MMAL_VIDEO_PROFILE_MP4V_CORE,
322         MMAL_VIDEO_PROFILE_MP4V_MAIN,
323         MMAL_VIDEO_PROFILE_MP4V_NBIT,
324         MMAL_VIDEO_PROFILE_MP4V_SCALABLETEXTURE,
325         MMAL_VIDEO_PROFILE_MP4V_SIMPLEFACE,
326         MMAL_VIDEO_PROFILE_MP4V_SIMPLEFBA,
327         MMAL_VIDEO_PROFILE_MP4V_BASICANIMATED,
328         MMAL_VIDEO_PROFILE_MP4V_HYBRID,
329         MMAL_VIDEO_PROFILE_MP4V_ADVANCEDREALTIME,
330         MMAL_VIDEO_PROFILE_MP4V_CORESCALABLE,
331         MMAL_VIDEO_PROFILE_MP4V_ADVANCEDCODING,
332         MMAL_VIDEO_PROFILE_MP4V_ADVANCEDCORE,
333         MMAL_VIDEO_PROFILE_MP4V_ADVANCEDSCALABLE,
334         MMAL_VIDEO_PROFILE_MP4V_ADVANCEDSIMPLE,
335         MMAL_VIDEO_PROFILE_H264_BASELINE,
336         MMAL_VIDEO_PROFILE_H264_MAIN,
337         MMAL_VIDEO_PROFILE_H264_EXTENDED,
338         MMAL_VIDEO_PROFILE_H264_HIGH,
339         MMAL_VIDEO_PROFILE_H264_HIGH10,
340         MMAL_VIDEO_PROFILE_H264_HIGH422,
341         MMAL_VIDEO_PROFILE_H264_HIGH444,
342         MMAL_VIDEO_PROFILE_H264_CONSTRAINED_BASELINE,
343         MMAL_VIDEO_PROFILE_DUMMY = 0x7FFFFFFF
344 };
345
346 enum mmal_video_level {
347         MMAL_VIDEO_LEVEL_H263_10,
348         MMAL_VIDEO_LEVEL_H263_20,
349         MMAL_VIDEO_LEVEL_H263_30,
350         MMAL_VIDEO_LEVEL_H263_40,
351         MMAL_VIDEO_LEVEL_H263_45,
352         MMAL_VIDEO_LEVEL_H263_50,
353         MMAL_VIDEO_LEVEL_H263_60,
354         MMAL_VIDEO_LEVEL_H263_70,
355         MMAL_VIDEO_LEVEL_MP4V_0,
356         MMAL_VIDEO_LEVEL_MP4V_0b,
357         MMAL_VIDEO_LEVEL_MP4V_1,
358         MMAL_VIDEO_LEVEL_MP4V_2,
359         MMAL_VIDEO_LEVEL_MP4V_3,
360         MMAL_VIDEO_LEVEL_MP4V_4,
361         MMAL_VIDEO_LEVEL_MP4V_4a,
362         MMAL_VIDEO_LEVEL_MP4V_5,
363         MMAL_VIDEO_LEVEL_MP4V_6,
364         MMAL_VIDEO_LEVEL_H264_1,
365         MMAL_VIDEO_LEVEL_H264_1b,
366         MMAL_VIDEO_LEVEL_H264_11,
367         MMAL_VIDEO_LEVEL_H264_12,
368         MMAL_VIDEO_LEVEL_H264_13,
369         MMAL_VIDEO_LEVEL_H264_2,
370         MMAL_VIDEO_LEVEL_H264_21,
371         MMAL_VIDEO_LEVEL_H264_22,
372         MMAL_VIDEO_LEVEL_H264_3,
373         MMAL_VIDEO_LEVEL_H264_31,
374         MMAL_VIDEO_LEVEL_H264_32,
375         MMAL_VIDEO_LEVEL_H264_4,
376         MMAL_VIDEO_LEVEL_H264_41,
377         MMAL_VIDEO_LEVEL_H264_42,
378         MMAL_VIDEO_LEVEL_H264_5,
379         MMAL_VIDEO_LEVEL_H264_51,
380         MMAL_VIDEO_LEVEL_DUMMY = 0x7FFFFFFF
381 };
382
383 struct mmal_parameter_video_profile {
384         enum mmal_video_profile profile;
385         enum mmal_video_level level;
386 };
387
388 /* video parameters */
389
390 enum mmal_parameter_video_type {
391         /** @ref MMAL_DISPLAYREGION_T */
392         MMAL_PARAMETER_DISPLAYREGION = MMAL_PARAMETER_GROUP_VIDEO,
393
394         /** @ref MMAL_PARAMETER_VIDEO_PROFILE_T */
395         MMAL_PARAMETER_SUPPORTED_PROFILES,
396
397         /** @ref MMAL_PARAMETER_VIDEO_PROFILE_T */
398         MMAL_PARAMETER_PROFILE,
399
400         /** @ref MMAL_PARAMETER_UINT32_T */
401         MMAL_PARAMETER_INTRAPERIOD,
402
403         /** @ref MMAL_PARAMETER_VIDEO_RATECONTROL_T */
404         MMAL_PARAMETER_RATECONTROL,
405
406         /** @ref MMAL_PARAMETER_VIDEO_NALUNITFORMAT_T */
407         MMAL_PARAMETER_NALUNITFORMAT,
408
409         /** @ref MMAL_PARAMETER_BOOLEAN_T */
410         MMAL_PARAMETER_MINIMISE_FRAGMENTATION,
411
412         /** @ref MMAL_PARAMETER_UINT32_T.
413          * Setting the value to zero resets to the default (one slice per frame).
414          */
415         MMAL_PARAMETER_MB_ROWS_PER_SLICE,
416
417         /** @ref MMAL_PARAMETER_VIDEO_LEVEL_EXTENSION_T */
418         MMAL_PARAMETER_VIDEO_LEVEL_EXTENSION,
419
420         /** @ref MMAL_PARAMETER_VIDEO_EEDE_ENABLE_T */
421         MMAL_PARAMETER_VIDEO_EEDE_ENABLE,
422
423         /** @ref MMAL_PARAMETER_VIDEO_EEDE_LOSSRATE_T */
424         MMAL_PARAMETER_VIDEO_EEDE_LOSSRATE,
425
426         /** @ref MMAL_PARAMETER_BOOLEAN_T. Request an I-frame. */
427         MMAL_PARAMETER_VIDEO_REQUEST_I_FRAME,
428         /** @ref MMAL_PARAMETER_VIDEO_INTRA_REFRESH_T */
429         MMAL_PARAMETER_VIDEO_INTRA_REFRESH,
430
431         /** @ref MMAL_PARAMETER_BOOLEAN_T. */
432         MMAL_PARAMETER_VIDEO_IMMUTABLE_INPUT,
433
434         /** @ref MMAL_PARAMETER_UINT32_T. Run-time bit rate control */
435         MMAL_PARAMETER_VIDEO_BIT_RATE,
436
437         /** @ref MMAL_PARAMETER_FRAME_RATE_T */
438         MMAL_PARAMETER_VIDEO_FRAME_RATE,
439
440         /** @ref MMAL_PARAMETER_UINT32_T. */
441         MMAL_PARAMETER_VIDEO_ENCODE_MIN_QUANT,
442
443         /** @ref MMAL_PARAMETER_UINT32_T. */
444         MMAL_PARAMETER_VIDEO_ENCODE_MAX_QUANT,
445
446         /** @ref MMAL_PARAMETER_VIDEO_ENCODE_RC_MODEL_T. */
447         MMAL_PARAMETER_VIDEO_ENCODE_RC_MODEL,
448
449         MMAL_PARAMETER_EXTRA_BUFFERS, /**< @ref MMAL_PARAMETER_UINT32_T. */
450         /** @ref MMAL_PARAMETER_UINT32_T.
451          * Changing this parameter from the default can reduce frame rate
452          * because image buffers need to be re-pitched.
453          */
454         MMAL_PARAMETER_VIDEO_ALIGN_HORIZ,
455
456         /** @ref MMAL_PARAMETER_UINT32_T.
457          * Changing this parameter from the default can reduce frame rate
458          * because image buffers need to be re-pitched.
459          */
460         MMAL_PARAMETER_VIDEO_ALIGN_VERT,
461
462         /** @ref MMAL_PARAMETER_BOOLEAN_T. */
463         MMAL_PARAMETER_VIDEO_DROPPABLE_PFRAMES,
464
465         /** @ref MMAL_PARAMETER_UINT32_T. */
466         MMAL_PARAMETER_VIDEO_ENCODE_INITIAL_QUANT,
467
468         /**< @ref MMAL_PARAMETER_UINT32_T. */
469         MMAL_PARAMETER_VIDEO_ENCODE_QP_P,
470
471         /**< @ref MMAL_PARAMETER_UINT32_T. */
472         MMAL_PARAMETER_VIDEO_ENCODE_RC_SLICE_DQUANT,
473
474         /** @ref MMAL_PARAMETER_UINT32_T */
475         MMAL_PARAMETER_VIDEO_ENCODE_FRAME_LIMIT_BITS,
476
477         /** @ref MMAL_PARAMETER_UINT32_T. */
478         MMAL_PARAMETER_VIDEO_ENCODE_PEAK_RATE,
479
480         /* H264 specific parameters */
481
482         /** @ref MMAL_PARAMETER_BOOLEAN_T. */
483         MMAL_PARAMETER_VIDEO_ENCODE_H264_DISABLE_CABAC,
484
485         /** @ref MMAL_PARAMETER_BOOLEAN_T. */
486         MMAL_PARAMETER_VIDEO_ENCODE_H264_LOW_LATENCY,
487
488         /** @ref MMAL_PARAMETER_BOOLEAN_T. */
489         MMAL_PARAMETER_VIDEO_ENCODE_H264_AU_DELIMITERS,
490
491         /** @ref MMAL_PARAMETER_UINT32_T. */
492         MMAL_PARAMETER_VIDEO_ENCODE_H264_DEBLOCK_IDC,
493
494         /** @ref MMAL_PARAMETER_VIDEO_ENCODER_H264_MB_INTRA_MODES_T. */
495         MMAL_PARAMETER_VIDEO_ENCODE_H264_MB_INTRA_MODE,
496
497         /** @ref MMAL_PARAMETER_BOOLEAN_T */
498         MMAL_PARAMETER_VIDEO_ENCODE_HEADER_ON_OPEN,
499
500         /** @ref MMAL_PARAMETER_BOOLEAN_T */
501         MMAL_PARAMETER_VIDEO_ENCODE_PRECODE_FOR_QP,
502
503         /** @ref MMAL_PARAMETER_VIDEO_DRM_INIT_INFO_T. */
504         MMAL_PARAMETER_VIDEO_DRM_INIT_INFO,
505
506         /** @ref MMAL_PARAMETER_BOOLEAN_T */
507         MMAL_PARAMETER_VIDEO_TIMESTAMP_FIFO,
508
509         /** @ref MMAL_PARAMETER_BOOLEAN_T */
510         MMAL_PARAMETER_VIDEO_DECODE_ERROR_CONCEALMENT,
511
512         /** @ref MMAL_PARAMETER_VIDEO_DRM_PROTECT_BUFFER_T. */
513         MMAL_PARAMETER_VIDEO_DRM_PROTECT_BUFFER,
514
515         /** @ref MMAL_PARAMETER_BYTES_T */
516         MMAL_PARAMETER_VIDEO_DECODE_CONFIG_VD3,
517
518         /**< @ref MMAL_PARAMETER_BOOLEAN_T */
519         MMAL_PARAMETER_VIDEO_ENCODE_H264_VCL_HRD_PARAMETERS,
520
521         /**< @ref MMAL_PARAMETER_BOOLEAN_T */
522         MMAL_PARAMETER_VIDEO_ENCODE_H264_LOW_DELAY_HRD_FLAG,
523
524         /**< @ref MMAL_PARAMETER_BOOLEAN_T */
525         MMAL_PARAMETER_VIDEO_ENCODE_INLINE_HEADER
526 };
527
528 /** Valid mirror modes */
529 enum mmal_parameter_mirror {
530         MMAL_PARAM_MIRROR_NONE,
531         MMAL_PARAM_MIRROR_VERTICAL,
532         MMAL_PARAM_MIRROR_HORIZONTAL,
533         MMAL_PARAM_MIRROR_BOTH,
534 };
535
536 enum mmal_parameter_displaytransform {
537         MMAL_DISPLAY_ROT0 = 0,
538         MMAL_DISPLAY_MIRROR_ROT0 = 1,
539         MMAL_DISPLAY_MIRROR_ROT180 = 2,
540         MMAL_DISPLAY_ROT180 = 3,
541         MMAL_DISPLAY_MIRROR_ROT90 = 4,
542         MMAL_DISPLAY_ROT270 = 5,
543         MMAL_DISPLAY_ROT90 = 6,
544         MMAL_DISPLAY_MIRROR_ROT270 = 7,
545 };
546
547 enum mmal_parameter_displaymode {
548         MMAL_DISPLAY_MODE_FILL = 0,
549         MMAL_DISPLAY_MODE_LETTERBOX = 1,
550 };
551
552 enum mmal_parameter_displayset {
553         MMAL_DISPLAY_SET_NONE = 0,
554         MMAL_DISPLAY_SET_NUM = 1,
555         MMAL_DISPLAY_SET_FULLSCREEN = 2,
556         MMAL_DISPLAY_SET_TRANSFORM = 4,
557         MMAL_DISPLAY_SET_DEST_RECT = 8,
558         MMAL_DISPLAY_SET_SRC_RECT = 0x10,
559         MMAL_DISPLAY_SET_MODE = 0x20,
560         MMAL_DISPLAY_SET_PIXEL = 0x40,
561         MMAL_DISPLAY_SET_NOASPECT = 0x80,
562         MMAL_DISPLAY_SET_LAYER = 0x100,
563         MMAL_DISPLAY_SET_COPYPROTECT = 0x200,
564         MMAL_DISPLAY_SET_ALPHA = 0x400,
565 };
566
567 struct mmal_parameter_displayregion {
568         /** Bitfield that indicates which fields are set and should be
569          * used. All other fields will maintain their current value.
570          * \ref MMAL_DISPLAYSET_T defines the bits that can be
571          * combined.
572          */
573         u32 set;
574
575         /** Describes the display output device, with 0 typically
576          * being a directly connected LCD display.  The actual values
577          * will depend on the hardware.  Code using hard-wired numbers
578          * (e.g. 2) is certain to fail.
579          */
580
581         u32 display_num;
582         /** Indicates that we are using the full device screen area,
583          * rather than a window of the display.  If zero, then
584          * dest_rect is used to specify a region of the display to
585          * use.
586          */
587
588         s32 fullscreen;
589         /** Indicates any rotation or flipping used to map frames onto
590          * the natural display orientation.
591          */
592         u32 transform; /* enum mmal_parameter_displaytransform */
593
594         /** Where to display the frame within the screen, if
595          * fullscreen is zero.
596          */
597         struct vchiq_mmal_rect dest_rect;
598
599         /** Indicates which area of the frame to display. If all
600          * values are zero, the whole frame will be used.
601          */
602         struct vchiq_mmal_rect src_rect;
603
604         /** If set to non-zero, indicates that any display scaling
605          * should disregard the aspect ratio of the frame region being
606          * displayed.
607          */
608         s32 noaspect;
609
610         /** Indicates how the image should be scaled to fit the
611          * display. \code MMAL_DISPLAY_MODE_FILL \endcode indicates
612          * that the image should fill the screen by potentially
613          * cropping the frames.  Setting \code mode \endcode to \code
614          * MMAL_DISPLAY_MODE_LETTERBOX \endcode indicates that all the
615          * source region should be displayed and black bars added if
616          * necessary.
617          */
618         u32 mode; /* enum mmal_parameter_displaymode */
619
620         /** If non-zero, defines the width of a source pixel relative
621          * to \code pixel_y \endcode.  If zero, then pixels default to
622          * being square.
623          */
624         u32 pixel_x;
625
626         /** If non-zero, defines the height of a source pixel relative
627          * to \code pixel_x \endcode.  If zero, then pixels default to
628          * being square.
629          */
630         u32 pixel_y;
631
632         /** Sets the relative depth of the images, with greater values
633          * being in front of smaller values.
634          */
635         u32 layer;
636
637         /** Set to non-zero to ensure copy protection is used on
638          * output.
639          */
640         s32 copyprotect_required;
641
642         /** Level of opacity of the layer, where zero is fully
643          * transparent and 255 is fully opaque.
644          */
645         u32 alpha;
646 };
647
648 #define MMAL_MAX_IMAGEFX_PARAMETERS 5
649
650 struct mmal_parameter_imagefx_parameters {
651         enum mmal_parameter_imagefx effect;
652         u32 num_effect_params;
653         u32 effect_parameter[MMAL_MAX_IMAGEFX_PARAMETERS];
654 };
655
656 #define MMAL_PARAMETER_CAMERA_INFO_MAX_CAMERAS 4
657 #define MMAL_PARAMETER_CAMERA_INFO_MAX_FLASHES 2
658 #define MMAL_PARAMETER_CAMERA_INFO_MAX_STR_LEN 16
659
660 struct mmal_parameter_camera_info_camera_t {
661         u32    port_id;
662         u32    max_width;
663         u32    max_height;
664         u32    lens_present;
665         u8     camera_name[MMAL_PARAMETER_CAMERA_INFO_MAX_STR_LEN];
666 };
667
668 enum mmal_parameter_camera_info_flash_type_t {
669         /* Make values explicit to ensure they match values in config ini */
670         MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_XENON = 0,
671         MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_LED   = 1,
672         MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_OTHER = 2,
673         MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_MAX = 0x7FFFFFFF
674 };
675
676 struct mmal_parameter_camera_info_flash_t {
677         enum mmal_parameter_camera_info_flash_type_t flash_type;
678 };
679
680 struct mmal_parameter_camera_info_t {
681         u32                            num_cameras;
682         u32                            num_flashes;
683         struct mmal_parameter_camera_info_camera_t
684                                 cameras[MMAL_PARAMETER_CAMERA_INFO_MAX_CAMERAS];
685         struct mmal_parameter_camera_info_flash_t
686                                 flashes[MMAL_PARAMETER_CAMERA_INFO_MAX_FLASHES];
687 };