From f07e572f6447465d8938679533d604e402b0f066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Thu, 18 Feb 2021 18:04:33 +0100 Subject: bcm27xx: import latest patches from the RPi foundation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bcm2708: boot tested on RPi B+ v1.2 bcm2709: boot tested on RPi 3B v1.2 and RPi 4B v1.1 4G bcm2710: boot tested on RPi 3B v1.2 bcm2711: boot tested on RPi 4B v1.1 4G Signed-off-by: Álvaro Fernández Rojas --- ...dd-definitions-for-HEVC-stateless-decodin.patch | 1093 -------------------- 1 file changed, 1093 deletions(-) delete mode 100644 target/linux/bcm27xx/patches-5.4/950-0498-media-v4l-Add-definitions-for-HEVC-stateless-decodin.patch (limited to 'target/linux/bcm27xx/patches-5.4/950-0498-media-v4l-Add-definitions-for-HEVC-stateless-decodin.patch') diff --git a/target/linux/bcm27xx/patches-5.4/950-0498-media-v4l-Add-definitions-for-HEVC-stateless-decodin.patch b/target/linux/bcm27xx/patches-5.4/950-0498-media-v4l-Add-definitions-for-HEVC-stateless-decodin.patch deleted file mode 100644 index 0fe0f8cea4..0000000000 --- a/target/linux/bcm27xx/patches-5.4/950-0498-media-v4l-Add-definitions-for-HEVC-stateless-decodin.patch +++ /dev/null @@ -1,1093 +0,0 @@ -From 5f6c08984a6578201fe3a2394ccb0d3a30fdf027 Mon Sep 17 00:00:00 2001 -From: Paul Kocialkowski -Date: Tue, 22 Oct 2019 12:26:52 -0300 -Subject: [PATCH] media: v4l: Add definitions for HEVC stateless - decoding - -This introduces the required definitions for HEVC decoding support with -stateless VPUs. The controls associated to the HEVC slice format provide -the required meta-data for decoding slices extracted from the bitstream. - -They are not exported to the public V4L2 API since reworking this API -will likely be needed for covering various use-cases and new hardware. - -Multi-slice decoding is exposed as a valid decoding mode to match current -H.264 support but it is not yet implemented. - -The interface comes with the following limitations: -* No custom quantization matrices (scaling lists); -* Support for a single temporal layer only; -* No slice entry point offsets support; -* No conformance window support; -* No VUI parameters support; -* No support for SPS extensions: range, multilayer, 3d, scc, 4 bits; -* No support for PPS extensions: range, multilayer, 3d, scc, 4 bits. - -Signed-off-by: Paul Kocialkowski -[hverkuil-cisco@xs4all.nl: use 1ULL in flags defines in hevc-ctrls.h] -Signed-off-by: Hans Verkuil -Signed-off-by: Mauro Carvalho Chehab ---- - Documentation/media/uapi/v4l/biblio.rst | 9 + - .../media/uapi/v4l/ext-ctrls-codec.rst | 553 +++++++++++++++++- - .../media/uapi/v4l/vidioc-queryctrl.rst | 18 + - .../media/videodev2.h.rst.exceptions | 3 + - drivers/media/v4l2-core/v4l2-ctrls.c | 109 +++- - drivers/media/v4l2-core/v4l2-ioctl.c | 1 + - include/media/hevc-ctrls.h | 212 +++++++ - include/media/v4l2-ctrls.h | 7 + - 8 files changed, 908 insertions(+), 4 deletions(-) - create mode 100644 include/media/hevc-ctrls.h - ---- a/Documentation/media/uapi/v4l/biblio.rst -+++ b/Documentation/media/uapi/v4l/biblio.rst -@@ -131,6 +131,15 @@ ITU-T Rec. H.264 Specification (04/2017 - - :author: International Telecommunication Union (http://www.itu.ch) - -+.. _hevc: -+ -+ITU H.265/HEVC -+============== -+ -+:title: ITU-T Rec. H.265 | ISO/IEC 23008-2 "High Efficiency Video Coding" -+ -+:author: International Telecommunication Union (http://www.itu.ch), International Organisation for Standardisation (http://www.iso.ch) -+ - .. _jfif: - - JFIF ---- a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst -+++ b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst -@@ -1983,9 +1983,9 @@ enum v4l2_mpeg_video_h264_hierarchical_c - - ``reference_ts`` - - Timestamp of the V4L2 capture buffer to use as reference, used - with B-coded and P-coded frames. The timestamp refers to the -- ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the -- :c:func:`v4l2_timeval_to_ns()` function to convert the struct -- :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64. -+ ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the -+ :c:func:`v4l2_timeval_to_ns()` function to convert the struct -+ :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64. - * - __u16 - - ``frame_num`` - - -@@ -3693,3 +3693,550 @@ enum v4l2_mpeg_video_hevc_size_of_length - Indicates whether to generate SPS and PPS at every IDR. Setting it to 0 - disables generating SPS and PPS at every IDR. Setting it to one enables - generating SPS and PPS at every IDR. -+ -+.. _v4l2-mpeg-hevc: -+ -+``V4L2_CID_MPEG_VIDEO_HEVC_SPS (struct)`` -+ Specifies the Sequence Parameter Set fields (as extracted from the -+ bitstream) for the associated HEVC slice data. -+ These bitstream parameters are defined according to :ref:`hevc`. -+ They are described in section 7.4.3.2 "Sequence parameter set RBSP -+ semantics" of the specification. -+ -+.. c:type:: v4l2_ctrl_hevc_sps -+ -+.. cssclass:: longtable -+ -+.. flat-table:: struct v4l2_ctrl_hevc_sps -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - __u16 -+ - ``pic_width_in_luma_samples`` -+ - -+ * - __u16 -+ - ``pic_height_in_luma_samples`` -+ - -+ * - __u8 -+ - ``bit_depth_luma_minus8`` -+ - -+ * - __u8 -+ - ``bit_depth_chroma_minus8`` -+ - -+ * - __u8 -+ - ``log2_max_pic_order_cnt_lsb_minus4`` -+ - -+ * - __u8 -+ - ``sps_max_dec_pic_buffering_minus1`` -+ - -+ * - __u8 -+ - ``sps_max_num_reorder_pics`` -+ - -+ * - __u8 -+ - ``sps_max_latency_increase_plus1`` -+ - -+ * - __u8 -+ - ``log2_min_luma_coding_block_size_minus3`` -+ - -+ * - __u8 -+ - ``log2_diff_max_min_luma_coding_block_size`` -+ - -+ * - __u8 -+ - ``log2_min_luma_transform_block_size_minus2`` -+ - -+ * - __u8 -+ - ``log2_diff_max_min_luma_transform_block_size`` -+ - -+ * - __u8 -+ - ``max_transform_hierarchy_depth_inter`` -+ - -+ * - __u8 -+ - ``max_transform_hierarchy_depth_intra`` -+ - -+ * - __u8 -+ - ``pcm_sample_bit_depth_luma_minus1`` -+ - -+ * - __u8 -+ - ``pcm_sample_bit_depth_chroma_minus1`` -+ - -+ * - __u8 -+ - ``log2_min_pcm_luma_coding_block_size_minus3`` -+ - -+ * - __u8 -+ - ``log2_diff_max_min_pcm_luma_coding_block_size`` -+ - -+ * - __u8 -+ - ``num_short_term_ref_pic_sets`` -+ - -+ * - __u8 -+ - ``num_long_term_ref_pics_sps`` -+ - -+ * - __u8 -+ - ``chroma_format_idc`` -+ - -+ * - __u64 -+ - ``flags`` -+ - See :ref:`Sequence Parameter Set Flags ` -+ -+.. _hevc_sps_flags: -+ -+``Sequence Parameter Set Flags`` -+ -+.. cssclass:: longtable -+ -+.. flat-table:: -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE`` -+ - 0x00000001 -+ - -+ * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED`` -+ - 0x00000002 -+ - -+ * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED`` -+ - 0x00000004 -+ - -+ * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET`` -+ - 0x00000008 -+ - -+ * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED`` -+ - 0x00000010 -+ - -+ * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED`` -+ - 0x00000020 -+ - -+ * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT`` -+ - 0x00000040 -+ - -+ * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED`` -+ - 0x00000080 -+ - -+ * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED`` -+ - 0x00000100 -+ - -+ -+``V4L2_CID_MPEG_VIDEO_HEVC_PPS (struct)`` -+ Specifies the Picture Parameter Set fields (as extracted from the -+ bitstream) for the associated HEVC slice data. -+ These bitstream parameters are defined according to :ref:`hevc`. -+ They are described in section 7.4.3.3 "Picture parameter set RBSP -+ semantics" of the specification. -+ -+.. c:type:: v4l2_ctrl_hevc_pps -+ -+.. cssclass:: longtable -+ -+.. flat-table:: struct v4l2_ctrl_hevc_pps -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - __u8 -+ - ``num_extra_slice_header_bits`` -+ - -+ * - __s8 -+ - ``init_qp_minus26`` -+ - -+ * - __u8 -+ - ``diff_cu_qp_delta_depth`` -+ - -+ * - __s8 -+ - ``pps_cb_qp_offset`` -+ - -+ * - __s8 -+ - ``pps_cr_qp_offset`` -+ - -+ * - __u8 -+ - ``num_tile_columns_minus1`` -+ - -+ * - __u8 -+ - ``num_tile_rows_minus1`` -+ - -+ * - __u8 -+ - ``column_width_minus1[20]`` -+ - -+ * - __u8 -+ - ``row_height_minus1[22]`` -+ - -+ * - __s8 -+ - ``pps_beta_offset_div2`` -+ - -+ * - __s8 -+ - ``pps_tc_offset_div2`` -+ - -+ * - __u8 -+ - ``log2_parallel_merge_level_minus2`` -+ - -+ * - __u8 -+ - ``padding[4]`` -+ - Applications and drivers must set this to zero. -+ * - __u64 -+ - ``flags`` -+ - See :ref:`Picture Parameter Set Flags ` -+ -+.. _hevc_pps_flags: -+ -+``Picture Parameter Set Flags`` -+ -+.. cssclass:: longtable -+ -+.. flat-table:: -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT`` -+ - 0x00000001 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT`` -+ - 0x00000002 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED`` -+ - 0x00000004 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT`` -+ - 0x00000008 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED`` -+ - 0x00000010 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED`` -+ - 0x00000020 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED`` -+ - 0x00000040 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT`` -+ - 0x00000080 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED`` -+ - 0x00000100 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED`` -+ - 0x00000200 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED`` -+ - 0x00000400 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED`` -+ - 0x00000800 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED`` -+ - 0x00001000 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED`` -+ - 0x00002000 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED`` -+ - 0x00004000 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED`` -+ - 0x00008000 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER`` -+ - 0x00010000 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT`` -+ - 0x00020000 -+ - -+ * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT`` -+ - 0x00040000 -+ - -+ -+``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (struct)`` -+ Specifies various slice-specific parameters, especially from the NAL unit -+ header, general slice segment header and weighted prediction parameter -+ parts of the bitstream. -+ These bitstream parameters are defined according to :ref:`hevc`. -+ They are described in section 7.4.7 "General slice segment header -+ semantics" of the specification. -+ -+.. c:type:: v4l2_ctrl_hevc_slice_params -+ -+.. cssclass:: longtable -+ -+.. flat-table:: struct v4l2_ctrl_hevc_slice_params -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - __u32 -+ - ``bit_size`` -+ - Size (in bits) of the current slice data. -+ * - __u32 -+ - ``data_bit_offset`` -+ - Offset (in bits) to the video data in the current slice data. -+ * - __u8 -+ - ``nal_unit_type`` -+ - -+ * - __u8 -+ - ``nuh_temporal_id_plus1`` -+ - -+ * - __u8 -+ - ``slice_type`` -+ - -+ (V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or -+ V4L2_HEVC_SLICE_TYPE_B). -+ * - __u8 -+ - ``colour_plane_id`` -+ - -+ * - __u16 -+ - ``slice_pic_order_cnt`` -+ - -+ * - __u8 -+ - ``num_ref_idx_l0_active_minus1`` -+ - -+ * - __u8 -+ - ``num_ref_idx_l1_active_minus1`` -+ - -+ * - __u8 -+ - ``collocated_ref_idx`` -+ - -+ * - __u8 -+ - ``five_minus_max_num_merge_cand`` -+ - -+ * - __s8 -+ - ``slice_qp_delta`` -+ - -+ * - __s8 -+ - ``slice_cb_qp_offset`` -+ - -+ * - __s8 -+ - ``slice_cr_qp_offset`` -+ - -+ * - __s8 -+ - ``slice_act_y_qp_offset`` -+ - -+ * - __s8 -+ - ``slice_act_cb_qp_offset`` -+ - -+ * - __s8 -+ - ``slice_act_cr_qp_offset`` -+ - -+ * - __s8 -+ - ``slice_beta_offset_div2`` -+ - -+ * - __s8 -+ - ``slice_tc_offset_div2`` -+ - -+ * - __u8 -+ - ``pic_struct`` -+ - -+ * - __u8 -+ - ``num_active_dpb_entries`` -+ - The number of entries in ``dpb``. -+ * - __u8 -+ - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` -+ - The list of L0 reference elements as indices in the DPB. -+ * - __u8 -+ - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` -+ - The list of L1 reference elements as indices in the DPB. -+ * - __u8 -+ - ``num_rps_poc_st_curr_before`` -+ - The number of reference pictures in the short-term set that come before -+ the current frame. -+ * - __u8 -+ - ``num_rps_poc_st_curr_after`` -+ - The number of reference pictures in the short-term set that come after -+ the current frame. -+ * - __u8 -+ - ``num_rps_poc_lt_curr`` -+ - The number of reference pictures in the long-term set. -+ * - __u8 -+ - ``padding[7]`` -+ - Applications and drivers must set this to zero. -+ * - struct :c:type:`v4l2_hevc_dpb_entry` -+ - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` -+ - The decoded picture buffer, for meta-data about reference frames. -+ * - struct :c:type:`v4l2_hevc_pred_weight_table` -+ - ``pred_weight_table`` -+ - The prediction weight coefficients for inter-picture prediction. -+ * - __u64 -+ - ``flags`` -+ - See :ref:`Slice Parameters Flags ` -+ -+.. _hevc_slice_params_flags: -+ -+``Slice Parameters Flags`` -+ -+.. cssclass:: longtable -+ -+.. flat-table:: -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA`` -+ - 0x00000001 -+ - -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA`` -+ - 0x00000002 -+ - -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED`` -+ - 0x00000004 -+ - -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO`` -+ - 0x00000008 -+ - -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT`` -+ - 0x00000010 -+ - -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0`` -+ - 0x00000020 -+ - -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV`` -+ - 0x00000040 -+ - -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED`` -+ - 0x00000080 -+ - -+ * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED`` -+ - 0x00000100 -+ - -+ -+.. c:type:: v4l2_hevc_dpb_entry -+ -+.. cssclass:: longtable -+ -+.. flat-table:: struct v4l2_hevc_dpb_entry -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - __u64 -+ - ``timestamp`` -+ - Timestamp of the V4L2 capture buffer to use as reference, used -+ with B-coded and P-coded frames. The timestamp refers to the -+ ``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the -+ :c:func:`v4l2_timeval_to_ns()` function to convert the struct -+ :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64. -+ * - __u8 -+ - ``rps`` -+ - The reference set for the reference frame -+ (V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_BEFORE, -+ V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_AFTER or -+ V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR) -+ * - __u8 -+ - ``field_pic`` -+ - Whether the reference is a field picture or a frame. -+ * - __u16 -+ - ``pic_order_cnt[2]`` -+ - The picture order count of the reference. Only the first element of the -+ array is used for frame pictures, while the first element identifies the -+ top field and the second the bottom field in field-coded pictures. -+ * - __u8 -+ - ``padding[2]`` -+ - Applications and drivers must set this to zero. -+ -+.. c:type:: v4l2_hevc_pred_weight_table -+ -+.. cssclass:: longtable -+ -+.. flat-table:: struct v4l2_hevc_pred_weight_table -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - __u8 -+ - ``luma_log2_weight_denom`` -+ - -+ * - __s8 -+ - ``delta_chroma_log2_weight_denom`` -+ - -+ * - __s8 -+ - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` -+ - -+ * - __s8 -+ - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` -+ - -+ * - __s8 -+ - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]`` -+ - -+ * - __s8 -+ - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]`` -+ - -+ * - __s8 -+ - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` -+ - -+ * - __s8 -+ - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]`` -+ - -+ * - __s8 -+ - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]`` -+ - -+ * - __s8 -+ - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]`` -+ - -+ * - __u8 -+ - ``padding[6]`` -+ - Applications and drivers must set this to zero. -+ -+``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (enum)`` -+ Specifies the decoding mode to use. Currently exposes slice-based and -+ frame-based decoding but new modes might be added later on. -+ This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE -+ pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE -+ are required to set this control in order to specify the decoding mode -+ that is expected for the buffer. -+ Drivers may expose a single or multiple decoding modes, depending -+ on what they can support. -+ -+ .. note:: -+ -+ This menu control is not yet part of the public kernel API and -+ it is expected to change. -+ -+.. c:type:: v4l2_mpeg_video_hevc_decode_mode -+ -+.. cssclass:: longtable -+ -+.. flat-table:: -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED`` -+ - 0 -+ - Decoding is done at the slice granularity. -+ The OUTPUT buffer must contain a single slice. -+ * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED`` -+ - 1 -+ - Decoding is done at the frame granularity. -+ The OUTPUT buffer must contain all slices needed to decode the -+ frame. The OUTPUT buffer must also contain both fields. -+ -+``V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (enum)`` -+ Specifies the HEVC slice start code expected for each slice. -+ This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE -+ pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE -+ are required to set this control in order to specify the start code -+ that is expected for the buffer. -+ Drivers may expose a single or multiple start codes, depending -+ on what they can support. -+ -+ .. note:: -+ -+ This menu control is not yet part of the public kernel API and -+ it is expected to change. -+ -+.. c:type:: v4l2_mpeg_video_hevc_start_code -+ -+.. cssclass:: longtable -+ -+.. flat-table:: -+ :header-rows: 0 -+ :stub-columns: 0 -+ :widths: 1 1 2 -+ -+ * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE`` -+ - 0 -+ - Selecting this value specifies that HEVC slices are passed -+ to the driver without any start code. -+ * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B`` -+ - 1 -+ - Selecting this value specifies that HEVC slices are expected -+ to be prefixed by Annex B start codes. According to :ref:`hevc` -+ valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001. ---- a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst -+++ b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst -@@ -479,6 +479,24 @@ See also the examples in :ref:`control`. - - n/a - - A struct :c:type:`v4l2_ctrl_h264_decode_params`, containing H264 - decode parameters for stateless video decoders. -+ * - ``V4L2_CTRL_TYPE_HEVC_SPS`` -+ - n/a -+ - n/a -+ - n/a -+ - A struct :c:type:`v4l2_ctrl_hevc_sps`, containing HEVC Sequence -+ Parameter Set for stateless video decoders. -+ * - ``V4L2_CTRL_TYPE_HEVC_PPS`` -+ - n/a -+ - n/a -+ - n/a -+ - A struct :c:type:`v4l2_ctrl_hevc_pps`, containing HEVC Picture -+ Parameter Set for stateless video decoders. -+ * - ``V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS`` -+ - n/a -+ - n/a -+ - n/a -+ - A struct :c:type:`v4l2_ctrl_hevc_slice_params`, containing HEVC -+ slice parameters for stateless video decoders. - - .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| - ---- a/Documentation/media/videodev2.h.rst.exceptions -+++ b/Documentation/media/videodev2.h.rst.exceptions -@@ -141,6 +141,9 @@ replace symbol V4L2_CTRL_TYPE_H264_PPS : - replace symbol V4L2_CTRL_TYPE_H264_SCALING_MATRIX :c:type:`v4l2_ctrl_type` - replace symbol V4L2_CTRL_TYPE_H264_SLICE_PARAMS :c:type:`v4l2_ctrl_type` - replace symbol V4L2_CTRL_TYPE_H264_DECODE_PARAMS :c:type:`v4l2_ctrl_type` -+replace symbol V4L2_CTRL_TYPE_HEVC_SPS :c:type:`v4l2_ctrl_type` -+replace symbol V4L2_CTRL_TYPE_HEVC_PPS :c:type:`v4l2_ctrl_type` -+replace symbol V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS :c:type:`v4l2_ctrl_type` - replace symbol V4L2_CTRL_TYPE_AREA :c:type:`v4l2_ctrl_type` - - # V4L2 capability defines ---- a/drivers/media/v4l2-core/v4l2-ctrls.c -+++ b/drivers/media/v4l2-core/v4l2-ctrls.c -@@ -567,6 +567,16 @@ const char * const *v4l2_ctrl_get_menu(u - "Disabled at slice boundary", - "NULL", - }; -+ static const char * const hevc_decode_mode[] = { -+ "Slice-Based", -+ "Frame-Based", -+ NULL, -+ }; -+ static const char * const hevc_start_code[] = { -+ "No Start Code", -+ "Annex B Start Code", -+ NULL, -+ }; - - switch (id) { - case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ: -@@ -688,7 +698,10 @@ const char * const *v4l2_ctrl_get_menu(u - return hevc_tier; - case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE: - return hevc_loop_filter_mode; -- -+ case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE: -+ return hevc_decode_mode; -+ case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE: -+ return hevc_start_code; - default: - return NULL; - } -@@ -958,6 +971,11 @@ const char *v4l2_ctrl_get_name(u32 id) - case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD: return "HEVC Size of Length Field"; - case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES: return "Reference Frames for a P-Frame"; - case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR: return "Prepend SPS and PPS to IDR"; -+ case V4L2_CID_MPEG_VIDEO_HEVC_SPS: return "HEVC Sequence Parameter Set"; -+ case V4L2_CID_MPEG_VIDEO_HEVC_PPS: return "HEVC Picture Parameter Set"; -+ case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS: return "HEVC Slice Parameters"; -+ case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE: return "HEVC Decode Mode"; -+ case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE: return "HEVC Start Code"; - - /* CAMERA controls */ - /* Keep the order of the 'case's the same as in v4l2-controls.h! */ -@@ -1267,6 +1285,8 @@ void v4l2_ctrl_fill(u32 id, const char * - case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD: - case V4L2_CID_MPEG_VIDEO_HEVC_TIER: - case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE: -+ case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE: -+ case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE: - *type = V4L2_CTRL_TYPE_MENU; - break; - case V4L2_CID_LINK_FREQ: -@@ -1377,6 +1397,15 @@ void v4l2_ctrl_fill(u32 id, const char * - case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER: - *type = V4L2_CTRL_TYPE_VP8_FRAME_HEADER; - break; -+ case V4L2_CID_MPEG_VIDEO_HEVC_SPS: -+ *type = V4L2_CTRL_TYPE_HEVC_SPS; -+ break; -+ case V4L2_CID_MPEG_VIDEO_HEVC_PPS: -+ *type = V4L2_CTRL_TYPE_HEVC_PPS; -+ break; -+ case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS: -+ *type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS; -+ break; - case V4L2_CID_UNIT_CELL_SIZE: - *type = V4L2_CTRL_TYPE_AREA; - *flags |= V4L2_CTRL_FLAG_READ_ONLY; -@@ -1678,8 +1707,12 @@ static int std_validate_compound(const s - { - struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params; - struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header; -+ struct v4l2_ctrl_hevc_sps *p_hevc_sps; -+ struct v4l2_ctrl_hevc_pps *p_hevc_pps; -+ struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params; - struct v4l2_area *area; - void *p = ptr.p + idx * ctrl->elem_size; -+ unsigned int i; - - switch ((u32)ctrl->type) { - case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS: -@@ -1755,11 +1788,76 @@ static int std_validate_compound(const s - zero_padding(p_vp8_frame_header->entropy_header); - zero_padding(p_vp8_frame_header->coder_state); - break; -+ -+ case V4L2_CTRL_TYPE_HEVC_SPS: -+ p_hevc_sps = p; -+ -+ if (!(p_hevc_sps->flags & V4L2_HEVC_SPS_FLAG_PCM_ENABLED)) { -+ p_hevc_sps->pcm_sample_bit_depth_luma_minus1 = 0; -+ p_hevc_sps->pcm_sample_bit_depth_chroma_minus1 = 0; -+ p_hevc_sps->log2_min_pcm_luma_coding_block_size_minus3 = 0; -+ p_hevc_sps->log2_diff_max_min_pcm_luma_coding_block_size = 0; -+ } -+ -+ if (!(p_hevc_sps->flags & -+ V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT)) -+ p_hevc_sps->num_long_term_ref_pics_sps = 0; -+ break; -+ -+ case V4L2_CTRL_TYPE_HEVC_PPS: -+ p_hevc_pps = p; -+ -+ if (!(p_hevc_pps->flags & -+ V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED)) -+ p_hevc_pps->diff_cu_qp_delta_depth = 0; -+ -+ if (!(p_hevc_pps->flags & V4L2_HEVC_PPS_FLAG_TILES_ENABLED)) { -+ p_hevc_pps->num_tile_columns_minus1 = 0; -+ p_hevc_pps->num_tile_rows_minus1 = 0; -+ memset(&p_hevc_pps->column_width_minus1, 0, -+ sizeof(p_hevc_pps->column_width_minus1)); -+ memset(&p_hevc_pps->row_height_minus1, 0, -+ sizeof(p_hevc_pps->row_height_minus1)); -+ -+ p_hevc_pps->flags &= -+ ~V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED; -+ } -+ -+ if (p_hevc_pps->flags & -+ V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER) { -+ p_hevc_pps->pps_beta_offset_div2 = 0; -+ p_hevc_pps->pps_tc_offset_div2 = 0; -+ } -+ -+ zero_padding(*p_hevc_pps); -+ break; -+ -+ case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS: -+ p_hevc_slice_params = p; -+ -+ if (p_hevc_slice_params->num_active_dpb_entries > -+ V4L2_HEVC_DPB_ENTRIES_NUM_MAX) -+ return -EINVAL; -+ -+ zero_padding(p_hevc_slice_params->pred_weight_table); -+ -+ for (i = 0; i < p_hevc_slice_params->num_active_dpb_entries; -+ i++) { -+ struct v4l2_hevc_dpb_entry *dpb_entry = -+ &p_hevc_slice_params->dpb[i]; -+ -+ zero_padding(*dpb_entry); -+ } -+ -+ zero_padding(*p_hevc_slice_params); -+ break; -+ - case V4L2_CTRL_TYPE_AREA: - area = p; - if (!area->width || !area->height) - return -EINVAL; - break; -+ - default: - return -EINVAL; - } -@@ -2433,6 +2531,15 @@ static struct v4l2_ctrl *v4l2_ctrl_new(s - case V4L2_CTRL_TYPE_VP8_FRAME_HEADER: - elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header); - break; -+ case V4L2_CTRL_TYPE_HEVC_SPS: -+ elem_size = sizeof(struct v4l2_ctrl_hevc_sps); -+ break; -+ case V4L2_CTRL_TYPE_HEVC_PPS: -+ elem_size = sizeof(struct v4l2_ctrl_hevc_pps); -+ break; -+ case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS: -+ elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params); -+ break; - case V4L2_CTRL_TYPE_AREA: - elem_size = sizeof(struct v4l2_area); - break; ---- a/drivers/media/v4l2-core/v4l2-ioctl.c -+++ b/drivers/media/v4l2-core/v4l2-ioctl.c -@@ -1356,6 +1356,7 @@ static void v4l_fill_fmtdesc(struct v4l2 - case V4L2_PIX_FMT_VP8_FRAME: descr = "VP8 Frame"; break; - case V4L2_PIX_FMT_VP9: descr = "VP9"; break; - case V4L2_PIX_FMT_HEVC: descr = "HEVC"; break; /* aka H.265 */ -+ case V4L2_PIX_FMT_HEVC_SLICE: descr = "HEVC Parsed Slice Data"; break; - case V4L2_PIX_FMT_FWHT: descr = "FWHT"; break; /* used in vicodec */ - case V4L2_PIX_FMT_FWHT_STATELESS: descr = "FWHT Stateless"; break; /* used in vicodec */ - case V4L2_PIX_FMT_CPIA1: descr = "GSPCA CPiA YUV"; break; ---- /dev/null -+++ b/include/media/hevc-ctrls.h -@@ -0,0 +1,212 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * These are the HEVC state controls for use with stateless HEVC -+ * 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 _HEVC_CTRLS_H_ -+#define _HEVC_CTRLS_H_ -+ -+#include -+ -+/* The pixel format isn't stable at the moment and will likely be renamed. */ -+#define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */ -+ -+#define V4L2_CID_MPEG_VIDEO_HEVC_SPS (V4L2_CID_MPEG_BASE + 1008) -+#define V4L2_CID_MPEG_VIDEO_HEVC_PPS (V4L2_CID_MPEG_BASE + 1009) -+#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (V4L2_CID_MPEG_BASE + 1010) -+#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (V4L2_CID_MPEG_BASE + 1015) -+#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (V4L2_CID_MPEG_BASE + 1016) -+ -+/* enum v4l2_ctrl_type type values */ -+#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120 -+#define V4L2_CTRL_TYPE_HEVC_PPS 0x0121 -+#define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122 -+ -+enum v4l2_mpeg_video_hevc_decode_mode { -+ V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED, -+ V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED, -+}; -+ -+enum v4l2_mpeg_video_hevc_start_code { -+ V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE, -+ V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B, -+}; -+ -+#define V4L2_HEVC_SLICE_TYPE_B 0 -+#define V4L2_HEVC_SLICE_TYPE_P 1 -+#define V4L2_HEVC_SLICE_TYPE_I 2 -+ -+#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE (1ULL << 0) -+#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED (1ULL << 1) -+#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED (1ULL << 2) -+#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET (1ULL << 3) -+#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED (1ULL << 4) -+#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED (1ULL << 5) -+#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT (1ULL << 6) -+#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED (1ULL << 7) -+#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED (1ULL << 8) -+ -+/* The controls are not stable at the moment and will likely be reworked. */ -+struct v4l2_ctrl_hevc_sps { -+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */ -+ __u16 pic_width_in_luma_samples; -+ __u16 pic_height_in_luma_samples; -+ __u8 bit_depth_luma_minus8; -+ __u8 bit_depth_chroma_minus8; -+ __u8 log2_max_pic_order_cnt_lsb_minus4; -+ __u8 sps_max_dec_pic_buffering_minus1; -+ __u8 sps_max_num_reorder_pics; -+ __u8 sps_max_latency_increase_plus1; -+ __u8 log2_min_luma_coding_block_size_minus3; -+ __u8 log2_diff_max_min_luma_coding_block_size; -+ __u8 log2_min_luma_transform_block_size_minus2; -+ __u8 log2_diff_max_min_luma_transform_block_size; -+ __u8 max_transform_hierarchy_depth_inter; -+ __u8 max_transform_hierarchy_depth_intra; -+ __u8 pcm_sample_bit_depth_luma_minus1; -+ __u8 pcm_sample_bit_depth_chroma_minus1; -+ __u8 log2_min_pcm_luma_coding_block_size_minus3; -+ __u8 log2_diff_max_min_pcm_luma_coding_block_size; -+ __u8 num_short_term_ref_pic_sets; -+ __u8 num_long_term_ref_pics_sps; -+ __u8 chroma_format_idc; -+ -+ __u8 padding; -+ -+ __u64 flags; -+}; -+ -+#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT (1ULL << 0) -+#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT (1ULL << 1) -+#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED (1ULL << 2) -+#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT (1ULL << 3) -+#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED (1ULL << 4) -+#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED (1ULL << 5) -+#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED (1ULL << 6) -+#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT (1ULL << 7) -+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED (1ULL << 8) -+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED (1ULL << 9) -+#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED (1ULL << 10) -+#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED (1ULL << 11) -+#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED (1ULL << 12) -+#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED (1ULL << 13) -+#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14) -+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED (1ULL << 15) -+#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER (1ULL << 16) -+#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT (1ULL << 17) -+#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18) -+ -+struct v4l2_ctrl_hevc_pps { -+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */ -+ __u8 num_extra_slice_header_bits; -+ __s8 init_qp_minus26; -+ __u8 diff_cu_qp_delta_depth; -+ __s8 pps_cb_qp_offset; -+ __s8 pps_cr_qp_offset; -+ __u8 num_tile_columns_minus1; -+ __u8 num_tile_rows_minus1; -+ __u8 column_width_minus1[20]; -+ __u8 row_height_minus1[22]; -+ __s8 pps_beta_offset_div2; -+ __s8 pps_tc_offset_div2; -+ __u8 log2_parallel_merge_level_minus2; -+ -+ __u8 padding[4]; -+ __u64 flags; -+}; -+ -+#define V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_BEFORE 0x01 -+#define V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_AFTER 0x02 -+#define V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR 0x03 -+ -+#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX 16 -+ -+struct v4l2_hevc_dpb_entry { -+ __u64 timestamp; -+ __u8 rps; -+ __u8 field_pic; -+ __u16 pic_order_cnt[2]; -+ __u8 padding[2]; -+}; -+ -+struct v4l2_hevc_pred_weight_table { -+ __s8 delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; -+ __s8 luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; -+ __s8 delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]; -+ __s8 chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]; -+ -+ __s8 delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; -+ __s8 luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; -+ __s8 delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]; -+ __s8 chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]; -+ -+ __u8 padding[6]; -+ -+ __u8 luma_log2_weight_denom; -+ __s8 delta_chroma_log2_weight_denom; -+}; -+ -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA (1ULL << 0) -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA (1ULL << 1) -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED (1ULL << 2) -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO (1ULL << 3) -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT (1ULL << 4) -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0 (1ULL << 5) -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV (1ULL << 6) -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7) -+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8) -+ -+struct v4l2_ctrl_hevc_slice_params { -+ __u32 bit_size; -+ __u32 data_bit_offset; -+ -+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */ -+ __u8 nal_unit_type; -+ __u8 nuh_temporal_id_plus1; -+ -+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */ -+ __u8 slice_type; -+ __u8 colour_plane_id; -+ __u16 slice_pic_order_cnt; -+ __u8 num_ref_idx_l0_active_minus1; -+ __u8 num_ref_idx_l1_active_minus1; -+ __u8 collocated_ref_idx; -+ __u8 five_minus_max_num_merge_cand; -+ __s8 slice_qp_delta; -+ __s8 slice_cb_qp_offset; -+ __s8 slice_cr_qp_offset; -+ __s8 slice_act_y_qp_offset; -+ __s8 slice_act_cb_qp_offset; -+ __s8 slice_act_cr_qp_offset; -+ __s8 slice_beta_offset_div2; -+ __s8 slice_tc_offset_div2; -+ -+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */ -+ __u8 pic_struct; -+ -+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */ -+ __u8 num_active_dpb_entries; -+ __u8 ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; -+ __u8 ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; -+ -+ __u8 num_rps_poc_st_curr_before; -+ __u8 num_rps_poc_st_curr_after; -+ __u8 num_rps_poc_lt_curr; -+ -+ __u8 padding; -+ -+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */ -+ struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]; -+ -+ /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */ -+ struct v4l2_hevc_pred_weight_table pred_weight_table; -+ -+ __u64 flags; -+}; -+ -+#endif ---- a/include/media/v4l2-ctrls.h -+++ b/include/media/v4l2-ctrls.h -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - - /* forward references */ - struct file; -@@ -50,6 +51,9 @@ struct poll_table_struct; - * @p_h264_slice_params: Pointer to a struct v4l2_ctrl_h264_slice_params. - * @p_h264_decode_params: Pointer to a struct v4l2_ctrl_h264_decode_params. - * @p_vp8_frame_header: Pointer to a VP8 frame header structure. -+ * @p_hevc_sps: Pointer to an HEVC sequence parameter set structure. -+ * @p_hevc_pps: Pointer to an HEVC picture parameter set structure. -+ * @p_hevc_slice_params: Pointer to an HEVC slice parameters structure. - * @p_area: Pointer to an area. - * @p: Pointer to a compound value. - */ -@@ -69,6 +73,9 @@ union v4l2_ctrl_ptr { - struct v4l2_ctrl_h264_slice_params *p_h264_slice_params; - struct v4l2_ctrl_h264_decode_params *p_h264_decode_params; - struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header; -+ struct v4l2_ctrl_hevc_sps *p_hevc_sps; -+ struct v4l2_ctrl_hevc_pps *p_hevc_pps; -+ struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params; - struct v4l2_area *p_area; - void *p; - }; -- cgit v1.2.3