Add "parsed MPEG-2" pixel format & related controls
needed by stateless video decoders.
In order to decode the video bitstream chunk provided
by user on OUTPUT queue, stateless decoders require
also some extra data resulting from this video bitstream
chunk parsing.
Those parsed extra data have to be set by user through
control framework using the dedicated mpeg video extended
controls introduced in this patchset.

Change-Id: I60755685ccb41942574654f64632d1348b689033
Signed-off-by: Hugues Fruchet <hugues.fruc...@st.com>
---
 include/linux/v4l2-controls.h | 93 +++++++++++++++++++++++++++++++++++++++++++
 include/linux/videodev2.h     |  8 ++++
 2 files changed, 101 insertions(+)

diff --git a/include/linux/v4l2-controls.h b/include/linux/v4l2-controls.h
index 0d2e1e0..d8ad718 100644
--- a/include/linux/v4l2-controls.h
+++ b/include/linux/v4l2-controls.h
@@ -547,6 +547,99 @@ enum v4l2_mpeg_video_mpeg4_profile {
 };
 #define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL         (V4L2_CID_MPEG_BASE+407)
 
+/*
+ * parsed MPEG-2 controls
+ * (needed by stateless video decoders)
+ * Those controls have been defined based on MPEG-2 standard ISO/IEC 13818-2,
+ * and so derive directly from the MPEG-2 video bitstream syntax including
+ * how it is coded inside bitstream (enumeration values for ex.).
+ */
+#define MPEG2_QUANTISER_MATRIX_SIZE    64
+#define V4L2_CID_MPEG_VIDEO_MPEG2_SEQ_HDR              (V4L2_CID_MPEG_BASE+450)
+struct v4l2_mpeg_video_mpeg2_seq_hdr {
+       __u16   width;
+       __u16   height;
+       __u8    aspect_ratio_info;
+       __u8    frame_rate_code;
+       __u16   vbv_buffer_size;
+       __u32   bitrate_value;
+       __u16   constrained_parameters_flag;
+       __u8    load_intra_quantiser_matrix;
+       __u8    load_non_intra_quantiser_matrix;
+       __u8    intra_quantiser_matrix[MPEG2_QUANTISER_MATRIX_SIZE];
+       __u8    non_intra_quantiser_matrix[MPEG2_QUANTISER_MATRIX_SIZE];
+       __u32   par_w;
+       __u32   par_h;
+       __u32   fps_n;
+       __u32   fps_d;
+       __u32   bitrate;
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG2_SEQ_EXT              (V4L2_CID_MPEG_BASE+451)
+struct v4l2_mpeg_video_mpeg2_seq_ext {
+       __u8    profile;
+       __u8    level;
+       __u8    progressive;
+       __u8    chroma_format;
+       __u8    horiz_size_ext;
+       __u8    vert_size_ext;
+       __u16   bitrate_ext;
+       __u8    vbv_buffer_size_ext;
+       __u8    low_delay;
+       __u8    fps_n_ext;
+       __u8    fps_d_ext;
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG2_SEQ_DISPLAY_EXT      (V4L2_CID_MPEG_BASE+452)
+struct v4l2_mpeg_video_mpeg2_seq_display_ext {
+       __u16   display_horizontal_size;
+       __u16   display_vertical_size;
+       __u8    video_format;
+       __u8    colour_description_flag;
+       __u8    colour_primaries;
+       __u8    transfer_characteristics;
+       __u8    matrix_coefficients;
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG2_SEQ_MATRIX_EXT       (V4L2_CID_MPEG_BASE+453)
+struct v4l2_mpeg_video_mpeg2_seq_matrix_ext {
+       __u8    load_intra_quantiser_matrix;
+       __u8    intra_quantiser_matrix[MPEG2_QUANTISER_MATRIX_SIZE];
+       __u8    load_non_intra_quantiser_matrix;
+       __u8    non_intra_quantiser_matrix[MPEG2_QUANTISER_MATRIX_SIZE];
+       __u8    load_chroma_intra_quantiser_matrix;
+       __u8    chroma_intra_quantiser_matrix[MPEG2_QUANTISER_MATRIX_SIZE];
+       __u8    load_chroma_non_intra_quantiser_matrix;
+       __u8    chroma_non_intra_quantiser_matrix[MPEG2_QUANTISER_MATRIX_SIZE];
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG2_PIC_HDR              (V4L2_CID_MPEG_BASE+454)
+struct v4l2_mpeg_video_mpeg2_pic_hdr {
+       __u32   offset;
+       __u16   tsn;
+       __u16   vbv_delay;
+       __u8    pic_type;
+       __u8    full_pel_forward_vector;
+       __u8    full_pel_backward_vector;
+       __u8    f_code[2][2];
+};
+#define V4L2_CID_MPEG_VIDEO_MPEG2_PIC_EXT              (V4L2_CID_MPEG_BASE+455)
+struct v4l2_mpeg_video_mpeg2_pic_ext {
+       __u8    f_code[2][2];
+       __u8    intra_dc_precision;
+       __u8    picture_structure;
+       __u8    top_field_first;
+       __u8    frame_pred_frame_dct;
+       __u8    concealment_motion_vectors;
+       __u8    q_scale_type;
+       __u8    intra_vlc_format;
+       __u8    alternate_scan;
+       __u8    repeat_first_field;
+       __u8    chroma_420_type;
+       __u8    progressive_frame;
+       __u8    composite_display;
+       __u8    v_axis;
+       __u8    field_sequence;
+       __u8    sub_carrier;
+       __u8    burst_amplitude;
+       __u8    sub_carrier_phase;
+};
 /*  Control IDs for VP8 streams
  *  Although VP8 is not part of MPEG we add these controls to the MPEG class
  *  as that class is already handling other video compression standards
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index b1e36ee..ec4344c 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -618,7 +618,9 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_H264_MVC v4l2_fourcc('M', '2', '6', '4') /* H264 MVC */
 #define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          
*/
 #define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     
*/
+#define V4L2_PIX_FMT_MPEG1_PARSED v4l2_fourcc('M', 'G', '1', 'P') /* MPEG1 
with parsing metadata given through controls */
 #define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     
*/
+#define V4L2_PIX_FMT_MPEG2_PARSED v4l2_fourcc('M', 'G', '2', 'P') /* MPEG2 
with parsing metadata given through controls */
 #define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 
ES */
 #define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid          
 */
 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M 
Annex G compliant stream */
@@ -1597,6 +1599,12 @@ enum v4l2_ctrl_type {
        V4L2_CTRL_TYPE_U8            = 0x0100,
        V4L2_CTRL_TYPE_U16           = 0x0101,
        V4L2_CTRL_TYPE_U32           = 0x0102,
+       V4L2_CTRL_TYPE_MPEG2_SEQ_HDR  = 0x0109,
+       V4L2_CTRL_TYPE_MPEG2_SEQ_EXT  = 0x010A,
+       V4L2_CTRL_TYPE_MPEG2_SEQ_DISPLAY_EXT  = 0x010B,
+       V4L2_CTRL_TYPE_MPEG2_SEQ_MATRIX_EXT  = 0x010C,
+       V4L2_CTRL_TYPE_MPEG2_PIC_HDR  = 0x010D,
+       V4L2_CTRL_TYPE_MPEG2_PIC_EXT  = 0x010E,
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
-- 
1.9.1

Reply via email to