diff options
Diffstat (limited to 'include/uapi/linux/v4l2-controls.h')
| -rw-r--r-- | include/uapi/linux/v4l2-controls.h | 288 | 
1 files changed, 287 insertions, 1 deletions
| diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index 5fea5feb0412..c8e0f84d204d 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -128,6 +128,7 @@ enum v4l2_colorfx {  	V4L2_COLORFX_SOLARIZATION		= 13,  	V4L2_COLORFX_ANTIQUE			= 14,  	V4L2_COLORFX_SET_CBCR			= 15, +	V4L2_COLORFX_SET_RGB			= 16,  };  #define V4L2_CID_AUTOBRIGHTNESS			(V4L2_CID_BASE+32)  #define V4L2_CID_BAND_STOP_FILTER		(V4L2_CID_BASE+33) @@ -145,9 +146,10 @@ enum v4l2_colorfx {  #define V4L2_CID_ALPHA_COMPONENT		(V4L2_CID_BASE+41)  #define V4L2_CID_COLORFX_CBCR			(V4L2_CID_BASE+42) +#define V4L2_CID_COLORFX_RGB			(V4L2_CID_BASE+43)  /* last CID + 1 */ -#define V4L2_CID_LASTP1                         (V4L2_CID_BASE+43) +#define V4L2_CID_LASTP1                         (V4L2_CID_BASE+44)  /* USER-class private control IDs */ @@ -2016,6 +2018,290 @@ struct v4l2_ctrl_hdr10_mastering_display {  	__u32 min_display_mastering_luminance;  }; +/* Stateless VP9 controls */ + +#define V4L2_VP9_LOOP_FILTER_FLAG_DELTA_ENABLED	0x1 +#define	V4L2_VP9_LOOP_FILTER_FLAG_DELTA_UPDATE	0x2 + +/** + * struct v4l2_vp9_loop_filter - VP9 loop filter parameters + * + * @ref_deltas: contains the adjustment needed for the filter level based on the + * chosen reference frame. If this syntax element is not present in the bitstream, + * users should pass its last value. + * @mode_deltas: contains the adjustment needed for the filter level based on the + * chosen mode.	If this syntax element is not present in the bitstream, users should + * pass its last value. + * @level: indicates the loop filter strength. + * @sharpness: indicates the sharpness level. + * @flags: combination of V4L2_VP9_LOOP_FILTER_FLAG_{} flags. + * @reserved: padding field. Should be zeroed by applications. + * + * This structure contains all loop filter related parameters. See sections + * '7.2.8 Loop filter semantics' of the VP9 specification for more details. + */ +struct v4l2_vp9_loop_filter { +	__s8 ref_deltas[4]; +	__s8 mode_deltas[2]; +	__u8 level; +	__u8 sharpness; +	__u8 flags; +	__u8 reserved[7]; +}; + +/** + * struct v4l2_vp9_quantization - VP9 quantization parameters + * + * @base_q_idx: indicates the base frame qindex. + * @delta_q_y_dc: indicates the Y DC quantizer relative to base_q_idx. + * @delta_q_uv_dc: indicates the UV DC quantizer relative to base_q_idx. + * @delta_q_uv_ac: indicates the UV AC quantizer relative to base_q_idx. + * @reserved: padding field. Should be zeroed by applications. + * + * Encodes the quantization parameters. See section '7.2.9 Quantization params + * syntax' of the VP9 specification for more details. + */ +struct v4l2_vp9_quantization { +	__u8 base_q_idx; +	__s8 delta_q_y_dc; +	__s8 delta_q_uv_dc; +	__s8 delta_q_uv_ac; +	__u8 reserved[4]; +}; + +#define V4L2_VP9_SEGMENTATION_FLAG_ENABLED		0x01 +#define V4L2_VP9_SEGMENTATION_FLAG_UPDATE_MAP		0x02 +#define V4L2_VP9_SEGMENTATION_FLAG_TEMPORAL_UPDATE	0x04 +#define V4L2_VP9_SEGMENTATION_FLAG_UPDATE_DATA		0x08 +#define V4L2_VP9_SEGMENTATION_FLAG_ABS_OR_DELTA_UPDATE	0x10 + +#define V4L2_VP9_SEG_LVL_ALT_Q				0 +#define V4L2_VP9_SEG_LVL_ALT_L				1 +#define V4L2_VP9_SEG_LVL_REF_FRAME			2 +#define V4L2_VP9_SEG_LVL_SKIP				3 +#define V4L2_VP9_SEG_LVL_MAX				4 + +#define V4L2_VP9_SEGMENT_FEATURE_ENABLED(id)	(1 << (id)) +#define V4L2_VP9_SEGMENT_FEATURE_ENABLED_MASK	0xf + +/** + * struct v4l2_vp9_segmentation - VP9 segmentation parameters + * + * @feature_data: data attached to each feature. Data entry is only valid if + * the feature is enabled. The array shall be indexed with segment number as + * the first dimension (0..7) and one of V4L2_VP9_SEG_{} as the second dimension. + * @feature_enabled: bitmask defining which features are enabled in each segment. + * The value for each segment is a combination of V4L2_VP9_SEGMENT_FEATURE_ENABLED(id) + * values where id is one of V4L2_VP9_SEG_LVL_{}. + * @tree_probs: specifies the probability values to be used when decoding a + * Segment-ID. See '5.15. Segmentation map' section of the VP9 specification + * for more details. + * @pred_probs: specifies the probability values to be used when decoding a + * Predicted-Segment-ID. See '6.4.14. Get segment id syntax' section of :ref:`vp9` + * for more details. + * @flags: combination of V4L2_VP9_SEGMENTATION_FLAG_{} flags. + * @reserved: padding field. Should be zeroed by applications. + * + * Encodes the quantization parameters. See section '7.2.10 Segmentation params syntax' of + * the VP9 specification for more details. + */ +struct v4l2_vp9_segmentation { +	__s16 feature_data[8][4]; +	__u8 feature_enabled[8]; +	__u8 tree_probs[7]; +	__u8 pred_probs[3]; +	__u8 flags; +	__u8 reserved[5]; +}; + +#define V4L2_VP9_FRAME_FLAG_KEY_FRAME			0x001 +#define V4L2_VP9_FRAME_FLAG_SHOW_FRAME			0x002 +#define V4L2_VP9_FRAME_FLAG_ERROR_RESILIENT		0x004 +#define V4L2_VP9_FRAME_FLAG_INTRA_ONLY			0x008 +#define V4L2_VP9_FRAME_FLAG_ALLOW_HIGH_PREC_MV		0x010 +#define V4L2_VP9_FRAME_FLAG_REFRESH_FRAME_CTX		0x020 +#define V4L2_VP9_FRAME_FLAG_PARALLEL_DEC_MODE		0x040 +#define V4L2_VP9_FRAME_FLAG_X_SUBSAMPLING		0x080 +#define V4L2_VP9_FRAME_FLAG_Y_SUBSAMPLING		0x100 +#define V4L2_VP9_FRAME_FLAG_COLOR_RANGE_FULL_SWING	0x200 + +#define V4L2_VP9_SIGN_BIAS_LAST				0x1 +#define V4L2_VP9_SIGN_BIAS_GOLDEN			0x2 +#define V4L2_VP9_SIGN_BIAS_ALT				0x4 + +#define V4L2_VP9_RESET_FRAME_CTX_NONE			0 +#define V4L2_VP9_RESET_FRAME_CTX_SPEC			1 +#define V4L2_VP9_RESET_FRAME_CTX_ALL			2 + +#define V4L2_VP9_INTERP_FILTER_EIGHTTAP			0 +#define V4L2_VP9_INTERP_FILTER_EIGHTTAP_SMOOTH		1 +#define V4L2_VP9_INTERP_FILTER_EIGHTTAP_SHARP		2 +#define V4L2_VP9_INTERP_FILTER_BILINEAR			3 +#define V4L2_VP9_INTERP_FILTER_SWITCHABLE		4 + +#define V4L2_VP9_REFERENCE_MODE_SINGLE_REFERENCE	0 +#define V4L2_VP9_REFERENCE_MODE_COMPOUND_REFERENCE	1 +#define V4L2_VP9_REFERENCE_MODE_SELECT			2 + +#define V4L2_VP9_PROFILE_MAX				3 + +#define V4L2_CID_STATELESS_VP9_FRAME	(V4L2_CID_CODEC_STATELESS_BASE + 300) +/** + * struct v4l2_ctrl_vp9_frame - VP9 frame decoding control + * + * @lf: loop filter parameters. See &v4l2_vp9_loop_filter for more details. + * @quant: quantization parameters. See &v4l2_vp9_quantization for more details. + * @seg: segmentation parameters. See &v4l2_vp9_segmentation for more details. + * @flags: combination of V4L2_VP9_FRAME_FLAG_{} flags. + * @compressed_header_size: compressed header size in bytes. + * @uncompressed_header_size: uncompressed header size in bytes. + * @frame_width_minus_1: add 1 to it and you'll get the frame width expressed in pixels. + * @frame_height_minus_1: add 1 to it and you'll get the frame height expressed in pixels. + * @render_width_minus_1: add 1 to it and you'll get the expected render width expressed in + * pixels. This is not used during the decoding process but might be used by HW scalers + * to prepare a frame that's ready for scanout. + * @render_height_minus_1: add 1 to it and you'll get the expected render height expressed in + * pixels. This is not used during the decoding process but might be used by HW scalers + * to prepare a frame that's ready for scanout. + * @last_frame_ts: "last" reference buffer timestamp. + * The timestamp refers to the timestamp field in struct v4l2_buffer. + * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64. + * @golden_frame_ts: "golden" reference buffer timestamp. + * The timestamp refers to the timestamp field in struct v4l2_buffer. + * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64. + * @alt_frame_ts: "alt" reference buffer timestamp. + * The timestamp refers to the timestamp field in struct v4l2_buffer. + * Use v4l2_timeval_to_ns() to convert the struct timeval to a __u64. + * @ref_frame_sign_bias: a bitfield specifying whether the sign bias is set for a given + * reference frame. Either of V4L2_VP9_SIGN_BIAS_{}. + * @reset_frame_context: specifies whether the frame context should be reset to default values. + * Either of V4L2_VP9_RESET_FRAME_CTX_{}. + * @frame_context_idx: frame context that should be used/updated. + * @profile: VP9 profile. Can be 0, 1, 2 or 3. + * @bit_depth: bits per components. Can be 8, 10 or 12. Note that not all profiles support + * 10 and/or 12 bits depths. + * @interpolation_filter: specifies the filter selection used for performing inter prediction. + * Set to one of V4L2_VP9_INTERP_FILTER_{}. + * @tile_cols_log2: specifies the base 2 logarithm of the width of each tile (where the width + * is measured in units of 8x8 blocks). Shall be less than or equal to 6. + * @tile_rows_log2: specifies the base 2 logarithm of the height of each tile (where the height + * is measured in units of 8x8 blocks). + * @reference_mode: specifies the type of inter prediction to be used. + * Set to one of V4L2_VP9_REFERENCE_MODE_{}. + * @reserved: padding field. Should be zeroed by applications. + */ +struct v4l2_ctrl_vp9_frame { +	struct v4l2_vp9_loop_filter lf; +	struct v4l2_vp9_quantization quant; +	struct v4l2_vp9_segmentation seg; +	__u32 flags; +	__u16 compressed_header_size; +	__u16 uncompressed_header_size; +	__u16 frame_width_minus_1; +	__u16 frame_height_minus_1; +	__u16 render_width_minus_1; +	__u16 render_height_minus_1; +	__u64 last_frame_ts; +	__u64 golden_frame_ts; +	__u64 alt_frame_ts; +	__u8 ref_frame_sign_bias; +	__u8 reset_frame_context; +	__u8 frame_context_idx; +	__u8 profile; +	__u8 bit_depth; +	__u8 interpolation_filter; +	__u8 tile_cols_log2; +	__u8 tile_rows_log2; +	__u8 reference_mode; +	__u8 reserved[7]; +}; + +#define V4L2_VP9_NUM_FRAME_CTX	4 + +/** + * struct v4l2_vp9_mv_probs - VP9 Motion vector probability updates + * @joint: motion vector joint probability updates. + * @sign: motion vector sign probability updates. + * @classes: motion vector class probability updates. + * @class0_bit: motion vector class0 bit probability updates. + * @bits: motion vector bits probability updates. + * @class0_fr: motion vector class0 fractional bit probability updates. + * @fr: motion vector fractional bit probability updates. + * @class0_hp: motion vector class0 high precision fractional bit probability updates. + * @hp: motion vector high precision fractional bit probability updates. + * + * This structure contains new values of motion vector probabilities. + * A value of zero in an array element means there is no update of the relevant probability. + * See `struct v4l2_vp9_prob_updates` for details. + */ +struct v4l2_vp9_mv_probs { +	__u8 joint[3]; +	__u8 sign[2]; +	__u8 classes[2][10]; +	__u8 class0_bit[2]; +	__u8 bits[2][10]; +	__u8 class0_fr[2][2][3]; +	__u8 fr[2][3]; +	__u8 class0_hp[2]; +	__u8 hp[2]; +}; + +#define V4L2_CID_STATELESS_VP9_COMPRESSED_HDR	(V4L2_CID_CODEC_STATELESS_BASE + 301) + +#define V4L2_VP9_TX_MODE_ONLY_4X4			0 +#define V4L2_VP9_TX_MODE_ALLOW_8X8			1 +#define V4L2_VP9_TX_MODE_ALLOW_16X16			2 +#define V4L2_VP9_TX_MODE_ALLOW_32X32			3 +#define V4L2_VP9_TX_MODE_SELECT				4 + +/** + * struct v4l2_ctrl_vp9_compressed_hdr - VP9 probability updates control + * @tx_mode: specifies the TX mode. Set to one of V4L2_VP9_TX_MODE_{}. + * @tx8: TX 8x8 probability updates. + * @tx16: TX 16x16 probability updates. + * @tx32: TX 32x32 probability updates. + * @coef: coefficient probability updates. + * @skip: skip probability updates. + * @inter_mode: inter mode probability updates. + * @interp_filter: interpolation filter probability updates. + * @is_inter: is inter-block probability updates. + * @comp_mode: compound prediction mode probability updates. + * @single_ref: single ref probability updates. + * @comp_ref: compound ref probability updates. + * @y_mode: Y prediction mode probability updates. + * @uv_mode: UV prediction mode probability updates. + * @partition: partition probability updates. + * @mv: motion vector probability updates. + * + * This structure holds the probabilities update as parsed in the compressed + * header (Spec 6.3). These values represent the value of probability update after + * being translated with inv_map_table[] (see 6.3.5). A value of zero in an array element + * means that there is no update of the relevant probability. + * + * This control is optional and needs to be used when dealing with the hardware which is + * not capable of parsing the compressed header itself. Only drivers which need it will + * implement it. + */ +struct v4l2_ctrl_vp9_compressed_hdr { +	__u8 tx_mode; +	__u8 tx8[2][1]; +	__u8 tx16[2][2]; +	__u8 tx32[2][3]; +	__u8 coef[4][2][2][6][6][3]; +	__u8 skip[3]; +	__u8 inter_mode[7][3]; +	__u8 interp_filter[4][2]; +	__u8 is_inter[4]; +	__u8 comp_mode[5]; +	__u8 single_ref[5][2]; +	__u8 comp_ref[5]; +	__u8 y_mode[4][9]; +	__u8 uv_mode[10][9]; +	__u8 partition[16][3]; + +	struct v4l2_vp9_mv_probs mv; +}; +  /* MPEG-compression definitions kept for backwards compatibility */  #ifndef __KERNEL__  #define V4L2_CTRL_CLASS_MPEG            V4L2_CTRL_CLASS_CODEC |