/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Broadcom BM2835 V4L2 driver
 *
 * Copyright © 2013 Raspberry Pi (Trading) Ltd.
 *
 * Authors: Vincent Sanders @ Collabora
 *          Dave Stevenson @ Broadcom
 *		(now dave.stevenson@raspberrypi.org)
 *          Simon Mellor @ Broadcom
 *          Luke Diamand @ Broadcom
 */

/* common parameters */

/** @name Parameter groups
 * Parameters are divided into groups, and then allocated sequentially within
 * a group using an enum.
 * @{
 */

#ifndef MMAL_PARAMETERS_H
#define MMAL_PARAMETERS_H

/** Common parameter ID group, used with many types of component. */
#define MMAL_PARAMETER_GROUP_COMMON		(0 << 16)
/** Camera-specific parameter ID group. */
#define MMAL_PARAMETER_GROUP_CAMERA		(1 << 16)
/** Video-specific parameter ID group. */
#define MMAL_PARAMETER_GROUP_VIDEO		(2 << 16)
/** Audio-specific parameter ID group. */
#define MMAL_PARAMETER_GROUP_AUDIO		(3 << 16)
/** Clock-specific parameter ID group. */
#define MMAL_PARAMETER_GROUP_CLOCK		(4 << 16)
/** Miracast-specific parameter ID group. */
#define MMAL_PARAMETER_GROUP_MIRACAST		(5 << 16)

/* Common parameters */
enum mmal_parameter_common_type {
	/**< Never a valid parameter ID */
	MMAL_PARAMETER_UNUSED = MMAL_PARAMETER_GROUP_COMMON,

		/**< MMAL_PARAMETER_ENCODING_T */
	MMAL_PARAMETER_SUPPORTED_ENCODINGS,
		/**< MMAL_PARAMETER_URI_T */
	MMAL_PARAMETER_URI,
		/** MMAL_PARAMETER_CHANGE_EVENT_REQUEST_T */
	MMAL_PARAMETER_CHANGE_EVENT_REQUEST,
		/** MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_ZERO_COPY,
		/**< MMAL_PARAMETER_BUFFER_REQUIREMENTS_T */
	MMAL_PARAMETER_BUFFER_REQUIREMENTS,
		/**< MMAL_PARAMETER_STATISTICS_T */
	MMAL_PARAMETER_STATISTICS,
		/**< MMAL_PARAMETER_CORE_STATISTICS_T */
	MMAL_PARAMETER_CORE_STATISTICS,
		/**< MMAL_PARAMETER_MEM_USAGE_T */
	MMAL_PARAMETER_MEM_USAGE,
		/**< MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_BUFFER_FLAG_FILTER,
		/**< MMAL_PARAMETER_SEEK_T */
	MMAL_PARAMETER_SEEK,
		/**< MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_POWERMON_ENABLE,
		/**< MMAL_PARAMETER_LOGGING_T */
	MMAL_PARAMETER_LOGGING,
		/**< MMAL_PARAMETER_UINT64_T */
	MMAL_PARAMETER_SYSTEM_TIME,
		/**< MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_NO_IMAGE_PADDING,
};

/* camera parameters */

enum mmal_parameter_camera_type {
	/* 0 */
		/** @ref MMAL_PARAMETER_THUMBNAIL_CONFIG_T */
	MMAL_PARAMETER_THUMBNAIL_CONFIGURATION =
		MMAL_PARAMETER_GROUP_CAMERA,
		/**< Unused? */
	MMAL_PARAMETER_CAPTURE_QUALITY,
		/**< @ref MMAL_PARAMETER_INT32_T */
	MMAL_PARAMETER_ROTATION,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_EXIF_DISABLE,
		/**< @ref MMAL_PARAMETER_EXIF_T */
	MMAL_PARAMETER_EXIF,
		/**< @ref MMAL_PARAM_AWBMODE_T */
	MMAL_PARAMETER_AWB_MODE,
		/**< @ref MMAL_PARAMETER_IMAGEFX_T */
	MMAL_PARAMETER_IMAGE_EFFECT,
		/**< @ref MMAL_PARAMETER_COLOURFX_T */
	MMAL_PARAMETER_COLOUR_EFFECT,
		/**< @ref MMAL_PARAMETER_FLICKERAVOID_T */
	MMAL_PARAMETER_FLICKER_AVOID,
		/**< @ref MMAL_PARAMETER_FLASH_T */
	MMAL_PARAMETER_FLASH,
		/**< @ref MMAL_PARAMETER_REDEYE_T */
	MMAL_PARAMETER_REDEYE,
		/**< @ref MMAL_PARAMETER_FOCUS_T */
	MMAL_PARAMETER_FOCUS,
		/**< Unused? */
	MMAL_PARAMETER_FOCAL_LENGTHS,
		/**< @ref MMAL_PARAMETER_INT32_T */
	MMAL_PARAMETER_EXPOSURE_COMP,
		/**< @ref MMAL_PARAMETER_SCALEFACTOR_T */
	MMAL_PARAMETER_ZOOM,
		/**< @ref MMAL_PARAMETER_MIRROR_T */
	MMAL_PARAMETER_MIRROR,

