History

media: uapi: move MPEG-2 stateless controls out of staging

Until now, the MPEG-2 V4L2 API was not exported as a public API, and only defined in a private media header (media/mpeg2-ctrls.h). After reviewing the MPEG-2 specification in detail, and reworking the controls so they match the MPEG-2 semantics properly, we can consider it ready.

Ezequiel Garcia committed 5 years ago

Commit f4815b31 parent 3c994c614 files · +367 −369Browse files

Showing the changes to include/uapi (2 of 14 files). Show all

Unified · Split

2 files
  1. include/uapi/linux/v4l2-controls.h +112 −0
  2. include/uapi/linux/videodev2.h +3 −0
include/uapi/linux/v4l2-controls.h+112−0
@@ -1862,6 +1862,118 @@ struct v4l2_ctrl_vp8_frame { · 1861 unmodified lines
1862 __u64 flags;1862 __u64 flags;
1863};1863};
1864 1864
1865/* Stateless MPEG-2 controls */
1866
1867#define V4L2_MPEG2_SEQ_FLAG_PROGRESSIVE 0x01
1868
1869#define V4L2_CID_STATELESS_MPEG2_SEQUENCE (V4L2_CID_CODEC_STATELESS_BASE+220)
1870/**
1871 * struct v4l2_ctrl_mpeg2_sequence - MPEG-2 sequence header
1872 *
1873 * All the members on this structure match the sequence header and sequence
1874 * extension syntaxes as specified by the MPEG-2 specification.
1875 *
1876 * Fields horizontal_size, vertical_size and vbv_buffer_size are a
1877 * combination of respective _value and extension syntax elements,
1878 * as described in section 6.3.3 "Sequence header".
1879 *
1880 * @horizontal_size: combination of elements horizontal_size_value and
1881 * horizontal_size_extension.
1882 * @vertical_size: combination of elements vertical_size_value and
1883 * vertical_size_extension.
1884 * @vbv_buffer_size: combination of elements vbv_buffer_size_value and
1885 * vbv_buffer_size_extension.
1886 * @profile_and_level_indication: see MPEG-2 specification.
1887 * @chroma_format: see MPEG-2 specification.
1888 * @flags: see V4L2_MPEG2_SEQ_FLAG_{}.
1889 */
1890struct v4l2_ctrl_mpeg2_sequence {
1891 __u16 horizontal_size;
1892 __u16 vertical_size;
1893 __u32 vbv_buffer_size;
1894 __u16 profile_and_level_indication;
1895 __u8 chroma_format;
1896 __u8 flags;
1897};
1898
1899#define V4L2_MPEG2_PIC_CODING_TYPE_I 1
1900#define V4L2_MPEG2_PIC_CODING_TYPE_P 2
1901#define V4L2_MPEG2_PIC_CODING_TYPE_B 3
1902#define V4L2_MPEG2_PIC_CODING_TYPE_D 4
1903
1904#define V4L2_MPEG2_PIC_TOP_FIELD 0x1
1905#define V4L2_MPEG2_PIC_BOTTOM_FIELD 0x2
1906#define V4L2_MPEG2_PIC_FRAME 0x3
1907
1908#define V4L2_MPEG2_PIC_FLAG_TOP_FIELD_FIRST 0x0001
1909#define V4L2_MPEG2_PIC_FLAG_FRAME_PRED_DCT 0x0002
1910#define V4L2_MPEG2_PIC_FLAG_CONCEALMENT_MV 0x0004
1911#define V4L2_MPEG2_PIC_FLAG_Q_SCALE_TYPE 0x0008
1912#define V4L2_MPEG2_PIC_FLAG_INTRA_VLC 0x0010
1913#define V4L2_MPEG2_PIC_FLAG_ALT_SCAN 0x0020
1914#define V4L2_MPEG2_PIC_FLAG_REPEAT_FIRST 0x0040
1915#define V4L2_MPEG2_PIC_FLAG_PROGRESSIVE 0x0080
1916
1917#define V4L2_CID_STATELESS_MPEG2_PICTURE (V4L2_CID_CODEC_STATELESS_BASE+221)
1918/**
1919 * struct v4l2_ctrl_mpeg2_picture - MPEG-2 picture header
1920 *
1921 * All the members on this structure match the picture header and picture
1922 * coding extension syntaxes as specified by the MPEG-2 specification.
1923 *
1924 * @backward_ref_ts: timestamp of the V4L2 capture buffer to use as
1925 * reference for backward prediction.
1926 * @forward_ref_ts: timestamp of the V4L2 capture buffer to use as
1927 * reference for forward prediction. These timestamp refers to the
1928 * timestamp field in struct v4l2_buffer. Use v4l2_timeval_to_ns()
1929 * to convert the struct timeval to a __u64.
1930 * @flags: see V4L2_MPEG2_PIC_FLAG_{}.
1931 * @f_code: see MPEG-2 specification.
1932 * @picture_coding_type: see MPEG-2 specification.
1933 * @picture_structure: see V4L2_MPEG2_PIC_{}_FIELD.
1934 * @intra_dc_precision: see MPEG-2 specification.
1935 * @reserved: padding field. Should be zeroed by applications.
1936 */
1937struct v4l2_ctrl_mpeg2_picture {
1938 __u64 backward_ref_ts;
1939 __u64 forward_ref_ts;
1940 __u32 flags;
1941 __u8 f_code[2][2];
1942 __u8 picture_coding_type;
1943 __u8 picture_structure;
1944 __u8 intra_dc_precision;
1945 __u8 reserved[5];
1946};
1947
1948#define V4L2_CID_STATELESS_MPEG2_QUANTISATION (V4L2_CID_CODEC_STATELESS_BASE+222)
1949/**
1950 * struct v4l2_ctrl_mpeg2_quantisation - MPEG-2 quantisation
1951 *
1952 * Quantisation matrices as specified by section 6.3.7
1953 * "Quant matrix extension".
1954 *
1955 * @intra_quantiser_matrix: The quantisation matrix coefficients
1956 * for intra-coded frames, in zigzag scanning order. It is relevant
1957 * for both luma and chroma components, although it can be superseded
1958 * by the chroma-specific matrix for non-4:2:0 YUV formats.
1959 * @non_intra_quantiser_matrix: The quantisation matrix coefficients
1960 * for non-intra-coded frames, in zigzag scanning order. It is relevant
1961 * for both luma and chroma components, although it can be superseded
1962 * by the chroma-specific matrix for non-4:2:0 YUV formats.
1963 * @chroma_intra_quantiser_matrix: The quantisation matrix coefficients
1964 * for the chominance component of intra-coded frames, in zigzag scanning
1965 * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
1966 * @chroma_non_intra_quantiser_matrix: The quantisation matrix coefficients
1967 * for the chrominance component of non-intra-coded frames, in zigzag scanning
1968 * order. Only relevant for 4:2:2 and 4:4:4 YUV formats.
1969 */
1970struct v4l2_ctrl_mpeg2_quantisation {
1971 __u8 intra_quantiser_matrix[64];
1972 __u8 non_intra_quantiser_matrix[64];
1973 __u8 chroma_intra_quantiser_matrix[64];
1974 __u8 chroma_non_intra_quantiser_matrix[64];
1975};
1976
1865#define V4L2_CID_COLORIMETRY_CLASS_BASE (V4L2_CTRL_CLASS_COLORIMETRY | 0x900)1977#define V4L2_CID_COLORIMETRY_CLASS_BASE (V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
1866#define V4L2_CID_COLORIMETRY_CLASS (V4L2_CTRL_CLASS_COLORIMETRY | 1)1978#define V4L2_CID_COLORIMETRY_CLASS (V4L2_CTRL_CLASS_COLORIMETRY | 1)
1867 1979
include/uapi/linux/videodev2.h+3−0
@@ -1747,6 +1747,9 @@ struct v4l2_ext_control { · 1746 unmodified lines
1747 struct v4l2_ctrl_h264_decode_params __user *p_h264_decode_params;1747 struct v4l2_ctrl_h264_decode_params __user *p_h264_decode_params;
1748 struct v4l2_ctrl_fwht_params __user *p_fwht_params;1748 struct v4l2_ctrl_fwht_params __user *p_fwht_params;
1749 struct v4l2_ctrl_vp8_frame __user *p_vp8_frame;1749 struct v4l2_ctrl_vp8_frame __user *p_vp8_frame;
1750 struct v4l2_ctrl_mpeg2_sequence __user *p_mpeg2_sequence;
1751 struct v4l2_ctrl_mpeg2_picture __user *p_mpeg2_picture;
1752 struct v4l2_ctrl_mpeg2_quantisation __user *p_mpeg2_quantisation;
1750 void __user *ptr;1753 void __user *ptr;
1751 };1754 };
1752} __attribute__ ((packed));1755} __attribute__ ((packed));