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