	/* 0x10 */
		/**< @ref MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_CAMERA_NUM,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_CAPTURE,
		/**< @ref MMAL_PARAMETER_EXPOSUREMODE_T */
	MMAL_PARAMETER_EXPOSURE_MODE,
		/**< @ref MMAL_PARAMETER_EXPOSUREMETERINGMODE_T */
	MMAL_PARAMETER_EXP_METERING_MODE,
		/**< @ref MMAL_PARAMETER_FOCUS_STATUS_T */
	MMAL_PARAMETER_FOCUS_STATUS,
		/**< @ref MMAL_PARAMETER_CAMERA_CONFIG_T */
	MMAL_PARAMETER_CAMERA_CONFIG,
		/**< @ref MMAL_PARAMETER_CAPTURE_STATUS_T */
	MMAL_PARAMETER_CAPTURE_STATUS,
		/**< @ref MMAL_PARAMETER_FACE_TRACK_T */
	MMAL_PARAMETER_FACE_TRACK,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_DRAW_BOX_FACES_AND_FOCUS,
		/**< @ref MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_JPEG_Q_FACTOR,
		/**< @ref MMAL_PARAMETER_FRAME_RATE_T */
	MMAL_PARAMETER_FRAME_RATE,
		/**< @ref MMAL_PARAMETER_CAMERA_STC_MODE_T */
	MMAL_PARAMETER_USE_STC,
		/**< @ref MMAL_PARAMETER_CAMERA_INFO_T */
	MMAL_PARAMETER_CAMERA_INFO,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_VIDEO_STABILISATION,
		/**< @ref MMAL_PARAMETER_FACE_TRACK_RESULTS_T */
	MMAL_PARAMETER_FACE_TRACK_RESULTS,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_ENABLE_RAW_CAPTURE,

	/* 0x20 */
		/**< @ref MMAL_PARAMETER_URI_T */
	MMAL_PARAMETER_DPF_FILE,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_ENABLE_DPF_FILE,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_DPF_FAIL_IS_FATAL,
		/**< @ref MMAL_PARAMETER_CAPTUREMODE_T */
	MMAL_PARAMETER_CAPTURE_MODE,
		/**< @ref MMAL_PARAMETER_FOCUS_REGIONS_T */
	MMAL_PARAMETER_FOCUS_REGIONS,
		/**< @ref MMAL_PARAMETER_INPUT_CROP_T */
	MMAL_PARAMETER_INPUT_CROP,
		/**< @ref MMAL_PARAMETER_SENSOR_INFORMATION_T */
	MMAL_PARAMETER_SENSOR_INFORMATION,
		/**< @ref MMAL_PARAMETER_FLASH_SELECT_T */
	MMAL_PARAMETER_FLASH_SELECT,
		/**< @ref MMAL_PARAMETER_FIELD_OF_VIEW_T */
	MMAL_PARAMETER_FIELD_OF_VIEW,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_HIGH_DYNAMIC_RANGE,
		/**< @ref MMAL_PARAMETER_DRC_T */
	MMAL_PARAMETER_DYNAMIC_RANGE_COMPRESSION,
		/**< @ref MMAL_PARAMETER_ALGORITHM_CONTROL_T */
	MMAL_PARAMETER_ALGORITHM_CONTROL,
		/**< @ref MMAL_PARAMETER_RATIONAL_T */
	MMAL_PARAMETER_SHARPNESS,
		/**< @ref MMAL_PARAMETER_RATIONAL_T */
	MMAL_PARAMETER_CONTRAST,
		/**< @ref MMAL_PARAMETER_RATIONAL_T */
	MMAL_PARAMETER_BRIGHTNESS,
		/**< @ref MMAL_PARAMETER_RATIONAL_T */
	MMAL_PARAMETER_SATURATION,

