diff options
author | Ezequiel Garcia <ezequiel@collabora.com> | 2021-03-02 18:13:27 -0300 |
---|---|---|
committer | Nicolas Dufresne <nicolas@ndufresne.ca> | 2021-06-29 21:01:29 +0000 |
commit | d036b4aad400a1e9c716deb848e7a126bebdcfee (patch) | |
tree | 9260cee37f038544e16e74e29bdb84fc476b2cca /sys | |
parent | c8ffd39dfebcb4c5c0ae352a6e93559dc3255bca (diff) | |
download | gstreamer-plugins-bad-d036b4aad400a1e9c716deb848e7a126bebdcfee.tar.gz |
v4l2codecs: vp8: Update to the new uAPI
Starting from Linux v5.13, the V4L2 stateless VP8 uAPI
is updated and stable.
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2075>
Diffstat (limited to 'sys')
-rw-r--r-- | sys/v4l2codecs/gstv4l2codecvp8dec.c | 80 | ||||
-rw-r--r-- | sys/v4l2codecs/linux/v4l2-controls.h | 195 | ||||
-rw-r--r-- | sys/v4l2codecs/linux/videodev2.h | 3 | ||||
-rw-r--r-- | sys/v4l2codecs/linux/vp8-ctrls.h | 112 | ||||
-rw-r--r-- | sys/v4l2codecs/plugin.c | 1 |
5 files changed, 237 insertions, 154 deletions
diff --git a/sys/v4l2codecs/gstv4l2codecvp8dec.c b/sys/v4l2codecs/gstv4l2codecvp8dec.c index dcda996d0..c68391ef2 100644 --- a/sys/v4l2codecs/gstv4l2codecvp8dec.c +++ b/sys/v4l2codecs/gstv4l2codecvp8dec.c @@ -25,7 +25,6 @@ #include "gstv4l2codecalphadecodebin.h" #include "gstv4l2codecpool.h" #include "gstv4l2codecvp8dec.h" -#include "linux/vp8-ctrls.h" GST_DEBUG_CATEGORY_STATIC (v4l2_vp8dec_debug); #define GST_CAT_DEFAULT v4l2_vp8dec_debug @@ -70,7 +69,7 @@ struct _GstV4l2CodecVp8Dec gboolean need_negotiation; gboolean copy_frames; - struct v4l2_ctrl_vp8_frame_header frame_header; + struct v4l2_ctrl_vp8_frame frame_header; GstMemory *bitstream; GstMapInfo bitstream_map; @@ -163,7 +162,7 @@ gst_v4l2_codec_vp8_dec_negotiate (GstVideoDecoder * decoder) /* *INDENT-OFF* */ struct v4l2_ext_control control[] = { { - .id = V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER, + .id = V4L2_CID_STATELESS_VP8_FRAME, .ptr = &self->frame_header, .size = sizeof (self->frame_header), }, @@ -288,57 +287,57 @@ gst_v4l2_codec_vp8_dec_decide_allocation (GstVideoDecoder * decoder, } static void -gst_v4l2_codec_vp8_dec_fill_segment_header (struct v4l2_vp8_segment_header - *segment_header, const GstVp8Segmentation * segmentation) +gst_v4l2_codec_vp8_dec_fill_segment (struct v4l2_vp8_segment + *segment, const GstVp8Segmentation * segmentation) { gint i; /* *INDENT-OFF* */ - segment_header->flags = - (segmentation->segmentation_enabled ? V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED : 0) | - (segmentation->update_mb_segmentation_map ? V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_MAP : 0) | - (segmentation->update_segment_feature_data ? V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_FEATURE_DATA : 0) | - (segmentation->segment_feature_mode ? 0 : V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE); + segment->flags = + (segmentation->segmentation_enabled ? V4L2_VP8_SEGMENT_FLAG_ENABLED : 0) | + (segmentation->update_mb_segmentation_map ? V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP : 0) | + (segmentation->update_segment_feature_data ? V4L2_VP8_SEGMENT_FLAG_UPDATE_FEATURE_DATA : 0) | + (segmentation->segment_feature_mode ? 0 : V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE); /* *INDENT-ON* */ for (i = 0; i < 4; i++) { - segment_header->quant_update[i] = segmentation->quantizer_update_value[i]; - segment_header->lf_update[i] = segmentation->lf_update_value[i]; + segment->quant_update[i] = segmentation->quantizer_update_value[i]; + segment->lf_update[i] = segmentation->lf_update_value[i]; } for (i = 0; i < 3; i++) - segment_header->segment_probs[i] = segmentation->segment_prob[i]; + segment->segment_probs[i] = segmentation->segment_prob[i]; - segment_header->padding = 0; + segment->padding = 0; } static void -gst_v4l2_codec_vp8_dec_fill_lf_header (struct v4l2_vp8_loopfilter_header - *lf_header, const GstVp8MbLfAdjustments * lf_adj) +gst_v4l2_codec_vp8_dec_fill_lf (struct v4l2_vp8_loop_filter + *lf, const GstVp8MbLfAdjustments * lf_adj) { gint i; - lf_header->flags |= - (lf_adj->loop_filter_adj_enable ? V4L2_VP8_LF_HEADER_ADJ_ENABLE : 0) | - (lf_adj->mode_ref_lf_delta_update ? V4L2_VP8_LF_HEADER_DELTA_UPDATE : 0); + lf->flags |= + (lf_adj->loop_filter_adj_enable ? V4L2_VP8_LF_ADJ_ENABLE : 0) | + (lf_adj->mode_ref_lf_delta_update ? V4L2_VP8_LF_DELTA_UPDATE : 0); for (i = 0; i < 4; i++) { - lf_header->ref_frm_delta[i] = lf_adj->ref_frame_delta[i]; - lf_header->mb_mode_delta[i] = lf_adj->mb_mode_delta[i]; + lf->ref_frm_delta[i] = lf_adj->ref_frame_delta[i]; + lf->mb_mode_delta[i] = lf_adj->mb_mode_delta[i]; } } static void -gst_v4l2_codec_vp8_dec_fill_entropy_header (struct v4l2_vp8_entropy_header - *entropy_header, const GstVp8FrameHdr * frame_hdr) +gst_v4l2_codec_vp8_dec_fill_entropy (struct v4l2_vp8_entropy + *entropy, const GstVp8FrameHdr * frame_hdr) { - memcpy (entropy_header->coeff_probs, frame_hdr->token_probs.prob, + memcpy (entropy->coeff_probs, frame_hdr->token_probs.prob, sizeof (frame_hdr->token_probs.prob)); - memcpy (entropy_header->y_mode_probs, frame_hdr->mode_probs.y_prob, + memcpy (entropy->y_mode_probs, frame_hdr->mode_probs.y_prob, sizeof (frame_hdr->mode_probs.y_prob)); - memcpy (entropy_header->uv_mode_probs, frame_hdr->mode_probs.uv_prob, + memcpy (entropy->uv_mode_probs, frame_hdr->mode_probs.uv_prob, sizeof (frame_hdr->mode_probs.uv_prob)); - memcpy (entropy_header->mv_probs, frame_hdr->mv_probs.prob, + memcpy (entropy->mv_probs, frame_hdr->mv_probs.prob, sizeof (frame_hdr->mv_probs.prob)); } @@ -349,13 +348,13 @@ gst_v4l2_codec_vp8_dec_fill_frame_header (GstV4l2CodecVp8Dec * self, gint i; /* *INDENT-OFF* */ - self->frame_header = (struct v4l2_ctrl_vp8_frame_header) { - .lf_header = (struct v4l2_vp8_loopfilter_header) { + self->frame_header = (struct v4l2_ctrl_vp8_frame) { + .lf = (struct v4l2_vp8_loop_filter) { .sharpness_level = frame_hdr->sharpness_level, .level = frame_hdr->loop_filter_level, .flags = (frame_hdr->filter_type == 1 ? V4L2_VP8_LF_FILTER_TYPE_SIMPLE : 0) }, - .quant_header = (struct v4l2_vp8_quantization_header) { + .quant = (struct v4l2_vp8_quantization) { .y_ac_qi = frame_hdr->quant_indices.y_ac_qi, .y_dc_delta = frame_hdr->quant_indices.y_dc_delta, .y2_dc_delta = frame_hdr->quant_indices.y2_dc_delta, @@ -385,19 +384,18 @@ gst_v4l2_codec_vp8_dec_fill_frame_header (GstV4l2CodecVp8Dec * self, .first_part_size = frame_hdr->first_part_size, .first_part_header_bits = frame_hdr->header_size, - .flags = (frame_hdr->key_frame ? V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME : 0) | - (frame_hdr->show_frame ? V4L2_VP8_FRAME_HEADER_FLAG_SHOW_FRAME : 0) | - (frame_hdr->mb_no_skip_coeff ? V4L2_VP8_FRAME_HEADER_FLAG_MB_NO_SKIP_COEFF : 0) | - (frame_hdr->sign_bias_golden ? V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_GOLDEN : 0) | - (frame_hdr->sign_bias_alternate ? V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_ALT : 0), + .flags = (frame_hdr->key_frame ? V4L2_VP8_FRAME_FLAG_KEY_FRAME : 0) | + (frame_hdr->show_frame ? V4L2_VP8_FRAME_FLAG_SHOW_FRAME : 0) | + (frame_hdr->mb_no_skip_coeff ? V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF : 0) | + (frame_hdr->sign_bias_golden ? V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN : 0) | + (frame_hdr->sign_bias_alternate ? V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT : 0), }; /* *INDENT-ON* */ for (i = 0; i < 8; i++) self->frame_header.dct_part_sizes[i] = frame_hdr->partition_size[i]; - gst_v4l2_codec_vp8_dec_fill_entropy_header (&self-> - frame_header.entropy_header, frame_hdr); + gst_v4l2_codec_vp8_dec_fill_entropy (&self->frame_header.entropy, frame_hdr); } static void @@ -524,9 +522,9 @@ gst_v4l2_codec_vp8_dec_decode_picture (GstVp8Decoder * decoder, } gst_v4l2_codec_vp8_dec_fill_frame_header (self, &picture->frame_hdr); - gst_v4l2_codec_vp8_dec_fill_segment_header (&self-> - frame_header.segment_header, &parser->segmentation); - gst_v4l2_codec_vp8_dec_fill_lf_header (&self->frame_header.lf_header, + gst_v4l2_codec_vp8_dec_fill_segment (&self->frame_header.seg, + &parser->segmentation); + gst_v4l2_codec_vp8_dec_fill_lf (&self->frame_header.lf, &parser->mb_lf_adjust); gst_v4l2_codec_vp8_dec_fill_references (self); @@ -561,7 +559,7 @@ gst_v4l2_codec_vp8_dec_end_picture (GstVp8Decoder * decoder, /* *INDENT-OFF* */ struct v4l2_ext_control control[] = { { - .id = V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER, + .id = V4L2_CID_STATELESS_VP8_FRAME, .ptr = &self->frame_header, .size = sizeof(self->frame_header), }, diff --git a/sys/v4l2codecs/linux/v4l2-controls.h b/sys/v4l2codecs/linux/v4l2-controls.h index 8b2e0f4fa..19433ee79 100644 --- a/sys/v4l2codecs/linux/v4l2-controls.h +++ b/sys/v4l2codecs/linux/v4l2-controls.h @@ -1655,6 +1655,201 @@ struct v4l2_ctrl_fwht_params { __u32 quantization; }; +/* Stateless VP8 control */ + +#define V4L2_VP8_SEGMENT_FLAG_ENABLED 0x01 +#define V4L2_VP8_SEGMENT_FLAG_UPDATE_MAP 0x02 +#define V4L2_VP8_SEGMENT_FLAG_UPDATE_FEATURE_DATA 0x04 +#define V4L2_VP8_SEGMENT_FLAG_DELTA_VALUE_MODE 0x08 + +/** + * struct v4l2_vp8_segment - VP8 segment-based adjustments parameters + * + * @quant_update: update values for the segment quantizer. + * @lf_update: update values for the loop filter level. + * @segment_probs: branch probabilities of the segment_id decoding tree. + * @padding: padding field. Should be zeroed by applications. + * @flags: see V4L2_VP8_SEGMENT_FLAG_{}. + * + * This structure contains segment-based adjustments related parameters. + * See the 'update_segmentation()' part of the frame header syntax, + * and section '9.3. Segment-Based Adjustments' of the VP8 specification + * for more details. + */ +struct v4l2_vp8_segment { + __s8 quant_update[4]; + __s8 lf_update[4]; + __u8 segment_probs[3]; + __u8 padding; + __u32 flags; +}; + +#define V4L2_VP8_LF_ADJ_ENABLE 0x01 +#define V4L2_VP8_LF_DELTA_UPDATE 0x02 +#define V4L2_VP8_LF_FILTER_TYPE_SIMPLE 0x04 + +/** + * struct v4l2_vp8_loop_filter - VP8 loop filter parameters + * + * @ref_frm_delta: Reference frame signed delta values. + * @mb_mode_delta: MB prediction mode signed delta values. + * @sharpness_level: matches sharpness_level syntax element. + * @level: matches loop_filter_level syntax element. + * @padding: padding field. Should be zeroed by applications. + * @flags: see V4L2_VP8_LF_FLAG_{}. + * + * This structure contains loop filter related parameters. + * See the 'mb_lf_adjustments()' part of the frame header syntax, + * and section '9.4. Loop Filter Type and Levels' of the VP8 specification + * for more details. + */ +struct v4l2_vp8_loop_filter { + __s8 ref_frm_delta[4]; + __s8 mb_mode_delta[4]; + __u8 sharpness_level; + __u8 level; + __u16 padding; + __u32 flags; +}; + +/** + * struct v4l2_vp8_quantization - VP8 quantizattion indices + * + * @y_ac_qi: luma AC coefficient table index. + * @y_dc_delta: luma DC delta vaue. + * @y2_dc_delta: y2 block DC delta value. + * @y2_ac_delta: y2 block AC delta value. + * @uv_dc_delta: chroma DC delta value. + * @uv_ac_delta: chroma AC delta value. + * @padding: padding field. Should be zeroed by applications. + + * This structure contains the quantization indices present + * in 'quant_indices()' part of the frame header syntax. + * See section '9.6. Dequantization Indices' of the VP8 specification + * for more details. + */ +struct v4l2_vp8_quantization { + __u8 y_ac_qi; + __s8 y_dc_delta; + __s8 y2_dc_delta; + __s8 y2_ac_delta; + __s8 uv_dc_delta; + __s8 uv_ac_delta; + __u16 padding; +}; + +#define V4L2_VP8_COEFF_PROB_CNT 11 +#define V4L2_VP8_MV_PROB_CNT 19 + +/** + * struct v4l2_vp8_entropy - VP8 update probabilities + * + * @coeff_probs: coefficient probability update values. + * @y_mode_probs: luma intra-prediction probabilities. + * @uv_mode_probs: chroma intra-prediction probabilities. + * @mv_probs: mv decoding probability. + * @padding: padding field. Should be zeroed by applications. + * + * This structure contains the update probabilities present in + * 'token_prob_update()' and 'mv_prob_update()' part of the frame header. + * See section '17.2. Probability Updates' of the VP8 specification + * for more details. + */ +struct v4l2_vp8_entropy { + __u8 coeff_probs[4][8][3][V4L2_VP8_COEFF_PROB_CNT]; + __u8 y_mode_probs[4]; + __u8 uv_mode_probs[3]; + __u8 mv_probs[2][V4L2_VP8_MV_PROB_CNT]; + __u8 padding[3]; +}; + +/** + * struct v4l2_vp8_entropy_coder_state - VP8 boolean coder state + * + * @range: coder state value for "Range" + * @value: coder state value for "Value" + * @bit_count: number of bits left in range "Value". + * @padding: padding field. Should be zeroed by applications. + * + * This structure contains the state for the boolean coder, as + * explained in section '7. Boolean Entropy Decoder' of the VP8 specification. + */ +struct v4l2_vp8_entropy_coder_state { + __u8 range; + __u8 value; + __u8 bit_count; + __u8 padding; +}; + +#define V4L2_VP8_FRAME_FLAG_KEY_FRAME 0x01 +#define V4L2_VP8_FRAME_FLAG_EXPERIMENTAL 0x02 +#define V4L2_VP8_FRAME_FLAG_SHOW_FRAME 0x04 +#define V4L2_VP8_FRAME_FLAG_MB_NO_SKIP_COEFF 0x08 +#define V4L2_VP8_FRAME_FLAG_SIGN_BIAS_GOLDEN 0x10 +#define V4L2_VP8_FRAME_FLAG_SIGN_BIAS_ALT 0x20 + +#define V4L2_VP8_FRAME_IS_KEY_FRAME(hdr) \ + (!!((hdr)->flags & V4L2_VP8_FRAME_FLAG_KEY_FRAME)) + +#define V4L2_CID_STATELESS_VP8_FRAME (V4L2_CID_CODEC_STATELESS_BASE + 200) +/** + * struct v4l2_vp8_frame - VP8 frame parameters + * + * @seg: segmentation parameters. See &v4l2_vp8_segment for more details + * @lf: loop filter parameters. See &v4l2_vp8_loop_filter for more details + * @quant: quantization parameters. See &v4l2_vp8_quantization for more details + * @probs: probabilities. See &v4l2_vp9_probabilities for more details + * @width: frame width. + * @height: frame height. + * @horizontal_scale: horizontal scaling factor. + * @vertical_scale: vertical scaling factor. + * @version: bitstream version. + * @prob_skip_false: frame header syntax element. + * @prob_intra: frame header syntax element. + * @prob_last: frame header syntax element. + * @prob_gf: frame header syntax element. + * @num_dct_parts: number of DCT coefficients partitions. + * @first_part_size: size of the first partition, i.e. the control partition. + * @first_part_header_bits: size in bits of the first partition header portion. + * @dct_part_sizes: DCT coefficients sizes. + * @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. + * @alt_frame_ts: "alt" reference buffer timestamp. + * @flags: see V4L2_VP8_FRAME_FLAG_{}. + */ +struct v4l2_ctrl_vp8_frame { + struct v4l2_vp8_segment seg; + struct v4l2_vp8_loop_filter lf; + struct v4l2_vp8_quantization quant; + struct v4l2_vp8_entropy entropy; + struct v4l2_vp8_entropy_coder_state coder_state; + + __u16 width; + __u16 height; + + __u8 horizontal_scale; + __u8 vertical_scale; + + __u8 version; + __u8 prob_skip_false; + __u8 prob_intra; + __u8 prob_last; + __u8 prob_gf; + __u8 num_dct_parts; + + __u32 first_part_size; + __u32 first_part_header_bits; + __u32 dct_part_sizes[8]; + + __u64 last_frame_ts; + __u64 golden_frame_ts; + __u64 alt_frame_ts; + + __u64 flags; +}; + /* MPEG-compression definitions kept for backwards compatibility */ #define V4L2_CTRL_CLASS_MPEG V4L2_CTRL_CLASS_CODEC #define V4L2_CID_MPEG_CLASS V4L2_CID_CODEC_CLASS diff --git a/sys/v4l2codecs/linux/videodev2.h b/sys/v4l2codecs/linux/videodev2.h index bb9b660ea..bdd39c404 100644 --- a/sys/v4l2codecs/linux/videodev2.h +++ b/sys/v4l2codecs/linux/videodev2.h @@ -692,6 +692,7 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */ #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */ #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ +#define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F') /* VP8 parsed frame */ #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */ #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */ #define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */ @@ -1763,6 +1764,8 @@ enum v4l2_ctrl_type { V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 0x0205, V4L2_CTRL_TYPE_FWHT_PARAMS = 0x0220, + + V4L2_CTRL_TYPE_VP8_FRAME = 0x0240, }; /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ diff --git a/sys/v4l2codecs/linux/vp8-ctrls.h b/sys/v4l2codecs/linux/vp8-ctrls.h deleted file mode 100644 index 53cba826e..000000000 --- a/sys/v4l2codecs/linux/vp8-ctrls.h +++ /dev/null @@ -1,112 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * These are the VP8 state controls for use with stateless VP8 - * codec drivers. - * - * It turns out that these structs are not stable yet and will undergo - * more changes. So keep them private until they are stable and ready to - * become part of the official public API. - */ - -#ifndef _VP8_CTRLS_H_ -#define _VP8_CTRLS_H_ - -#include <linux/types.h> - -#define V4L2_PIX_FMT_VP8_FRAME v4l2_fourcc('V', 'P', '8', 'F') - -#define V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER (V4L2_CID_MPEG_BASE + 2000) -#define V4L2_CTRL_TYPE_VP8_FRAME_HEADER 0x301 - -#define V4L2_VP8_SEGMENT_HEADER_FLAG_ENABLED 0x01 -#define V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_MAP 0x02 -#define V4L2_VP8_SEGMENT_HEADER_FLAG_UPDATE_FEATURE_DATA 0x04 -#define V4L2_VP8_SEGMENT_HEADER_FLAG_DELTA_VALUE_MODE 0x08 - -struct v4l2_vp8_segment_header { - __s8 quant_update[4]; - __s8 lf_update[4]; - __u8 segment_probs[3]; - __u8 padding; - __u32 flags; -}; - -#define V4L2_VP8_LF_HEADER_ADJ_ENABLE 0x01 -#define V4L2_VP8_LF_HEADER_DELTA_UPDATE 0x02 -#define V4L2_VP8_LF_FILTER_TYPE_SIMPLE 0x04 -struct v4l2_vp8_loopfilter_header { - __s8 ref_frm_delta[4]; - __s8 mb_mode_delta[4]; - __u8 sharpness_level; - __u8 level; - __u16 padding; - __u32 flags; -}; - -struct v4l2_vp8_quantization_header { - __u8 y_ac_qi; - __s8 y_dc_delta; - __s8 y2_dc_delta; - __s8 y2_ac_delta; - __s8 uv_dc_delta; - __s8 uv_ac_delta; - __u16 padding; -}; - -struct v4l2_vp8_entropy_header { - __u8 coeff_probs[4][8][3][11]; - __u8 y_mode_probs[4]; - __u8 uv_mode_probs[3]; - __u8 mv_probs[2][19]; - __u8 padding[3]; -}; - -struct v4l2_vp8_entropy_coder_state { - __u8 range; - __u8 value; - __u8 bit_count; - __u8 padding; -}; - -#define V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME 0x01 -#define V4L2_VP8_FRAME_HEADER_FLAG_EXPERIMENTAL 0x02 -#define V4L2_VP8_FRAME_HEADER_FLAG_SHOW_FRAME 0x04 -#define V4L2_VP8_FRAME_HEADER_FLAG_MB_NO_SKIP_COEFF 0x08 -#define V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_GOLDEN 0x10 -#define V4L2_VP8_FRAME_HEADER_FLAG_SIGN_BIAS_ALT 0x20 - -#define VP8_FRAME_IS_KEY_FRAME(hdr) \ - (!!((hdr)->flags & V4L2_VP8_FRAME_HEADER_FLAG_KEY_FRAME)) - -struct v4l2_ctrl_vp8_frame_header { - struct v4l2_vp8_segment_header segment_header; - struct v4l2_vp8_loopfilter_header lf_header; - struct v4l2_vp8_quantization_header quant_header; - struct v4l2_vp8_entropy_header entropy_header; - struct v4l2_vp8_entropy_coder_state coder_state; - - __u16 width; - __u16 height; - - __u8 horizontal_scale; - __u8 vertical_scale; - - __u8 version; - __u8 prob_skip_false; - __u8 prob_intra; - __u8 prob_last; - __u8 prob_gf; - __u8 num_dct_parts; - - __u32 first_part_size; - __u32 first_part_header_bits; - __u32 dct_part_sizes[8]; - - __u64 last_frame_ts; - __u64 golden_frame_ts; - __u64 alt_frame_ts; - - __u64 flags; -}; - -#endif diff --git a/sys/v4l2codecs/plugin.c b/sys/v4l2codecs/plugin.c index 8d0c969a8..7f38417a6 100644 --- a/sys/v4l2codecs/plugin.c +++ b/sys/v4l2codecs/plugin.c @@ -27,7 +27,6 @@ #include "gstv4l2codecvp8dec.h" #include "gstv4l2decoder.h" #include "linux/v4l2-controls.h" -#include "linux/vp8-ctrls.h" #include "linux/media.h" #define GST_CAT_DEFAULT gstv4l2codecs_debug |