• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 };
688