	/* 0x30 */
		/**< @ref MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_ISO,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_ANTISHAKE,
		/** @ref MMAL_PARAMETER_IMAGEFX_PARAMETERS_T */
	MMAL_PARAMETER_IMAGE_EFFECT_PARAMETERS,
		/** @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_CAMERA_BURST_CAPTURE,
		/** @ref MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_CAMERA_MIN_ISO,
		/** @ref MMAL_PARAMETER_CAMERA_USE_CASE_T */
	MMAL_PARAMETER_CAMERA_USE_CASE,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_CAPTURE_STATS_PASS,
		/** @ref MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_CAMERA_CUSTOM_SENSOR_CONFIG,
		/** @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_ENABLE_REGISTER_FILE,
		/** @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_REGISTER_FAIL_IS_FATAL,
		/** @ref MMAL_PARAMETER_CONFIGFILE_T */
	MMAL_PARAMETER_CONFIGFILE_REGISTERS,
		/** @ref MMAL_PARAMETER_CONFIGFILE_CHUNK_T */
	MMAL_PARAMETER_CONFIGFILE_CHUNK_REGISTERS,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_JPEG_ATTACH_LOG,
		/**< @ref MMAL_PARAMETER_ZEROSHUTTERLAG_T */
	MMAL_PARAMETER_ZERO_SHUTTER_LAG,
		/**< @ref MMAL_PARAMETER_FPS_RANGE_T */
	MMAL_PARAMETER_FPS_RANGE,
		/**< @ref MMAL_PARAMETER_INT32_T */
	MMAL_PARAMETER_CAPTURE_EXPOSURE_COMP,

	/* 0x40 */
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_SW_SHARPEN_DISABLE,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_FLASH_REQUIRED,
		/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_SW_SATURATION_DISABLE,
		/**< Takes a @ref MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_SHUTTER_SPEED,
		/**< Takes a @ref MMAL_PARAMETER_AWB_GAINS_T */
	MMAL_PARAMETER_CUSTOM_AWB_GAINS,
};

struct mmal_parameter_rational {
	s32 num;    /**< Numerator */
	s32 den;    /**< Denominator */
};

enum mmal_parameter_camera_config_timestamp_mode {
	MMAL_PARAM_TIMESTAMP_MODE_ZERO = 0, /* Always timestamp frames as 0 */
	MMAL_PARAM_TIMESTAMP_MODE_RAW_STC,  /* Use the raw STC value
					     * for the frame timestamp
					     */
	MMAL_PARAM_TIMESTAMP_MODE_RESET_STC, /* Use the STC timestamp
					      * but subtract the
					      * timestamp of the first
					      * frame sent to give a
					      * zero based timestamp.
					      */
};

struct mmal_parameter_fps_range {
	/**< Low end of the permitted framerate range */
	struct mmal_parameter_rational	fps_low;
	/**< High end of the permitted framerate range */
	struct mmal_parameter_rational	fps_high;
};

/* camera configuration parameter */
struct mmal_parameter_camera_config {
	/* Parameters for setting up the image pools */
	u32 max_stills_w; /* Max size of stills capture */
	u32 max_stills_h;
	u32 stills_yuv422; /* Allow YUV422 stills capture */
	u32 one_shot_stills; /* Continuous or one shot stills captures. */

	u32 max_preview_video_w; /* Max size of the preview or video
				  * capture frames
				  */
	u32 max_preview_video_h;
	u32 num_preview_video_frames;

	/** Sets the height of the circular buffer for stills capture. */
	u32 stills_capture_circular_buffer_height;

	/** Allows preview/encode to resume as fast as possible after the stills
	 * input frame has been received, and then processes the still frame in
	 * the background whilst preview/encode has resumed.
	 * Actual mode is controlled by MMAL_PARAMETER_CAPTURE_MODE.
	 */
	u32 fast_preview_resume;

