1 /*
2 Copyright (c) 2012, Broadcom Europe Ltd
3 All rights reserved.
4 
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are met:
7     * Redistributions of source code must retain the above copyright
8       notice, this list of conditions and the following disclaimer.
9     * Redistributions in binary form must reproduce the above copyright
10       notice, this list of conditions and the following disclaimer in the
11       documentation and/or other materials provided with the distribution.
12     * Neither the name of the copyright holder nor the
13       names of its contributors may be used to endorse or promote products
14       derived from this software without specific prior written permission.
15 
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 
28 /*=============================================================================
29 Copyright (c) 2011 Broadcom Europe Limited.
30 All rights reserved.
31 =============================================================================*/
32 /** \file
33  * Multi-Media Abstraction Layer - Definition of some standard parameters.
34  */
35 
36 #ifndef MMAL_PARAMETERS_CAMERA_H
37 #define MMAL_PARAMETERS_CAMERA_H
38 
39 #include "mmal_parameters_common.h"
40 
41 /*************************************************
42  * ALWAYS ADD NEW ENUMS AT THE END OF THIS LIST! *
43  ************************************************/
44 
45 /** Camera-specific MMAL parameter IDs.
46  * @ingroup MMAL_PARAMETER_IDS
47  */
48 enum {
49    /* 0 */
50    MMAL_PARAMETER_THUMBNAIL_CONFIGURATION    /**< Takes a @ref MMAL_PARAMETER_THUMBNAIL_CONFIG_T */
51          = MMAL_PARAMETER_GROUP_CAMERA,
52    MMAL_PARAMETER_CAPTURE_QUALITY,           /**< Unused? */
53    MMAL_PARAMETER_ROTATION,                  /**< Takes a @ref MMAL_PARAMETER_INT32_T */
54    MMAL_PARAMETER_EXIF_DISABLE,              /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
55    MMAL_PARAMETER_EXIF,                      /**< Takes a @ref MMAL_PARAMETER_EXIF_T */
56    MMAL_PARAMETER_AWB_MODE,                  /**< Takes a @ref MMAL_PARAM_AWBMODE_T */
57    MMAL_PARAMETER_IMAGE_EFFECT,              /**< Takes a @ref MMAL_PARAMETER_IMAGEFX_T */
58    MMAL_PARAMETER_COLOUR_EFFECT,             /**< Takes a @ref MMAL_PARAMETER_COLOURFX_T */
59    MMAL_PARAMETER_FLICKER_AVOID,             /**< Takes a @ref MMAL_PARAMETER_FLICKERAVOID_T */
60    MMAL_PARAMETER_FLASH,                     /**< Takes a @ref MMAL_PARAMETER_FLASH_T */
61    MMAL_PARAMETER_REDEYE,                    /**< Takes a @ref MMAL_PARAMETER_REDEYE_T */
62    MMAL_PARAMETER_FOCUS,                     /**< Takes a @ref MMAL_PARAMETER_FOCUS_T */
63    MMAL_PARAMETER_FOCAL_LENGTHS,             /**< Unused? */
64    MMAL_PARAMETER_EXPOSURE_COMP,             /**< Takes a @ref MMAL_PARAMETER_INT32_T or MMAL_PARAMETER_RATIONAL_T */
65    MMAL_PARAMETER_ZOOM,                      /**< Takes a @ref MMAL_PARAMETER_SCALEFACTOR_T */
66    MMAL_PARAMETER_MIRROR,                    /**< Takes a @ref MMAL_PARAMETER_MIRROR_T */
67 
68    /* 0x10 */
69    MMAL_PARAMETER_CAMERA_NUM,                /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
70    MMAL_PARAMETER_CAPTURE,                   /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
71    MMAL_PARAMETER_EXPOSURE_MODE,             /**< Takes a @ref MMAL_PARAMETER_EXPOSUREMODE_T */
72    MMAL_PARAMETER_EXP_METERING_MODE,         /**< Takes a @ref MMAL_PARAMETER_EXPOSUREMETERINGMODE_T */
73    MMAL_PARAMETER_FOCUS_STATUS,              /**< Takes a @ref MMAL_PARAMETER_FOCUS_STATUS_T */
74    MMAL_PARAMETER_CAMERA_CONFIG,             /**< Takes a @ref MMAL_PARAMETER_CAMERA_CONFIG_T */
75    MMAL_PARAMETER_CAPTURE_STATUS,            /**< Takes a @ref MMAL_PARAMETER_CAPTURE_STATUS_T */
76    MMAL_PARAMETER_FACE_TRACK,                /**< Takes a @ref MMAL_PARAMETER_FACE_TRACK_T */
77    MMAL_PARAMETER_DRAW_BOX_FACES_AND_FOCUS,  /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
78    MMAL_PARAMETER_JPEG_Q_FACTOR,             /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
79    MMAL_PARAMETER_FRAME_RATE,                /**< Takes a @ref MMAL_PARAMETER_FRAME_RATE_T */
80    MMAL_PARAMETER_USE_STC,                   /**< Takes a @ref MMAL_PARAMETER_CAMERA_STC_MODE_T */
81    MMAL_PARAMETER_CAMERA_INFO,               /**< Takes a @ref MMAL_PARAMETER_CAMERA_INFO_T */
82    MMAL_PARAMETER_VIDEO_STABILISATION,       /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
83    MMAL_PARAMETER_FACE_TRACK_RESULTS,        /**< Takes a @ref MMAL_PARAMETER_FACE_TRACK_RESULTS_T */
84    MMAL_PARAMETER_ENABLE_RAW_CAPTURE,        /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
85 
86    /* 0x20 */
87    MMAL_PARAMETER_DPF_FILE,                  /**< Takes a @ref MMAL_PARAMETER_URI_T */
88    MMAL_PARAMETER_ENABLE_DPF_FILE,           /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
89    MMAL_PARAMETER_DPF_FAIL_IS_FATAL,         /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
90    MMAL_PARAMETER_CAPTURE_MODE,              /**< Takes a @ref MMAL_PARAMETER_CAPTUREMODE_T */
91    MMAL_PARAMETER_FOCUS_REGIONS,             /**< Takes a @ref MMAL_PARAMETER_FOCUS_REGIONS_T */
92    MMAL_PARAMETER_INPUT_CROP,                /**< Takes a @ref MMAL_PARAMETER_INPUT_CROP_T */
93    MMAL_PARAMETER_SENSOR_INFORMATION,        /**< Takes a @ref MMAL_PARAMETER_SENSOR_INFORMATION_T */
94    MMAL_PARAMETER_FLASH_SELECT,              /**< Takes a @ref MMAL_PARAMETER_FLASH_SELECT_T */
95    MMAL_PARAMETER_FIELD_OF_VIEW,             /**< Takes a @ref MMAL_PARAMETER_FIELD_OF_VIEW_T */
96    MMAL_PARAMETER_HIGH_DYNAMIC_RANGE,        /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
97    MMAL_PARAMETER_DYNAMIC_RANGE_COMPRESSION, /**< Takes a @ref MMAL_PARAMETER_DRC_T */
98    MMAL_PARAMETER_ALGORITHM_CONTROL,         /**< Takes a @ref MMAL_PARAMETER_ALGORITHM_CONTROL_T */
99    MMAL_PARAMETER_SHARPNESS,                 /**< Takes a @ref MMAL_PARAMETER_RATIONAL_T */
100    MMAL_PARAMETER_CONTRAST,                  /**< Takes a @ref MMAL_PARAMETER_RATIONAL_T */
101    MMAL_PARAMETER_BRIGHTNESS,                /**< Takes a @ref MMAL_PARAMETER_RATIONAL_T */
102    MMAL_PARAMETER_SATURATION,                /**< Takes a @ref MMAL_PARAMETER_RATIONAL_T */
103 
104    /* 0x30 */
105    MMAL_PARAMETER_ISO,                       /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
106    MMAL_PARAMETER_ANTISHAKE,                 /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
107    MMAL_PARAMETER_IMAGE_EFFECT_PARAMETERS,   /**< Takes a @ref MMAL_PARAMETER_IMAGEFX_PARAMETERS_T */
108    MMAL_PARAMETER_CAMERA_BURST_CAPTURE,      /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
109    MMAL_PARAMETER_CAMERA_MIN_ISO,            /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
110    MMAL_PARAMETER_CAMERA_USE_CASE,           /**< Takes a @ref MMAL_PARAMETER_CAMERA_USE_CASE_T */
111    MMAL_PARAMETER_CAPTURE_STATS_PASS,        /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
112    MMAL_PARAMETER_CAMERA_CUSTOM_SENSOR_CONFIG, /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
113    MMAL_PARAMETER_ENABLE_REGISTER_FILE,      /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
114    MMAL_PARAMETER_REGISTER_FAIL_IS_FATAL,    /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
115    MMAL_PARAMETER_CONFIGFILE_REGISTERS,      /**< Takes a @ref MMAL_PARAMETER_CONFIGFILE_T */
116    MMAL_PARAMETER_CONFIGFILE_CHUNK_REGISTERS,/**< Takes a @ref MMAL_PARAMETER_CONFIGFILE_CHUNK_T */
117    MMAL_PARAMETER_JPEG_ATTACH_LOG,           /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
118    MMAL_PARAMETER_ZERO_SHUTTER_LAG,          /**< Takes a @ref MMAL_PARAMETER_ZEROSHUTTERLAG_T */
119    MMAL_PARAMETER_FPS_RANGE,                 /**< Takes a @ref MMAL_PARAMETER_FPS_RANGE_T */
120    MMAL_PARAMETER_CAPTURE_EXPOSURE_COMP,     /**< Takes a @ref MMAL_PARAMETER_INT32_T */
121 
122    /* 0x40 */
123    MMAL_PARAMETER_SW_SHARPEN_DISABLE,        /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
124    MMAL_PARAMETER_FLASH_REQUIRED,            /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
125    MMAL_PARAMETER_SW_SATURATION_DISABLE,     /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
126    MMAL_PARAMETER_SHUTTER_SPEED,             /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
127    MMAL_PARAMETER_CUSTOM_AWB_GAINS,          /**< Takes a @ref MMAL_PARAMETER_AWB_GAINS_T */
128    MMAL_PARAMETER_CAMERA_SETTINGS,           /**< Takes a @ref MMAL_PARAMETER_CAMERA_SETTINGS_T */
129    MMAL_PARAMETER_PRIVACY_INDICATOR,         /**< Takes a @ref MMAL_PARAMETER_PRIVACY_INDICATOR_T */
130    MMAL_PARAMETER_VIDEO_DENOISE,             /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
131    MMAL_PARAMETER_STILLS_DENOISE,            /**< Takes a @ref MMAL_PARAMETER_BOOLEAN_T */
132    MMAL_PARAMETER_ANNOTATE,                  /**< Takes a @ref MMAL_PARAMETER_CAMERA_ANNOTATE_T */
133    MMAL_PARAMETER_STEREOSCOPIC_MODE,         /**< Takes a @ref MMAL_PARAMETER_STEREOSCOPIC_MODE_T */
134    MMAL_PARAMETER_CAMERA_INTERFACE,          /**< Takes a @ref MMAL_PARAMETER_CAMERA_INTERFACE_T */
135    MMAL_PARAMETER_CAMERA_CLOCKING_MODE,      /**< Takes a @ref MMAL_PARAMETER_CAMERA_CLOCKING_MODE_T */
136    MMAL_PARAMETER_CAMERA_RX_CONFIG,          /**< Takes a @ref MMAL_PARAMETER_CAMERA_RX_CONFIG_T */
137    MMAL_PARAMETER_CAMERA_RX_TIMING,          /**< Takes a @ref MMAL_PARAMETER_CAMERA_RX_TIMING_T */
138    MMAL_PARAMETER_DPF_CONFIG,                /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
139 
140    /* 0x50 */
141    MMAL_PARAMETER_JPEG_RESTART_INTERVAL,     /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
142    MMAL_PARAMETER_CAMERA_ISP_BLOCK_OVERRIDE, /**< Takes a @ref MMAL_PARAMETER_UINT32_T */
143    MMAL_PARAMETER_LENS_SHADING_OVERRIDE,     /**< Takes a @ref MMAL_PARAMETER_LENS_SHADING_T */
144    MMAL_PARAMETER_BLACK_LEVEL,               /**< Takes a @ref MMAL_PARAMETER_UINT32_T  or @ref MMAL_PARAMETER_BLACK_LEVEL_T */
145    MMAL_PARAMETER_RESIZE_PARAMS,             /**< Takes a @ref MMAL_PARAMETER_RESIZE_T */
146    MMAL_PARAMETER_CROP,                      /**< Takes a @ref MMAL_PARAMETER_CROP_T */
147    MMAL_PARAMETER_OUTPUT_SHIFT,              /**< Takes a @ref MMAL_PARAMETER_INT32_T */
148    MMAL_PARAMETER_CCM_SHIFT,                 /**< Takes a @ref MMAL_PARAMETER_INT32_T */
149    MMAL_PARAMETER_CUSTOM_CCM,                /**< Takes a @ref MMAL_PARAMETER_CUSTOM_CCM_T */
150    MMAL_PARAMETER_ANALOG_GAIN,               /**< Takes a @ref MMAL_PARAMETER_RATIONAL_T */
151    MMAL_PARAMETER_DIGITAL_GAIN,              /**< Takes a @ref MMAL_PARAMETER_RATIONAL_T */
152    MMAL_PARAMETER_DENOISE,                   /**< Takes a @ref MMAL_PARAMETER_DENOISE_T */
153    MMAL_PARAMETER_SHARPEN,                   /**< Takes a @ref MMAL_PARAMETER_SHARPEN_T */
154    MMAL_PARAMETER_GREEN_EQ,                  /**< Takes a @ref MMAL_PARAMETER_GREEN_EQ_T */
155    MMAL_PARAMETER_DPC,                       /**< Tales a @ref MMAP_PARAMETER_DPC_T */
156    MMAL_PARAMETER_GAMMA,                     /**< Tales a @ref MMAP_PARAMETER_GAMMA_T */
157    MMAL_PARAMETER_CDN,                       /**< Takes a @ref MMAL_PARAMETER_CDN_T */
158 };
159 
160 /** Thumbnail configuration parameter type */
161 typedef struct MMAL_PARAMETER_THUMBNAIL_CONFIG_T
162 {
163    MMAL_PARAMETER_HEADER_T hdr;
164 
165    uint32_t enable;                  /**< Enable generation of thumbnails during still capture */
166    uint32_t width;                   /**< Desired width of the thumbnail */
167    uint32_t height;                  /**< Desired height of the thumbnail */
168    uint32_t quality;                 /**< Desired compression quality of the thumbnail */
169 } MMAL_PARAMETER_THUMBNAIL_CONFIG_T;
170 
171 /** EXIF parameter type. */
172 typedef struct MMAL_PARAMETER_EXIF_T
173 {
174    MMAL_PARAMETER_HEADER_T hdr;
175 
176    uint32_t keylen;                            /**< If 0, assume key is terminated by '=', otherwise length of key and treat data as binary */
177    uint32_t value_offset;                      /**< Offset within data buffer of the start of the value. If 0, look for a "key=value" string */
178    uint32_t valuelen;                          /**< If 0, assume value is null-terminated, otherwise length of value and treat data as binary */
179    uint8_t data[1];                            /**< EXIF key/value string. Variable length */
180 } MMAL_PARAMETER_EXIF_T;
181 
182 /** Exposure modes. */
183 typedef enum
184 {
185    MMAL_PARAM_EXPOSUREMODE_OFF,
186    MMAL_PARAM_EXPOSUREMODE_AUTO,
187    MMAL_PARAM_EXPOSUREMODE_NIGHT,
188    MMAL_PARAM_EXPOSUREMODE_NIGHTPREVIEW,
189    MMAL_PARAM_EXPOSUREMODE_BACKLIGHT,
190    MMAL_PARAM_EXPOSUREMODE_SPOTLIGHT,
191    MMAL_PARAM_EXPOSUREMODE_SPORTS,
192    MMAL_PARAM_EXPOSUREMODE_SNOW,
193    MMAL_PARAM_EXPOSUREMODE_BEACH,
194    MMAL_PARAM_EXPOSUREMODE_VERYLONG,
195    MMAL_PARAM_EXPOSUREMODE_FIXEDFPS,
196    MMAL_PARAM_EXPOSUREMODE_ANTISHAKE,
197    MMAL_PARAM_EXPOSUREMODE_FIREWORKS,
198    MMAL_PARAM_EXPOSUREMODE_MAX = 0x7fffffff
199 } MMAL_PARAM_EXPOSUREMODE_T;
200 
201 typedef struct MMAL_PARAMETER_EXPOSUREMODE_T
202 {
203    MMAL_PARAMETER_HEADER_T hdr;
204 
205    MMAL_PARAM_EXPOSUREMODE_T value;   /**< exposure mode */
206 } MMAL_PARAMETER_EXPOSUREMODE_T;
207 
208 typedef enum
209 {
210    MMAL_PARAM_EXPOSUREMETERINGMODE_AVERAGE,
211    MMAL_PARAM_EXPOSUREMETERINGMODE_SPOT,
212    MMAL_PARAM_EXPOSUREMETERINGMODE_BACKLIT,
213    MMAL_PARAM_EXPOSUREMETERINGMODE_MATRIX,
214    MMAL_PARAM_EXPOSUREMETERINGMODE_MAX = 0x7fffffff
215 } MMAL_PARAM_EXPOSUREMETERINGMODE_T;
216 
217 typedef struct MMAL_PARAMETER_EXPOSUREMETERINGMODE_T
218 {
219    MMAL_PARAMETER_HEADER_T hdr;
220 
221    MMAL_PARAM_EXPOSUREMETERINGMODE_T value;   /**< metering mode */
222 } MMAL_PARAMETER_EXPOSUREMETERINGMODE_T;
223 
224 /** AWB parameter modes. */
225 typedef enum MMAL_PARAM_AWBMODE_T
226 {
227    MMAL_PARAM_AWBMODE_OFF,
228    MMAL_PARAM_AWBMODE_AUTO,
229    MMAL_PARAM_AWBMODE_SUNLIGHT,
230    MMAL_PARAM_AWBMODE_CLOUDY,
231    MMAL_PARAM_AWBMODE_SHADE,
232    MMAL_PARAM_AWBMODE_TUNGSTEN,
233    MMAL_PARAM_AWBMODE_FLUORESCENT,
234    MMAL_PARAM_AWBMODE_INCANDESCENT,
235    MMAL_PARAM_AWBMODE_FLASH,
236    MMAL_PARAM_AWBMODE_HORIZON,
237    MMAL_PARAM_AWBMODE_GREYWORLD,
238    MMAL_PARAM_AWBMODE_MAX = 0x7fffffff
239 } MMAL_PARAM_AWBMODE_T;
240 
241 /** AWB parameter type. */
242 typedef struct MMAL_PARAMETER_AWBMODE_T
243 {
244    MMAL_PARAMETER_HEADER_T hdr;
245 
246    MMAL_PARAM_AWBMODE_T value;   /**< AWB mode */
247 } MMAL_PARAMETER_AWBMODE_T;
248 
249 /** Image effect */
250 typedef enum MMAL_PARAM_IMAGEFX_T
251 {
252    MMAL_PARAM_IMAGEFX_NONE,
253    MMAL_PARAM_IMAGEFX_NEGATIVE,
254    MMAL_PARAM_IMAGEFX_SOLARIZE,
255    MMAL_PARAM_IMAGEFX_POSTERIZE,
256    MMAL_PARAM_IMAGEFX_WHITEBOARD,
257    MMAL_PARAM_IMAGEFX_BLACKBOARD,
258    MMAL_PARAM_IMAGEFX_SKETCH,
259    MMAL_PARAM_IMAGEFX_DENOISE,
260    MMAL_PARAM_IMAGEFX_EMBOSS,
261    MMAL_PARAM_IMAGEFX_OILPAINT,
262    MMAL_PARAM_IMAGEFX_HATCH,
263    MMAL_PARAM_IMAGEFX_GPEN,
264    MMAL_PARAM_IMAGEFX_PASTEL,
265    MMAL_PARAM_IMAGEFX_WATERCOLOUR,
266    MMAL_PARAM_IMAGEFX_FILM,
267    MMAL_PARAM_IMAGEFX_BLUR,
268    MMAL_PARAM_IMAGEFX_SATURATION,
269    MMAL_PARAM_IMAGEFX_COLOURSWAP,
270    MMAL_PARAM_IMAGEFX_WASHEDOUT,
271    MMAL_PARAM_IMAGEFX_POSTERISE,
272    MMAL_PARAM_IMAGEFX_COLOURPOINT,
273    MMAL_PARAM_IMAGEFX_COLOURBALANCE,
274    MMAL_PARAM_IMAGEFX_CARTOON,
275    MMAL_PARAM_IMAGEFX_DEINTERLACE_DOUBLE,
276    MMAL_PARAM_IMAGEFX_DEINTERLACE_ADV,
277    MMAL_PARAM_IMAGEFX_DEINTERLACE_FAST,
278    MMAL_PARAM_IMAGEFX_MAX = 0x7fffffff
279 } MMAL_PARAM_IMAGEFX_T;
280 
281 typedef struct MMAL_PARAMETER_IMAGEFX_T
282 {
283    MMAL_PARAMETER_HEADER_T hdr;
284 
285    MMAL_PARAM_IMAGEFX_T value;   /**< Image effect mode */
286 } MMAL_PARAMETER_IMAGEFX_T;
287 
288 #define MMAL_MAX_IMAGEFX_PARAMETERS 6  /* Image effects library currently uses a maximum of 5 parameters per effect */
289 
290 typedef struct MMAL_PARAMETER_IMAGEFX_PARAMETERS_T
291 {
292    MMAL_PARAMETER_HEADER_T hdr;
293 
294    MMAL_PARAM_IMAGEFX_T effect;   /**< Image effect mode */
295    uint32_t num_effect_params;     /**< Number of used elements in */
296    uint32_t effect_parameter[MMAL_MAX_IMAGEFX_PARAMETERS]; /**< Array of parameters */
297 } MMAL_PARAMETER_IMAGEFX_PARAMETERS_T;
298 
299 /** Colour effect parameter type*/
300 typedef struct MMAL_PARAMETER_COLOURFX_T
301 {
302    MMAL_PARAMETER_HEADER_T hdr;
303 
304    int32_t enable;
305    uint32_t u;
306    uint32_t v;
307 } MMAL_PARAMETER_COLOURFX_T;
308 
309 typedef enum MMAL_CAMERA_STC_MODE_T
310 {
311    MMAL_PARAM_STC_MODE_OFF,         /**< Frames do not have STCs, as needed in OpenMAX/IL */
312    MMAL_PARAM_STC_MODE_RAW,         /**< Use raw clock STC, needed for true pause/resume support */
313    MMAL_PARAM_STC_MODE_COOKED,      /**< Start the STC from the start of capture, only for quick demo code */
314    MMAL_PARAM_STC_MODE_MAX = 0x7fffffff
315 } MMAL_CAMERA_STC_MODE_T;
316 
317 typedef struct MMAL_PARAMETER_CAMERA_STC_MODE_T
318 {
319    MMAL_PARAMETER_HEADER_T hdr;
320    MMAL_CAMERA_STC_MODE_T value;
321 } MMAL_PARAMETER_CAMERA_STC_MODE_T;
322 
323 typedef enum MMAL_PARAM_FLICKERAVOID_T
324 {
325    MMAL_PARAM_FLICKERAVOID_OFF,
326    MMAL_PARAM_FLICKERAVOID_AUTO,
327    MMAL_PARAM_FLICKERAVOID_50HZ,
328    MMAL_PARAM_FLICKERAVOID_60HZ,
329    MMAL_PARAM_FLICKERAVOID_MAX = 0x7FFFFFFF
330 } MMAL_PARAM_FLICKERAVOID_T;
331 
332 typedef struct MMAL_PARAMETER_FLICKERAVOID_T
333 {
334    MMAL_PARAMETER_HEADER_T hdr;
335 
336    MMAL_PARAM_FLICKERAVOID_T value;   /**< Flicker avoidance mode */
337 } MMAL_PARAMETER_FLICKERAVOID_T;
338 
339 typedef enum MMAL_PARAM_FLASH_T
340 {
341    MMAL_PARAM_FLASH_OFF,
342    MMAL_PARAM_FLASH_AUTO,
343    MMAL_PARAM_FLASH_ON,
344    MMAL_PARAM_FLASH_REDEYE,
345    MMAL_PARAM_FLASH_FILLIN,
346    MMAL_PARAM_FLASH_TORCH,
347    MMAL_PARAM_FLASH_MAX = 0x7FFFFFFF
348 } MMAL_PARAM_FLASH_T;
349 
350 typedef struct MMAL_PARAMETER_FLASH_T
351 {
352    MMAL_PARAMETER_HEADER_T hdr;
353 
354    MMAL_PARAM_FLASH_T value;   /**< Flash mode */
355 } MMAL_PARAMETER_FLASH_T;
356 
357 typedef enum MMAL_PARAM_REDEYE_T
358 {
359    MMAL_PARAM_REDEYE_OFF,
360    MMAL_PARAM_REDEYE_ON,
361    MMAL_PARAM_REDEYE_SIMPLE,
362    MMAL_PARAM_REDEYE_MAX = 0x7FFFFFFF
363 } MMAL_PARAM_REDEYE_T;
364 
365 typedef struct MMAL_PARAMETER_REDEYE_T
366 {
367    MMAL_PARAMETER_HEADER_T hdr;
368 
369    MMAL_PARAM_REDEYE_T value;   /**< Red eye reduction mode */
370 } MMAL_PARAMETER_REDEYE_T;
371 
372 typedef enum MMAL_PARAM_FOCUS_T
373 {
374    MMAL_PARAM_FOCUS_AUTO,
375    MMAL_PARAM_FOCUS_AUTO_NEAR,
376    MMAL_PARAM_FOCUS_AUTO_MACRO,
377    MMAL_PARAM_FOCUS_CAF,
378    MMAL_PARAM_FOCUS_CAF_NEAR,
379    MMAL_PARAM_FOCUS_FIXED_INFINITY,
380    MMAL_PARAM_FOCUS_FIXED_HYPERFOCAL,
381    MMAL_PARAM_FOCUS_FIXED_NEAR,
382    MMAL_PARAM_FOCUS_FIXED_MACRO,
383    MMAL_PARAM_FOCUS_EDOF,
384    MMAL_PARAM_FOCUS_CAF_MACRO,
385    MMAL_PARAM_FOCUS_CAF_FAST,
386    MMAL_PARAM_FOCUS_CAF_NEAR_FAST,
387    MMAL_PARAM_FOCUS_CAF_MACRO_FAST,
388    MMAL_PARAM_FOCUS_FIXED_CURRENT,
389    MMAL_PARAM_FOCUS_MAX = 0x7FFFFFFF
390 } MMAL_PARAM_FOCUS_T;
391 
392 typedef struct MMAL_PARAMETER_FOCUS_T
393 {
394    MMAL_PARAMETER_HEADER_T hdr;
395 
396    MMAL_PARAM_FOCUS_T value;   /**< Focus mode */
397 } MMAL_PARAMETER_FOCUS_T;
398 
399 typedef enum MMAL_PARAM_CAPTURE_STATUS_T
400 {
401    MMAL_PARAM_CAPTURE_STATUS_NOT_CAPTURING,
402    MMAL_PARAM_CAPTURE_STATUS_CAPTURE_STARTED,
403    MMAL_PARAM_CAPTURE_STATUS_CAPTURE_ENDED,
404 
405    MMAL_PARAM_CAPTURE_STATUS_MAX = 0x7FFFFFFF
406 } MMAL_PARAM_CAPTURE_STATUS_T;
407 
408 typedef struct MMAL_PARAMETER_CAPTURE_STATUS_T
409 {
410    MMAL_PARAMETER_HEADER_T hdr;
411 
412    MMAL_PARAM_CAPTURE_STATUS_T status;   /**< Capture status */
413 } MMAL_PARAMETER_CAPTURE_STATUS_T;
414 
415 typedef enum MMAL_PARAM_FOCUS_STATUS_T
416 {
417    MMAL_PARAM_FOCUS_STATUS_OFF,
418    MMAL_PARAM_FOCUS_STATUS_REQUEST,
419    MMAL_PARAM_FOCUS_STATUS_REACHED,
420    MMAL_PARAM_FOCUS_STATUS_UNABLE_TO_REACH,
421    MMAL_PARAM_FOCUS_STATUS_LOST,
422    MMAL_PARAM_FOCUS_STATUS_CAF_MOVING,
423    MMAL_PARAM_FOCUS_STATUS_CAF_SUCCESS,
424    MMAL_PARAM_FOCUS_STATUS_CAF_FAILED,
425    MMAL_PARAM_FOCUS_STATUS_MANUAL_MOVING,
426    MMAL_PARAM_FOCUS_STATUS_MANUAL_REACHED,
427    MMAL_PARAM_FOCUS_STATUS_CAF_WATCHING,
428    MMAL_PARAM_FOCUS_STATUS_CAF_SCENE_CHANGED,
429 
430    MMAL_PARAM_FOCUS_STATUS_MAX = 0x7FFFFFFF
431 } MMAL_PARAM_FOCUS_STATUS_T;
432 
433 typedef struct MMAL_PARAMETER_FOCUS_STATUS_T
434 {
435    MMAL_PARAMETER_HEADER_T hdr;
436 
437    MMAL_PARAM_FOCUS_STATUS_T status;   /**< Focus status */
438 } MMAL_PARAMETER_FOCUS_STATUS_T;
439 
440 typedef enum MMAL_PARAM_FACE_TRACK_MODE_T
441 {
442    MMAL_PARAM_FACE_DETECT_NONE,                           /**< Disables face detection */
443    MMAL_PARAM_FACE_DETECT_ON,                             /**< Enables face detection */
444    MMAL_PARAM_FACE_DETECT_MAX = 0x7FFFFFFF
445 } MMAL_PARAM_FACE_TRACK_MODE_T;
446 
447 typedef struct MMAL_PARAMETER_FACE_TRACK_T /* face tracking control */
448 {
449    MMAL_PARAMETER_HEADER_T hdr;
450    MMAL_PARAM_FACE_TRACK_MODE_T mode;
451    uint32_t maxRegions;
452    uint32_t frames;
453    uint32_t quality;
454 } MMAL_PARAMETER_FACE_TRACK_T;
455 
456 typedef struct MMAL_PARAMETER_FACE_TRACK_FACE_T /* face tracking face information */
457 {
458    int32_t     face_id;             /**< Face ID. Should remain the same whilst the face is detected to remain in the scene */
459    int32_t     score;               /**< Confidence of the face detection. Range 1-100 (1=unsure, 100=positive). */
460    MMAL_RECT_T face_rect;           /**< Rectangle around the whole face */
461 
462    MMAL_RECT_T eye_rect[2];         /**< Rectangle around the eyes ([0] = left eye, [1] = right eye) */
463    MMAL_RECT_T mouth_rect;          /**< Rectangle around the mouth */
464 } MMAL_PARAMETER_FACE_TRACK_FACE_T;
465 
466 typedef struct MMAL_PARAMETER_FACE_TRACK_RESULTS_T /* face tracking results */
467 {
468    MMAL_PARAMETER_HEADER_T hdr;
469 
470    uint32_t num_faces;        /**< Number of faces detected */
471    uint32_t frame_width;      /**< Width of the frame on which the faces were detected (allows scaling) */
472    uint32_t frame_height;     /**< Height of the frame on which the faces were detected (allows scaling) */
473 
474    MMAL_PARAMETER_FACE_TRACK_FACE_T faces[1];   /**< Face information (variable length array */
475 } MMAL_PARAMETER_FACE_TRACK_RESULTS_T;
476 
477 typedef enum MMAL_PARAMETER_CAMERA_CONFIG_TIMESTAMP_MODE_T
478 {
479    MMAL_PARAM_TIMESTAMP_MODE_ZERO,           /**< Always timestamp frames as 0 */
480    MMAL_PARAM_TIMESTAMP_MODE_RAW_STC,        /**< Use the raw STC value for the frame timestamp */
481    MMAL_PARAM_TIMESTAMP_MODE_RESET_STC,      /**< Use the STC timestamp but subtract the timestamp
482                                               * of the first frame sent to give a zero based timestamp.
483                                               */
484    MMAL_PARAM_TIMESTAMP_MODE_MAX = 0x7FFFFFFF
485 } MMAL_PARAMETER_CAMERA_CONFIG_TIMESTAMP_MODE_T;
486 
487 typedef struct MMAL_PARAMETER_CAMERA_CONFIG_T
488 {
489    MMAL_PARAMETER_HEADER_T hdr;
490 
491    /* Parameters for setting up the image pools */
492    uint32_t max_stills_w;        /**< Max size of stills capture */
493    uint32_t max_stills_h;
494    uint32_t stills_yuv422;       /**< Allow YUV422 stills capture */
495    uint32_t one_shot_stills;     /**< Continuous or one shot stills captures. */
496 
497    uint32_t max_preview_video_w; /**< Max size of the preview or video capture frames */
498    uint32_t max_preview_video_h;
499    uint32_t num_preview_video_frames;
500 
501    uint32_t stills_capture_circular_buffer_height; /**< Sets the height of the circular buffer for stills capture. */
502 
503    uint32_t fast_preview_resume;    /**< Allows preview/encode to resume as fast as possible after the stills input frame
504                                      * has been received, and then processes the still frame in the background
505                                      * whilst preview/encode has resumed.
506                                      * Actual mode is controlled by MMAL_PARAMETER_CAPTURE_MODE.
507                                      */
508 
509    MMAL_PARAMETER_CAMERA_CONFIG_TIMESTAMP_MODE_T use_stc_timestamp;
510                                     /**< Selects algorithm for timestamping frames if there is no clock component connected.
511                                       */
512 
513 
514 } MMAL_PARAMETER_CAMERA_CONFIG_T;
515 
516 #define MMAL_PARAMETER_CAMERA_INFO_MAX_CAMERAS 4
517 #define MMAL_PARAMETER_CAMERA_INFO_MAX_FLASHES 2
518 #define MMAL_PARAMETER_CAMERA_INFO_MAX_STR_LEN 16
519 
520 typedef struct MMAL_PARAMETER_CAMERA_INFO_CAMERA_T
521 {
522    uint32_t    port_id;
523    uint32_t    max_width;
524    uint32_t    max_height;
525    MMAL_BOOL_T lens_present;
526    char        camera_name[MMAL_PARAMETER_CAMERA_INFO_MAX_STR_LEN];
527 } MMAL_PARAMETER_CAMERA_INFO_CAMERA_T;
528 
529 typedef enum MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_T
530 {
531    MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_XENON = 0, /* Make values explicit */
532    MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_LED   = 1, /* to ensure they match */
533    MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_OTHER = 2, /* values in config ini */
534    MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_MAX = 0x7FFFFFFF
535 } MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_T;
536 
537 typedef struct MMAL_PARAMETER_CAMERA_INFO_FLASH_T
538 {
539    MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_T flash_type;
540 } MMAL_PARAMETER_CAMERA_INFO_FLASH_T;
541 
542 typedef struct MMAL_PARAMETER_CAMERA_INFO_T
543 {
544    MMAL_PARAMETER_HEADER_T             hdr;
545    uint32_t                            num_cameras;
546    uint32_t                            num_flashes;
547    MMAL_PARAMETER_CAMERA_INFO_CAMERA_T cameras[MMAL_PARAMETER_CAMERA_INFO_MAX_CAMERAS];
548    MMAL_PARAMETER_CAMERA_INFO_FLASH_T  flashes[MMAL_PARAMETER_CAMERA_INFO_MAX_FLASHES];
549 } MMAL_PARAMETER_CAMERA_INFO_T;
550 
551 typedef enum MMAL_PARAMETER_CAPTUREMODE_MODE_T
552 {
553    MMAL_PARAM_CAPTUREMODE_WAIT_FOR_END,            /**< Resumes preview once capture is completed. */
554    MMAL_PARAM_CAPTUREMODE_WAIT_FOR_END_AND_HOLD,   /**< Resumes preview once capture is completed, and hold the image for subsequent reprocessing. */
555    MMAL_PARAM_CAPTUREMODE_RESUME_VF_IMMEDIATELY,   /**< Resumes preview as soon as possible once capture frame is received from the sensor.
556                                                     *   Requires fast_preview_resume to be set via MMAL_PARAMETER_CAMERA_CONFIG.
557                                                     */
558 } MMAL_PARAMETER_CAPTUREMODE_MODE_T;
559 
560 /** Stills capture mode control. */
561 typedef struct MMAL_PARAMETER_CAPTUREMODE_T
562 {
563    MMAL_PARAMETER_HEADER_T hdr;
564    MMAL_PARAMETER_CAPTUREMODE_MODE_T mode;
565 } MMAL_PARAMETER_CAPTUREMODE_T;
566 
567 typedef enum MMAL_PARAMETER_FOCUS_REGION_TYPE_T
568 {
569    MMAL_PARAMETER_FOCUS_REGION_TYPE_NORMAL,     /**< Region defines a generic region */
570    MMAL_PARAMETER_FOCUS_REGION_TYPE_FACE,       /**< Region defines a face */
571    MMAL_PARAMETER_FOCUS_REGION_TYPE_MAX
572 } MMAL_PARAMETER_FOCUS_REGION_TYPE_T;
573 
574 typedef struct MMAL_PARAMETER_FOCUS_REGION_T
575 {
576    MMAL_RECT_T rect;    /**< Focus rectangle as 0P16 fixed point values. */
577    uint32_t weight;     /**< Region weighting. */
578    uint32_t mask;       /**< Mask for multi-stage regions */
579    MMAL_PARAMETER_FOCUS_REGION_TYPE_T type;  /**< Region type */
580 } MMAL_PARAMETER_FOCUS_REGION_T;
581 
582 typedef struct MMAL_PARAMETER_FOCUS_REGIONS_T
583 {
584    MMAL_PARAMETER_HEADER_T          hdr;
585    uint32_t                         num_regions;      /**< Number of regions defined */
586    MMAL_BOOL_T                      lock_to_faces;    /**< If region is within tolerance of a face, adopt face rect instead of defined region */
587    MMAL_PARAMETER_FOCUS_REGION_T    regions[1];       /**< Variable number of regions */
588 } MMAL_PARAMETER_FOCUS_REGIONS_T;
589 
590 typedef struct MMAL_PARAMETER_INPUT_CROP_T
591 {
592    MMAL_PARAMETER_HEADER_T hdr;
593    MMAL_RECT_T             rect;    /**< Crop rectangle as 16P16 fixed point values */
594 } MMAL_PARAMETER_INPUT_CROP_T;
595 
596 typedef struct MMAL_PARAMETER_SENSOR_INFORMATION_T
597 {
598    MMAL_PARAMETER_HEADER_T          hdr;
599    MMAL_RATIONAL_T                  f_number;         /**< Lens f-number */
600    MMAL_RATIONAL_T                  focal_length;     /**< Lens focal length */
601    uint32_t                         model_id;         /**< Sensor reported model id */
602    uint32_t                         manufacturer_id;  /**< Sensor reported manufacturer id */
603    uint32_t                         revision;         /**< Sensor reported revision */
604 } MMAL_PARAMETER_SENSOR_INFORMATION_T;
605 
606 typedef struct MMAL_PARAMETER_FLASH_SELECT_T
607 {
608    MMAL_PARAMETER_HEADER_T          hdr;
609    MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_T flash_type;   /**< Flash type to use */
610 } MMAL_PARAMETER_FLASH_SELECT_T;
611 
612 typedef struct MMAL_PARAMETER_FIELD_OF_VIEW_T
613 {
614    MMAL_PARAMETER_HEADER_T          hdr;
615    MMAL_RATIONAL_T                  fov_h;         /**< Horizontal field of view */
616    MMAL_RATIONAL_T                  fov_v;         /**< Vertical field of view */
617 } MMAL_PARAMETER_FIELD_OF_VIEW_T;
618 
619 typedef enum MMAL_PARAMETER_DRC_STRENGTH_T
620 {
621    MMAL_PARAMETER_DRC_STRENGTH_OFF,
622    MMAL_PARAMETER_DRC_STRENGTH_LOW,
623    MMAL_PARAMETER_DRC_STRENGTH_MEDIUM,
624    MMAL_PARAMETER_DRC_STRENGTH_HIGH,
625    MMAL_PARAMETER_DRC_STRENGTH_MAX = 0x7fffffff
626 } MMAL_PARAMETER_DRC_STRENGTH_T;
627 
628 typedef struct MMAL_PARAMETER_DRC_T
629 {
630    MMAL_PARAMETER_HEADER_T          hdr;
631    MMAL_PARAMETER_DRC_STRENGTH_T    strength;      /**< DRC strength */
632 } MMAL_PARAMETER_DRC_T;
633 
634 typedef enum MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_T
635 {
636    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_FACETRACKING,
637    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_REDEYE_REDUCTION,
638    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_VIDEO_STABILISATION,
639    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_WRITE_RAW,
640    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_VIDEO_DENOISE,
641    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_STILLS_DENOISE,
642    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_TEMPORAL_DENOISE,
643    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_ANTISHAKE,
644    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_IMAGE_EFFECTS,
645    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_DYNAMIC_RANGE_COMPRESSION,
646    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_FACE_RECOGNITION,
647    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_FACE_BEAUTIFICATION,
648    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_SCENE_DETECTION,
649    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_HIGH_DYNAMIC_RANGE,
650    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_MAX = 0x7fffffff
651 } MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_T;
652 
653 typedef struct MMAL_PARAMETER_ALGORITHM_CONTROL_T
654 {
655    MMAL_PARAMETER_HEADER_T          hdr;
656    MMAL_PARAMETER_ALGORITHM_CONTROL_ALGORITHMS_T algorithm;
657    MMAL_BOOL_T                      enabled;
658 } MMAL_PARAMETER_ALGORITHM_CONTROL_T;
659 
660 
661 typedef enum MMAL_PARAM_CAMERA_USE_CASE_T
662 {
663    MMAL_PARAM_CAMERA_USE_CASE_UNKNOWN,             /**< Compromise on behaviour as use case totally unknown */
664    MMAL_PARAM_CAMERA_USE_CASE_STILLS_CAPTURE,      /**< Stills capture use case */
665    MMAL_PARAM_CAMERA_USE_CASE_VIDEO_CAPTURE,       /**< Video encode (camcorder) use case */
666 
667    MMAL_PARAM_CAMERA_USE_CASE_MAX = 0x7fffffff
668 } MMAL_PARAM_CAMERA_USE_CASE_T;
669 
670 typedef struct MMAL_PARAMETER_CAMERA_USE_CASE_T
671 {
672    MMAL_PARAMETER_HEADER_T hdr;
673 
674    MMAL_PARAM_CAMERA_USE_CASE_T use_case;   /**< Use case */
675 } MMAL_PARAMETER_CAMERA_USE_CASE_T;
676 
677 typedef struct MMAL_PARAMETER_FPS_RANGE_T
678 {
679    MMAL_PARAMETER_HEADER_T hdr;
680 
681    MMAL_RATIONAL_T   fps_low;                /**< Low end of the permitted framerate range */
682    MMAL_RATIONAL_T   fps_high;               /**< High end of the permitted framerate range */
683 } MMAL_PARAMETER_FPS_RANGE_T;
684 
685 typedef struct MMAL_PARAMETER_ZEROSHUTTERLAG_T
686 {
687    MMAL_PARAMETER_HEADER_T hdr;
688 
689    MMAL_BOOL_T zero_shutter_lag_mode;        /**< Select zero shutter lag mode from sensor */
690    MMAL_BOOL_T concurrent_capture;           /**< Activate full zero shutter lag mode and
691                                               *  use the last preview raw image for the stills capture
692                                               */
693 } MMAL_PARAMETER_ZEROSHUTTERLAG_T;
694 
695 typedef struct MMAL_PARAMETER_AWB_GAINS_T
696 {
697    MMAL_PARAMETER_HEADER_T hdr;
698 
699    MMAL_RATIONAL_T r_gain;                   /**< Red gain */
700    MMAL_RATIONAL_T b_gain;                   /**< Blue gain */
701 } MMAL_PARAMETER_AWB_GAINS_T;
702 
703 typedef struct MMAL_PARAMETER_CAMERA_SETTINGS_T
704 {
705    MMAL_PARAMETER_HEADER_T hdr;
706 
707    uint32_t exposure;
708    MMAL_RATIONAL_T analog_gain;
709    MMAL_RATIONAL_T digital_gain;
710    MMAL_RATIONAL_T awb_red_gain;
711    MMAL_RATIONAL_T awb_blue_gain;
712    uint32_t focus_position;
713 } MMAL_PARAMETER_CAMERA_SETTINGS_T;
714 
715 typedef enum MMAL_PARAM_PRIVACY_INDICATOR_T
716 {
717    MMAL_PARAMETER_PRIVACY_INDICATOR_OFF,        /**< Indicator will be off. */
718    MMAL_PARAMETER_PRIVACY_INDICATOR_ON,         /**< Indicator will come on just after a stills capture and
719                                                  *   and remain on for 2seconds, or will be on whilst output[1]
720                                                  *   is actively producing images.
721                                                  */
722    MMAL_PARAMETER_PRIVACY_INDICATOR_FORCE_ON,   /**< Turns indicator of for 2s independent of capture status.
723                                                  *   Set this mode repeatedly to keep the indicator on for a
724                                                  *   longer period.
725                                                  */
726    MMAL_PARAMETER_PRIVACY_INDICATOR_MAX = 0x7fffffff
727 } MMAL_PARAM_PRIVACY_INDICATOR_T;
728 
729 typedef struct MMAL_PARAMETER_PRIVACY_INDICATOR_T
730 {
731    MMAL_PARAMETER_HEADER_T hdr;
732 
733    MMAL_PARAM_PRIVACY_INDICATOR_T mode;
734 } MMAL_PARAMETER_PRIVACY_INDICATOR_T;
735 
736 #define MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN 32
737 typedef struct MMAL_PARAMETER_CAMERA_ANNOTATE_T
738 {
739    MMAL_PARAMETER_HEADER_T hdr;
740 
741    MMAL_BOOL_T enable;
742    char text[MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN];
743    MMAL_BOOL_T show_shutter;
744    MMAL_BOOL_T show_analog_gain;
745    MMAL_BOOL_T show_lens;
746    MMAL_BOOL_T show_caf;
747    MMAL_BOOL_T show_motion;
748 } MMAL_PARAMETER_CAMERA_ANNOTATE_T;
749 
750 #define MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V2 256
751 typedef struct MMAL_PARAMETER_CAMERA_ANNOTATE_V2_T
752 {
753    MMAL_PARAMETER_HEADER_T hdr;
754 
755    MMAL_BOOL_T enable;
756    MMAL_BOOL_T show_shutter;
757    MMAL_BOOL_T show_analog_gain;
758    MMAL_BOOL_T show_lens;
759    MMAL_BOOL_T show_caf;
760    MMAL_BOOL_T show_motion;
761    MMAL_BOOL_T show_frame_num;
762    MMAL_BOOL_T black_text_background;
763    char text[MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V2];
764 } MMAL_PARAMETER_CAMERA_ANNOTATE_V2_T;
765 
766 #define MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V3 256
767 typedef struct MMAL_PARAMETER_CAMERA_ANNOTATE_V3_T
768 {
769    MMAL_PARAMETER_HEADER_T hdr;
770 
771    MMAL_BOOL_T enable;
772    MMAL_BOOL_T show_shutter;
773    MMAL_BOOL_T show_analog_gain;
774    MMAL_BOOL_T show_lens;
775    MMAL_BOOL_T show_caf;
776    MMAL_BOOL_T show_motion;
777    MMAL_BOOL_T show_frame_num;
778    MMAL_BOOL_T enable_text_background;
779    MMAL_BOOL_T custom_background_colour;
780    uint8_t     custom_background_Y;
781    uint8_t     custom_background_U;
782    uint8_t     custom_background_V;
783    uint8_t     dummy1;
784    MMAL_BOOL_T custom_text_colour;
785    uint8_t     custom_text_Y;
786    uint8_t     custom_text_U;
787    uint8_t     custom_text_V;
788    uint8_t     text_size;
789    char text[MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V3];
790 } MMAL_PARAMETER_CAMERA_ANNOTATE_V3_T;
791 
792 #define MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V4 256
793 typedef struct MMAL_PARAMETER_CAMERA_ANNOTATE_V4_T
794 {
795    MMAL_PARAMETER_HEADER_T hdr;
796 
797    MMAL_BOOL_T enable;
798    MMAL_BOOL_T show_shutter;
799    MMAL_BOOL_T show_analog_gain;
800    MMAL_BOOL_T show_lens;
801    MMAL_BOOL_T show_caf;
802    MMAL_BOOL_T show_motion;
803    MMAL_BOOL_T show_frame_num;
804    MMAL_BOOL_T enable_text_background;
805    MMAL_BOOL_T custom_background_colour;
806    uint8_t     custom_background_Y;
807    uint8_t     custom_background_U;
808    uint8_t     custom_background_V;
809    uint8_t     dummy1;
810    MMAL_BOOL_T custom_text_colour;
811    uint8_t     custom_text_Y;
812    uint8_t     custom_text_U;
813    uint8_t     custom_text_V;
814    uint8_t     text_size;
815    char text[MMAL_CAMERA_ANNOTATE_MAX_TEXT_LEN_V3];
816    uint32_t    justify; //0=centre, 1=left, 2=right
817    uint32_t    x_offset; //Offset from the justification edge
818    uint32_t    y_offset;
819 } MMAL_PARAMETER_CAMERA_ANNOTATE_V4_T;
820 
821 typedef enum MMAL_STEREOSCOPIC_MODE_T {
822    MMAL_STEREOSCOPIC_MODE_NONE = 0,
823    MMAL_STEREOSCOPIC_MODE_SIDE_BY_SIDE = 1,
824    MMAL_STEREOSCOPIC_MODE_TOP_BOTTOM = 2,
825    MMAL_STEREOSCOPIC_MODE_MAX = 0x7FFFFFFF,
826 } MMAL_STEREOSCOPIC_MODE_T;
827 
828 typedef struct MMAL_PARAMETER_STEREOSCOPIC_MODE_T
829 {
830    MMAL_PARAMETER_HEADER_T hdr;
831 
832    MMAL_STEREOSCOPIC_MODE_T mode;
833    MMAL_BOOL_T decimate;
834    MMAL_BOOL_T swap_eyes;
835 } MMAL_PARAMETER_STEREOSCOPIC_MODE_T;
836 
837 typedef enum MMAL_CAMERA_INTERFACE_T {
838    MMAL_CAMERA_INTERFACE_CSI2 = 0,
839    MMAL_CAMERA_INTERFACE_CCP2 = 1,
840    MMAL_CAMERA_INTERFACE_CPI = 2,
841    MMAL_CAMERA_INTERFACE_MAX = 0x7FFFFFFF,
842 } MMAL_CAMERA_INTERFACE_T;
843 
844 typedef struct MMAL_PARAMETER_CAMERA_INTERFACE_T
845 {
846    MMAL_PARAMETER_HEADER_T hdr;
847 
848    MMAL_CAMERA_INTERFACE_T mode;
849 } MMAL_PARAMETER_CAMERA_INTERFACE_T;
850 
851 typedef enum MMAL_CAMERA_CLOCKING_MODE_T {
852    MMAL_CAMERA_CLOCKING_MODE_STROBE = 0,
853    MMAL_CAMERA_CLOCKING_MODE_CLOCK = 1,
854    MMAL_CAMERA_CLOCKING_MODE_MAX = 0x7FFFFFFF,
855 } MMAL_CAMERA_CLOCKING_MODE_T;
856 
857 typedef struct MMAL_PARAMETER_CAMERA_CLOCKING_MODE_T
858 {
859    MMAL_PARAMETER_HEADER_T hdr;
860 
861    MMAL_CAMERA_CLOCKING_MODE_T mode;
862 } MMAL_PARAMETER_CAMERA_CLOCKING_MODE_T;
863 
864 typedef enum MMAL_CAMERA_RX_CONFIG_DECODE {
865    MMAL_CAMERA_RX_CONFIG_DECODE_NONE = 0,
866    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM8TO10 = 1,
867    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM7TO10 = 2,
868    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM6TO10 = 3,
869    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM8TO12 = 4,
870    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM7TO12 = 5,
871    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM6TO12 = 6,
872    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM10TO14 = 7,
873    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM8TO14 = 8,
874    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM12TO16 = 9,
875    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM10TO16 = 10,
876    MMAL_CAMERA_RX_CONFIG_DECODE_DPCM8TO16 = 11,
877    MMAL_CAMERA_RX_CONFIG_DECODE_MAX = 0x7FFFFFFF
878 } MMAL_CAMERA_RX_CONFIG_DECODE;
879 
880 typedef enum MMAL_CAMERA_RX_CONFIG_ENCODE {
881    MMAL_CAMERA_RX_CONFIG_ENCODE_NONE = 0,
882    MMAL_CAMERA_RX_CONFIG_ENCODE_DPCM10TO8 = 1,
883    MMAL_CAMERA_RX_CONFIG_ENCODE_DPCM12TO8 = 2,
884    MMAL_CAMERA_RX_CONFIG_ENCODE_DPCM14TO8 = 3,
885    MMAL_CAMERA_RX_CONFIG_ENCODE_MAX = 0x7FFFFFFF
886 } MMAL_CAMERA_RX_CONFIG_ENCODE;
887 
888 typedef enum MMAL_CAMERA_RX_CONFIG_UNPACK {
889    MMAL_CAMERA_RX_CONFIG_UNPACK_NONE = 0,
890    MMAL_CAMERA_RX_CONFIG_UNPACK_6 = 1,
891    MMAL_CAMERA_RX_CONFIG_UNPACK_7 = 2,
892    MMAL_CAMERA_RX_CONFIG_UNPACK_8 = 3,
893    MMAL_CAMERA_RX_CONFIG_UNPACK_10 = 4,
894    MMAL_CAMERA_RX_CONFIG_UNPACK_12 = 5,
895    MMAL_CAMERA_RX_CONFIG_UNPACK_14 = 6,
896    MMAL_CAMERA_RX_CONFIG_UNPACK_16 = 7,
897    MMAL_CAMERA_RX_CONFIG_UNPACK_MAX = 0x7FFFFFFF
898 } MMAL_CAMERA_RX_CONFIG_UNPACK;
899 
900 typedef enum MMAL_CAMERA_RX_CONFIG_PACK {
901    MMAL_CAMERA_RX_CONFIG_PACK_NONE = 0,
902    MMAL_CAMERA_RX_CONFIG_PACK_8 = 1,
903    MMAL_CAMERA_RX_CONFIG_PACK_10 = 2,
904    MMAL_CAMERA_RX_CONFIG_PACK_12 = 3,
905    MMAL_CAMERA_RX_CONFIG_PACK_14 = 4,
906    MMAL_CAMERA_RX_CONFIG_PACK_16 = 5,
907    MMAL_CAMERA_RX_CONFIG_PACK_RAW10 = 6,
908    MMAL_CAMERA_RX_CONFIG_PACK_RAW12 = 7,
909    MMAL_CAMERA_RX_CONFIG_PACK_MAX = 0x7FFFFFFF
910 } MMAL_CAMERA_RX_CONFIG_PACK;
911 
912 typedef struct MMAL_PARAMETER_CAMERA_RX_CONFIG_T
913 {
914    MMAL_PARAMETER_HEADER_T hdr;
915 
916    MMAL_CAMERA_RX_CONFIG_DECODE decode;
917    MMAL_CAMERA_RX_CONFIG_ENCODE encode;
918    MMAL_CAMERA_RX_CONFIG_UNPACK unpack;
919    MMAL_CAMERA_RX_CONFIG_PACK pack;
920    uint32_t data_lanes;
921    uint32_t encode_block_length;
922    uint32_t embedded_data_lines;
923    uint32_t image_id;
924 } MMAL_PARAMETER_CAMERA_RX_CONFIG_T;
925 
926 typedef struct MMAL_PARAMETER_CAMERA_RX_TIMING_T
927 {
928    MMAL_PARAMETER_HEADER_T hdr;
929 
930    uint32_t timing1;
931    uint32_t timing2;
932    uint32_t timing3;
933    uint32_t timing4;
934    uint32_t timing5;
935    uint32_t term1;
936    uint32_t term2;
937    uint32_t cpi_timing1;
938    uint32_t cpi_timing2;
939 } MMAL_PARAMETER_CAMERA_RX_TIMING_T;
940 
941 typedef struct MMAL_PARAMETER_LENS_SHADING_T
942 {
943    MMAL_PARAMETER_HEADER_T hdr;
944 
945    MMAL_BOOL_T enabled;
946    uint32_t grid_cell_size;
947    uint32_t grid_width;
948    uint32_t grid_stride;
949    uint32_t grid_height;
950    uint32_t mem_handle_table;
951    uint32_t ref_transform;
952 } MMAL_PARAMETER_LENS_SHADING_T;
953 
954 typedef enum MMAL_PARAM_LS_GAIN_FORMAT_TYPE_T
955 {
956    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_U0P8_1 = 0,
957    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_U1P7_0 = 1,
958    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_U1P7_1 = 2,
959    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_U2P6_0 = 3,
960    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_U2P6_1 = 4,
961    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_U3P5_0 = 5,
962    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_U3P5_1 = 6,
963    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_U4P10  = 7,
964    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_DUMMY  = 0x7FFFFFFF
965 } MMAL_PARAM_LS_GAIN_FORMAT_TYPE_T;
966 
967 typedef struct MMAL_PARAMETER_LENS_SHADING_V2_T
968 {
969    MMAL_PARAMETER_HEADER_T hdr;
970 
971    MMAL_BOOL_T enabled;
972    uint32_t grid_cell_size;
973    uint32_t grid_width;
974    uint32_t grid_stride;
975    uint32_t grid_height;
976    uint32_t mem_handle_table;
977    uint32_t ref_transform;
978    MMAL_BOOL_T corner_sampled;
979    MMAL_PARAM_LS_GAIN_FORMAT_TYPE_T gain_format;
980 } MMAL_PARAMETER_LENS_SHADING_V2_T;
981 
982 /*
983 The mode determines the kind of resize.
984 MMAL_RESIZE_BOX allow the max_width and max_height to set a bounding box into
985 which the output must fit.
986 MMAL_RESIZE_BYTES allows max_bytes to set the maximum number of bytes into which the
987 full output frame must fit.  Two flags aid the setting of the output
988 size. preserve_aspect_ratio sets whether the resize should
989 preserve the aspect ratio of the incoming
990 image. allow_upscaling sets whether the resize is allowed to
991 increase the size of the output image compared to the size of the
992 input image.
993 */
994 typedef enum MMAL_RESIZEMODE_T {
995    MMAL_RESIZE_NONE,
996    MMAL_RESIZE_CROP,
997    MMAL_RESIZE_BOX,
998    MMAL_RESIZE_BYTES,
999    MMAL_RESIZE_DUMMY = 0x7FFFFFFF
1000 } MMAL_RESIZEMODE_T;
1001 
1002 typedef struct MMAL_PARAMETER_RESIZE_T {
1003    MMAL_PARAMETER_HEADER_T hdr;
1004 
1005    MMAL_RESIZEMODE_T mode;
1006    uint32_t max_width;
1007    uint32_t max_height;
1008    uint32_t max_bytes;
1009    MMAL_BOOL_T preserve_aspect_ratio;
1010    MMAL_BOOL_T allow_upscaling;
1011 } MMAL_PARAMETER_RESIZE_T;
1012 
1013 typedef struct MMAL_PARAMETER_CROP_T {
1014    MMAL_PARAMETER_HEADER_T hdr;
1015 
1016    MMAL_RECT_T rect;
1017 } MMAL_PARAMETER_CROP_T;
1018 
1019 typedef struct MMAL_PARAMETER_CCM_T {
1020    MMAL_RATIONAL_T ccm[3][3];
1021    int32_t offsets[3];
1022 } MMAL_PARAMETER_CCM_T;
1023 
1024 typedef struct MMAL_PARAMETER_CUSTOM_CCM_T {
1025    MMAL_PARAMETER_HEADER_T hdr;
1026 
1027    MMAL_BOOL_T enable;           /**< Enable the custom CCM. */
1028    MMAL_PARAMETER_CCM_T ccm;     /**< CCM to be used. */
1029 } MMAL_PARAMETER_CUSTOM_CCM_T;
1030 
1031 typedef struct MMAL_PARAMETER_BLACK_LEVEL_T {
1032    MMAL_PARAMETER_HEADER_T hdr;
1033 
1034    MMAL_BOOL_T enable;                  /**< Enable denoise parameters. */
1035    uint16_t black_level_r;              /**< Black level of red channel (out of 16 bits). */
1036    uint16_t black_level_g;              /**< Black level of green channel (out of 16 bits). */
1037    uint16_t black_level_b;              /**< Black level of blue channel (out of 16 bits). */
1038 } MMAL_PARAMETER_BLACK_LEVEL_T;
1039 
1040 typedef enum MMAL_PARAM_CDN_MODE_T {
1041    MMAL_PARAM_CDN_FAST = 0,
1042    MMAL_PARAM_CDN_HIGH_QUALITY = 1,
1043    MMAL_PARAM_CDN_DUMMY  = 0x7FFFFFFF
1044 } MMAL_PARAM_CDN_MODE_T;
1045 
1046 typedef struct MMAL_PARAMETER_CDN_T {
1047    MMAL_PARAMETER_HEADER_T hdr;
1048 
1049    MMAL_BOOL_T enable;                  /**< Enable colour denoise parameters. */
1050    MMAL_PARAM_CDN_MODE_T mode;          /**< Colour denoise mode of operation. */
1051 } MMAL_PARAMETER_CDN_T;
1052 
1053 typedef struct MMAL_PARAMETER_DENOISE_T {
1054    MMAL_PARAMETER_HEADER_T hdr;
1055 
1056    MMAL_BOOL_T enable;                  /**< Enable denoise parameters. */
1057    uint32_t constant;                   /**< Constant offset of the noise profile. */
1058    MMAL_RATIONAL_T slope;               /**< Slope of the noise profile. */
1059    MMAL_RATIONAL_T strength;            /**< Denoise strength. */
1060 } MMAL_PARAMETER_DENOISE_T;
1061 
1062 typedef struct MMAL_PARAMETER_SHARPEN_T {
1063    MMAL_PARAMETER_HEADER_T hdr;
1064 
1065    MMAL_BOOL_T enable;                  /**< Enable sharpening parameters. */
1066    MMAL_RATIONAL_T threshold;           /**< Threshold when sharpening starts. */
1067    MMAL_RATIONAL_T strength;            /**< Rate at which sharpening ramps. */
1068    MMAL_RATIONAL_T limit;               /**< Limit to total sharpening. */
1069 } MMAL_PARAMETER_SHARPEN_T;
1070 
1071 typedef struct MMAL_PARAMETER_GREEN_EQ_T {
1072    MMAL_PARAMETER_HEADER_T hdr;
1073 
1074    MMAL_BOOL_T enable;                  /**< Enable Green Equalisation parameters. */
1075    uint32_t offset;                     /**< Offset of Green Equalisation threshold. */
1076    MMAL_RATIONAL_T slope;               /**< Rate at which Green Equalisation threshold ramps. */
1077 } MMAL_PARAMETER_GREEN_EQ_T;
1078 
1079 typedef enum MMAL_DPC_MODE_T {
1080    MMAL_DPC_MODE_OFF =    0,
1081    MMAL_DPC_MODE_NORMAL = 1,
1082    MMAL_DPC_MODE_STRONG = 2,
1083    MMAL_DPC_MODE_MAX =    0x7FFFFFFF,
1084 } MMAL_DPC_MODE_T;
1085 
1086 typedef struct MMAL_PARAMETER_DPC_T {
1087    MMAL_PARAMETER_HEADER_T hdr;
1088 
1089    MMAL_BOOL_T enable;                  /**< Enable DPC parameters. */
1090    MMAL_DPC_MODE_T strength;            /**< DPC strength. */
1091 } MMAL_PARAMETER_DPC_T;
1092 
1093 #define MMAL_NUM_GAMMA_PTS 33
1094 
1095 typedef struct MMAL_PARAMETER_GAMMA_T {
1096    MMAL_PARAMETER_HEADER_T hdr;
1097 
1098    MMAL_BOOL_T enable;                  /**< Enable gamma parameters. */
1099    uint16_t X[MMAL_NUM_GAMMA_PTS];      /**< X values (16 bit range) */
1100    uint16_t Y[MMAL_NUM_GAMMA_PTS];      /**< Y values (16 bit range) */
1101 } MMAL_PARAMETER_GAMMA_T;
1102 
1103 #endif  /* MMAL_PARAMETERS_CAMERA_H */
1104