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