	/** Selects algorithm for timestamping frames if
	 * there is no clock component connected.
	 * enum mmal_parameter_camera_config_timestamp_mode
	 */
	s32 use_stc_timestamp;
};

enum mmal_parameter_exposuremode {
	MMAL_PARAM_EXPOSUREMODE_OFF,
	MMAL_PARAM_EXPOSUREMODE_AUTO,
	MMAL_PARAM_EXPOSUREMODE_NIGHT,
	MMAL_PARAM_EXPOSUREMODE_NIGHTPREVIEW,
	MMAL_PARAM_EXPOSUREMODE_BACKLIGHT,
	MMAL_PARAM_EXPOSUREMODE_SPOTLIGHT,
	MMAL_PARAM_EXPOSUREMODE_SPORTS,
	MMAL_PARAM_EXPOSUREMODE_SNOW,
	MMAL_PARAM_EXPOSUREMODE_BEACH,
	MMAL_PARAM_EXPOSUREMODE_VERYLONG,
	MMAL_PARAM_EXPOSUREMODE_FIXEDFPS,
	MMAL_PARAM_EXPOSUREMODE_ANTISHAKE,
	MMAL_PARAM_EXPOSUREMODE_FIREWORKS,
};

enum mmal_parameter_exposuremeteringmode {
	MMAL_PARAM_EXPOSUREMETERINGMODE_AVERAGE,
	MMAL_PARAM_EXPOSUREMETERINGMODE_SPOT,
	MMAL_PARAM_EXPOSUREMETERINGMODE_BACKLIT,
	MMAL_PARAM_EXPOSUREMETERINGMODE_MATRIX,
};

enum mmal_parameter_awbmode {
	MMAL_PARAM_AWBMODE_OFF,
	MMAL_PARAM_AWBMODE_AUTO,
	MMAL_PARAM_AWBMODE_SUNLIGHT,
	MMAL_PARAM_AWBMODE_CLOUDY,
	MMAL_PARAM_AWBMODE_SHADE,
	MMAL_PARAM_AWBMODE_TUNGSTEN,
	MMAL_PARAM_AWBMODE_FLUORESCENT,
	MMAL_PARAM_AWBMODE_INCANDESCENT,
	MMAL_PARAM_AWBMODE_FLASH,
	MMAL_PARAM_AWBMODE_HORIZON,
};

enum mmal_parameter_imagefx {
	MMAL_PARAM_IMAGEFX_NONE,
	MMAL_PARAM_IMAGEFX_NEGATIVE,
	MMAL_PARAM_IMAGEFX_SOLARIZE,
	MMAL_PARAM_IMAGEFX_POSTERIZE,
	MMAL_PARAM_IMAGEFX_WHITEBOARD,
	MMAL_PARAM_IMAGEFX_BLACKBOARD,
	MMAL_PARAM_IMAGEFX_SKETCH,
	MMAL_PARAM_IMAGEFX_DENOISE,
	MMAL_PARAM_IMAGEFX_EMBOSS,
	MMAL_PARAM_IMAGEFX_OILPAINT,
	MMAL_PARAM_IMAGEFX_HATCH,
	MMAL_PARAM_IMAGEFX_GPEN,
	MMAL_PARAM_IMAGEFX_PASTEL,
	MMAL_PARAM_IMAGEFX_WATERCOLOUR,
	MMAL_PARAM_IMAGEFX_FILM,
	MMAL_PARAM_IMAGEFX_BLUR,
	MMAL_PARAM_IMAGEFX_SATURATION,
	MMAL_PARAM_IMAGEFX_COLOURSWAP,
	MMAL_PARAM_IMAGEFX_WASHEDOUT,
	MMAL_PARAM_IMAGEFX_POSTERISE,
	MMAL_PARAM_IMAGEFX_COLOURPOINT,
	MMAL_PARAM_IMAGEFX_COLOURBALANCE,
	MMAL_PARAM_IMAGEFX_CARTOON,
};

enum MMAL_PARAM_FLICKERAVOID {
	MMAL_PARAM_FLICKERAVOID_OFF,
	MMAL_PARAM_FLICKERAVOID_AUTO,
	MMAL_PARAM_FLICKERAVOID_50HZ,
	MMAL_PARAM_FLICKERAVOID_60HZ,
	MMAL_PARAM_FLICKERAVOID_MAX = 0x7FFFFFFF
};

struct mmal_parameter_awbgains {
	struct mmal_parameter_rational r_gain;	/**< Red gain */
	struct mmal_parameter_rational b_gain;	/**< Blue gain */
};

/** Manner of video rate control */
enum mmal_parameter_rate_control_mode {
	MMAL_VIDEO_RATECONTROL_DEFAULT,
	MMAL_VIDEO_RATECONTROL_VARIABLE,
	MMAL_VIDEO_RATECONTROL_CONSTANT,
	MMAL_VIDEO_RATECONTROL_VARIABLE_SKIP_FRAMES,
	MMAL_VIDEO_RATECONTROL_CONSTANT_SKIP_FRAMES
};

enum mmal_video_profile {
	MMAL_VIDEO_PROFILE_H263_BASELINE,
	MMAL_VIDEO_PROFILE_H263_H320CODING,
	MMAL_VIDEO_PROFILE_H263_BACKWARDCOMPATIBLE,
	MMAL_VIDEO_PROFILE_H263_ISWV2,
	MMAL_VIDEO_PROFILE_H263_ISWV3,
	MMAL_VIDEO_PROFILE_H263_HIGHCOMPRESSION,
	MMAL_VIDEO_PROFILE_H263_INTERNET,
	MMAL_VIDEO_PROFILE_H263_INTERLACE,
	MMAL_VIDEO_PROFILE_H263_HIGHLATENCY,
	MMAL_VIDEO_PROFILE_MP4V_SIMPLE,
	MMAL_VIDEO_PROFILE_MP4V_SIMPLESCALABLE,
	MMAL_VIDEO_PROFILE_MP4V_CORE,
	MMAL_VIDEO_PROFILE_MP4V_MAIN,
	MMAL_VIDEO_PROFILE_MP4V_NBIT,
	MMAL_VIDEO_PROFILE_MP4V_SCALABLETEXTURE,
	MMAL_VIDEO_PROFILE_MP4V_SIMPLEFACE,
	MMAL_VIDEO_PROFILE_MP4V_SIMPLEFBA,
	MMAL_VIDEO_PROFILE_MP4V_BASICANIMATED,
	MMAL_VIDEO_PROFILE_MP4V_HYBRID,
	MMAL_VIDEO_PROFILE_MP4V_ADVANCEDREALTIME,
	MMAL_VIDEO_PROFILE_MP4V_CORESCALABLE,
	MMAL_VIDEO_PROFILE_MP4V_ADVANCEDCODING,
	MMAL_VIDEO_PROFILE_MP4V_ADVANCEDCORE,
	MMAL_VIDEO_PROFILE_MP4V_ADVANCEDSCALABLE,
	MMAL_VIDEO_PROFILE_MP4V_ADVANCEDSIMPLE,
	MMAL_VIDEO_PROFILE_H264_BASELINE,
	MMAL_VIDEO_PROFILE_H264_MAIN,
	MMAL_VIDEO_PROFILE_H264_EXTENDED,
	MMAL_VIDEO_PROFILE_H264_HIGH,
	MMAL_VIDEO_PROFILE_H264_HIGH10,
	MMAL_VIDEO_PROFILE_H264_HIGH422,
	MMAL_VIDEO_PROFILE_H264_HIGH444,
	MMAL_VIDEO_PROFILE_H264_CONSTRAINED_BASELINE,
	MMAL_VIDEO_PROFILE_DUMMY = 0x7FFFFFFF
};

enum mmal_video_level {
	MMAL_VIDEO_LEVEL_H263_10,
	MMAL_VIDEO_LEVEL_H263_20,
	MMAL_VIDEO_LEVEL_H263_30,
	MMAL_VIDEO_LEVEL_H263_40,
	MMAL_VIDEO_LEVEL_H263_45,
	MMAL_VIDEO_LEVEL_H263_50,
	MMAL_VIDEO_LEVEL_H263_60,
	MMAL_VIDEO_LEVEL_H263_70,
	MMAL_VIDEO_LEVEL_MP4V_0,
	MMAL_VIDEO_LEVEL_MP4V_0b,
	MMAL_VIDEO_LEVEL_MP4V_1,
	MMAL_VIDEO_LEVEL_MP4V_2,
	MMAL_VIDEO_LEVEL_MP4V_3,
	MMAL_VIDEO_LEVEL_MP4V_4,
	MMAL_VIDEO_LEVEL_MP4V_4a,
	MMAL_VIDEO_LEVEL_MP4V_5,
	MMAL_VIDEO_LEVEL_MP4V_6,
	MMAL_VIDEO_LEVEL_H264_1,
	MMAL_VIDEO_LEVEL_H264_1b,
	MMAL_VIDEO_LEVEL_H264_11,
	MMAL_VIDEO_LEVEL_H264_12,
	MMAL_VIDEO_LEVEL_H264_13,
	MMAL_VIDEO_LEVEL_H264_2,
	MMAL_VIDEO_LEVEL_H264_21,
	MMAL_VIDEO_LEVEL_H264_22,
	MMAL_VIDEO_LEVEL_H264_3,
	MMAL_VIDEO_LEVEL_H264_31,
	MMAL_VIDEO_LEVEL_H264_32,
	MMAL_VIDEO_LEVEL_H264_4,
	MMAL_VIDEO_LEVEL_H264_41,
	MMAL_VIDEO_LEVEL_H264_42,
	MMAL_VIDEO_LEVEL_H264_5,
	MMAL_VIDEO_LEVEL_H264_51,
	MMAL_VIDEO_LEVEL_DUMMY = 0x7FFFFFFF
};

struct mmal_parameter_video_profile {
	enum mmal_video_profile profile;
	enum mmal_video_level level;
};

/* video parameters */

enum mmal_parameter_video_type {
	/** @ref MMAL_DISPLAYREGION_T */
	MMAL_PARAMETER_DISPLAYREGION = MMAL_PARAMETER_GROUP_VIDEO,

	/** @ref MMAL_PARAMETER_VIDEO_PROFILE_T */
	MMAL_PARAMETER_SUPPORTED_PROFILES,

	/** @ref MMAL_PARAMETER_VIDEO_PROFILE_T */
	MMAL_PARAMETER_PROFILE,

	/** @ref MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_INTRAPERIOD,

	/** @ref MMAL_PARAMETER_VIDEO_RATECONTROL_T */
	MMAL_PARAMETER_RATECONTROL,

	/** @ref MMAL_PARAMETER_VIDEO_NALUNITFORMAT_T */
	MMAL_PARAMETER_NALUNITFORMAT,

	/** @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_MINIMISE_FRAGMENTATION,

	/** @ref MMAL_PARAMETER_UINT32_T.
	 * Setting the value to zero resets to the default (one slice per
	 * frame).
	 */
	MMAL_PARAMETER_MB_ROWS_PER_SLICE,

	/** @ref MMAL_PARAMETER_VIDEO_LEVEL_EXTENSION_T */
	MMAL_PARAMETER_VIDEO_LEVEL_EXTENSION,

	/** @ref MMAL_PARAMETER_VIDEO_EEDE_ENABLE_T */
	MMAL_PARAMETER_VIDEO_EEDE_ENABLE,

	/** @ref MMAL_PARAMETER_VIDEO_EEDE_LOSSRATE_T */
	MMAL_PARAMETER_VIDEO_EEDE_LOSSRATE,

	/** @ref MMAL_PARAMETER_BOOLEAN_T. Request an I-frame. */
	MMAL_PARAMETER_VIDEO_REQUEST_I_FRAME,
	/** @ref MMAL_PARAMETER_VIDEO_INTRA_REFRESH_T */
	MMAL_PARAMETER_VIDEO_INTRA_REFRESH,

	/** @ref MMAL_PARAMETER_BOOLEAN_T. */
	MMAL_PARAMETER_VIDEO_IMMUTABLE_INPUT,

	/** @ref MMAL_PARAMETER_UINT32_T. Run-time bit rate control */
	MMAL_PARAMETER_VIDEO_BIT_RATE,

	/** @ref MMAL_PARAMETER_FRAME_RATE_T */
	MMAL_PARAMETER_VIDEO_FRAME_RATE,

	/** @ref MMAL_PARAMETER_UINT32_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_MIN_QUANT,

	/** @ref MMAL_PARAMETER_UINT32_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_MAX_QUANT,

	/** @ref MMAL_PARAMETER_VIDEO_ENCODE_RC_MODEL_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_RC_MODEL,

	MMAL_PARAMETER_EXTRA_BUFFERS, /**< @ref MMAL_PARAMETER_UINT32_T. */
	/** @ref MMAL_PARAMETER_UINT32_T.
	 * Changing this parameter from the default can reduce frame rate
	 * because image buffers need to be re-pitched.
	 */
	MMAL_PARAMETER_VIDEO_ALIGN_HORIZ,

	/** @ref MMAL_PARAMETER_UINT32_T.
	 * Changing this parameter from the default can reduce frame rate
	 * because image buffers need to be re-pitched.
	 */
	MMAL_PARAMETER_VIDEO_ALIGN_VERT,

	/** @ref MMAL_PARAMETER_BOOLEAN_T. */
	MMAL_PARAMETER_VIDEO_DROPPABLE_PFRAMES,

	/** @ref MMAL_PARAMETER_UINT32_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_INITIAL_QUANT,

	/**< @ref MMAL_PARAMETER_UINT32_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_QP_P,

	/**< @ref MMAL_PARAMETER_UINT32_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_RC_SLICE_DQUANT,

	/** @ref MMAL_PARAMETER_UINT32_T */
	MMAL_PARAMETER_VIDEO_ENCODE_FRAME_LIMIT_BITS,

	/** @ref MMAL_PARAMETER_UINT32_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_PEAK_RATE,

	/* H264 specific parameters */

	/** @ref MMAL_PARAMETER_BOOLEAN_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_H264_DISABLE_CABAC,

	/** @ref MMAL_PARAMETER_BOOLEAN_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_H264_LOW_LATENCY,

	/** @ref MMAL_PARAMETER_BOOLEAN_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_H264_AU_DELIMITERS,

	/** @ref MMAL_PARAMETER_UINT32_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_H264_DEBLOCK_IDC,

	/** @ref MMAL_PARAMETER_VIDEO_ENCODER_H264_MB_INTRA_MODES_T. */
	MMAL_PARAMETER_VIDEO_ENCODE_H264_MB_INTRA_MODE,

	/** @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_VIDEO_ENCODE_HEADER_ON_OPEN,

	/** @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_VIDEO_ENCODE_PRECODE_FOR_QP,

	/** @ref MMAL_PARAMETER_VIDEO_DRM_INIT_INFO_T. */
	MMAL_PARAMETER_VIDEO_DRM_INIT_INFO,

	/** @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_VIDEO_TIMESTAMP_FIFO,

	/** @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_VIDEO_DECODE_ERROR_CONCEALMENT,

	/** @ref MMAL_PARAMETER_VIDEO_DRM_PROTECT_BUFFER_T. */
	MMAL_PARAMETER_VIDEO_DRM_PROTECT_BUFFER,

	/** @ref MMAL_PARAMETER_BYTES_T */
	MMAL_PARAMETER_VIDEO_DECODE_CONFIG_VD3,

	/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_VIDEO_ENCODE_H264_VCL_HRD_PARAMETERS,

	/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_VIDEO_ENCODE_H264_LOW_DELAY_HRD_FLAG,

	/**< @ref MMAL_PARAMETER_BOOLEAN_T */
	MMAL_PARAMETER_VIDEO_ENCODE_INLINE_HEADER
};

/** Valid mirror modes */
enum mmal_parameter_mirror {
	MMAL_PARAM_MIRROR_NONE,
	MMAL_PARAM_MIRROR_VERTICAL,
	MMAL_PARAM_MIRROR_HORIZONTAL,
	MMAL_PARAM_MIRROR_BOTH,
};

enum mmal_parameter_displaytransform {
	MMAL_DISPLAY_ROT0 = 0,
	MMAL_DISPLAY_MIRROR_ROT0 = 1,
	MMAL_DISPLAY_MIRROR_ROT180 = 2,
	MMAL_DISPLAY_ROT180 = 3,
	MMAL_DISPLAY_MIRROR_ROT90 = 4,
	MMAL_DISPLAY_ROT270 = 5,
	MMAL_DISPLAY_ROT90 = 6,
	MMAL_DISPLAY_MIRROR_ROT270 = 7,
};

enum mmal_parameter_displaymode {
	MMAL_DISPLAY_MODE_FILL = 0,
	MMAL_DISPLAY_MODE_LETTERBOX = 1,
};

enum mmal_parameter_displayset {
	MMAL_DISPLAY_SET_NONE = 0,
	MMAL_DISPLAY_SET_NUM = 1,
	MMAL_DISPLAY_SET_FULLSCREEN = 2,
	MMAL_DISPLAY_SET_TRANSFORM = 4,
	MMAL_DISPLAY_SET_DEST_RECT = 8,
	MMAL_DISPLAY_SET_SRC_RECT = 0x10,
	MMAL_DISPLAY_SET_MODE = 0x20,
	MMAL_DISPLAY_SET_PIXEL = 0x40,
	MMAL_DISPLAY_SET_NOASPECT = 0x80,
	MMAL_DISPLAY_SET_LAYER = 0x100,
	MMAL_DISPLAY_SET_COPYPROTECT = 0x200,
	MMAL_DISPLAY_SET_ALPHA = 0x400,
};

/* rectangle, used lots so it gets its own struct */
struct vchiq_mmal_rect {
	s32 x;
	s32 y;
	s32 width;
	s32 height;
};

struct mmal_parameter_displayregion {
	/** Bitfield that indicates which fields are set and should be
	 * used. All other fields will maintain their current value.
	 * \ref MMAL_DISPLAYSET_T defines the bits that can be
	 * combined.
	 */
	u32 set;

	/** Describes the display output device, with 0 typically
	 * being a directly connected LCD display.  The actual values
	 * will depend on the hardware.  Code using hard-wired numbers
	 * (e.g. 2) is certain to fail.
	 */

	u32 display_num;
	/** Indicates that we are using the full device screen area,
	 * rather than a window of the display.  If zero, then
	 * dest_rect is used to specify a region of the display to
	 * use.
	 */

	s32 fullscreen;
	/** Indicates any rotation or flipping used to map frames onto
	 * the natural display orientation.
	 */
	u32 transform; /* enum mmal_parameter_displaytransform */

	/** Where to display the frame within the screen, if
	 * fullscreen is zero.
	 */
	struct vchiq_mmal_rect dest_rect;

	/** Indicates which area of the frame to display. If all
	 * values are zero, the whole frame will be used.
	 */
	struct vchiq_mmal_rect src_rect;

	/** If set to non-zero, indicates that any display scaling
	 * should disregard the aspect ratio of the frame region being
	 * displayed.
	 */
	s32 noaspect;

	/** Indicates how the image should be scaled to fit the
	 * display. \code MMAL_DISPLAY_MODE_FILL \endcode indicates
	 * that the image should fill the screen by potentially
	 * cropping the frames.  Setting \code mode \endcode to \code
	 * MMAL_DISPLAY_MODE_LETTERBOX \endcode indicates that all the
	 * source region should be displayed and black bars added if
	 * necessary.
	 */
	u32 mode; /* enum mmal_parameter_displaymode */

	/** If non-zero, defines the width of a source pixel relative
	 * to \code pixel_y \endcode.  If zero, then pixels default to
	 * being square.
	 */
	u32 pixel_x;

	/** If non-zero, defines the height of a source pixel relative
	 * to \code pixel_x \endcode.  If zero, then pixels default to
	 * being square.
	 */
	u32 pixel_y;

	/** Sets the relative depth of the images, with greater values
	 * being in front of smaller values.
	 */
	u32 layer;

	/** Set to non-zero to ensure copy protection is used on
	 * output.
	 */
	s32 copyprotect_required;

	/** Level of opacity of the layer, where zero is fully
	 * transparent and 255 is fully opaque.
	 */
	u32 alpha;
};

#define MMAL_MAX_IMAGEFX_PARAMETERS 5

struct mmal_parameter_imagefx_parameters {
	enum mmal_parameter_imagefx effect;
	u32 num_effect_params;
	u32 effect_parameter[MMAL_MAX_IMAGEFX_PARAMETERS];
};

#define MMAL_PARAMETER_CAMERA_INFO_MAX_CAMERAS 4
#define MMAL_PARAMETER_CAMERA_INFO_MAX_FLASHES 2
#define MMAL_PARAMETER_CAMERA_INFO_MAX_STR_LEN 16

struct mmal_parameter_camera_info_camera {
	u32 port_id;
	u32 max_width;
	u32 max_height;
	u32 lens_present;
	u8 camera_name[MMAL_PARAMETER_CAMERA_INFO_MAX_STR_LEN];
};

enum mmal_parameter_camera_info_flash_type {
	/* Make values explicit to ensure they match values in config ini */
	MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_XENON = 0,
	MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_LED   = 1,
	MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_OTHER = 2,
	MMAL_PARAMETER_CAMERA_INFO_FLASH_TYPE_MAX = 0x7FFFFFFF
};

struct mmal_parameter_camera_info_flash {
	enum mmal_parameter_camera_info_flash_type flash_type;
};

struct mmal_parameter_camera_info {
	u32 num_cameras;
	u32 num_flashes;
	struct mmal_parameter_camera_info_camera
		cameras[MMAL_PARAMETER_CAMERA_INFO_MAX_CAMERAS];
	struct mmal_parameter_camera_info_flash
				flashes[MMAL_PARAMETER_CAMERA_INFO_MAX_FLASHES];
};

#endif
