Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
Hi, On 07/17/2017 02:18 PM, Smitha T Murthy wrote: > On Fri, 2017-07-07 at 17:59 +0300, Stanimir Varbanov wrote: >> Hi, >> >> On 06/19/2017 08:10 AM, Smitha T Murthy wrote: >>> Added V4l2 controls for HEVC encoder >>> >>> Signed-off-by: Smitha T Murthy >>> --- >>> Documentation/media/uapi/v4l/extended-controls.rst | 364 >>> + >>> 1 file changed, 364 insertions(+) >>> >> >>> +MFC 10.10 MPEG Controls >>> +--- >>> + >>> +The following MPEG class controls deal with MPEG decoding and encoding >>> +settings that are specific to the Multi Format Codec 10.10 device present >>> +in the S5P and Exynos family of SoCs by Samsung. >>> + >>> + >>> +.. _mfc1010-control-id: >>> + >>> +MFC 10.10 Control IDs >>> +^ >>> + >>> +``V4L2_CID_MPEG_MFC10_VIDEO_HEVC_REF_NUMBER_FOR_PFRAMES (integer)`` >>> +Selects number of P reference pictures required for HEVC encoder. >>> +P-Frame can use 1 or 2 frames for reference. >>> + >>> +``V4L2_CID_MPEG_MFC10_VIDEO_HEVC_PREPEND_SPSPPS_TO_IDR (integer)`` >>> +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. >>> + >> >> I'm not sure those two should be driver specific, have to check does >> venus driver has similar controls. >> > Yes please check and let me know if you have similar controls, I will > move it out. The venus encoder also has such a control so you can move it out of MFC specific controls. Also I think this control should be valid for every codec which supports IDR, i.e. H264, so I think you could drop _HEVC_from the control name. Do you plan to resend the patchset soon so that it could be applied for 4.14? If you haven't time let me know I can help with the generic HEVC part of the patchset. -- regards, Stan
Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
On Thu, 2017-07-20 at 18:46 +0300, Stanimir Varbanov wrote: > Hi, > > >>> + > >>> +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN`` > >>> + - Main profile. > >> > >> MAIN10? > >> > > No just MAIN. > > I haven't because the MFC does not supported it? > > If so, I think we have to add MAIN10 for completeness and because other > drivers could have support for it. > MFC supports Main and Main Still profile for encoder. Main, Main10, Main Still for decoder. I will add both Main and Main10 in the next patch series. Thank you for the review. Regards, Smitha
Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
On Thu, 2017-07-20 at 16:50 +0200, Hans Verkuil wrote: > On 19/06/17 07:10, Smitha T Murthy wrote: > > Added V4l2 controls for HEVC encoder > > > > Signed-off-by: Smitha T Murthy > > --- > > Documentation/media/uapi/v4l/extended-controls.rst | 364 > > + > > 1 file changed, 364 insertions(+) > > > > diff --git a/Documentation/media/uapi/v4l/extended-controls.rst > > b/Documentation/media/uapi/v4l/extended-controls.rst > > index abb1057..7767c70 100644 > > --- a/Documentation/media/uapi/v4l/extended-controls.rst > > +++ b/Documentation/media/uapi/v4l/extended-controls.rst > > @@ -1960,6 +1960,370 @@ enum v4l2_vp8_golden_frame_sel - > > 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3. > > > > > > +High Efficiency Video Coding (HEVC/H.265) Control Reference > > +--- > > + > > +The HEVC/H.265 controls include controls for encoding parameters of > > HEVC/H.265 > > +video codec. > > + > > + > > +.. _hevc-control-id: > > + > > +HEVC/H.265 Control IDs > > +^^ > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP (integer)`` > > +Minimum quantization parameter for HEVC. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP (integer)`` > > +Maximum quantization parameter for HEVC. > > It's a bit ambiguous. Are these supposed to be read-only parameters? > Normally min-max is already implied in the control range, so this is a > bit odd. Perhaps it is clear for people who know HEVC, but I'm not > quite sure what to make of it. > These controls are used to set the QP bound for encoding. This control is present for all other codecs as well. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP (integer)`` > > +Quantization parameter for an I frame for HEVC. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP (integer)`` > > +Quantization parameter for a P frame for HEVC. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP (integer)`` > > +Quantization parameter for a B frame for HEVC. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP (boolean)`` > > +HIERARCHICAL_QP allows host to specify the quantization parameter > > values > > +for each temporal layer through HIERARCHICAL_QP_LAYER. This is valid > > only > > +if HIERARCHICAL_CODING_LAYER is greater than 1. Setting the control > > value > > +to 1 enables setting of the QP values for the layers. > > + > > +.. _v4l2-hevc-hier-coding-type: > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE`` > > +(enum) > > + > > +enum v4l2_mpeg_video_hevc_hier_coding_type - > > +Selects the hierarchical coding type for encoding. Possible values are: > > + > > +.. raw:: latex > > + > > +\begin{adjustbox}{width=\columnwidth} > > + > > +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| > > + > > +.. flat-table:: > > +:header-rows: 0 > > +:stub-columns: 0 > > + > > +* - ``V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B`` > > + - Use the B frame for hierarchical coding. > > +* - ``V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P`` > > + - Use the P frame for hierarchical coding. > > + > > +.. raw:: latex > > + > > +\end{adjustbox} > > + > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (integer)`` > > +Selects the hierarchical coding layer. In normal encoding > > +(non-hierarchial coding), it should be zero. Possible values are 0 ~ 6. > > +0 indicates HIERARCHICAL CODING LAYER 0, 1 indicates HIERARCHICAL > > CODING > > +LAYER 1 and so on. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER_QP (integer)`` > > +Indicates the hierarchical coding layer quantization parameter. > > +For HEVC it can have a value of 0-51. Hence in the control value passed > > +the LSB 16 bits will indicate the quantization parameter. The MSB 16 > > bit > > +will pass the layer(0-6) it is meant for. > > This is ugly. Why not make this an array control? This really is an array of > 7 values, right? An alternative is to split this in 7 controls just as you did > with V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L?_BR. > > The way it is now doesn't work either since > G_CTRL(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER_QP) > would just return the QP for whatever was the last layer you set it for and > you can't > query it for another layer. > Ok I will add this as an array control. > > + > > +.. _v4l2-hevc-profile: > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_PROFILE`` > > +(enum) > > + > > +enum v4l2_mpeg_video_hevc_profile - > > +Select the desired profile for HEVC encoder. > > + > > +.. raw:: latex > > + > > +\begin{adjustbox}{width=\columnwidth} > > + > > +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| > > + > > +.. flat-table:: > > +:header-rows: 0 > > +:stub-columns: 0 > > + > > +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN`` > > + - Main profile. > > +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE`` > > + - Main still picture profile. > > + > > +.. raw:: latex > > + > > +\end{adjustbox
Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
Hi, >>> + >>> +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN`` >>> + - Main profile. >> >> MAIN10? >> > No just MAIN. I haven't because the MFC does not supported it? If so, I think we have to add MAIN10 for completeness and because other drivers could have support for it. -- regards, Stan
Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
On 19/06/17 07:10, Smitha T Murthy wrote: > Added V4l2 controls for HEVC encoder > > Signed-off-by: Smitha T Murthy > --- > Documentation/media/uapi/v4l/extended-controls.rst | 364 > + > 1 file changed, 364 insertions(+) > > diff --git a/Documentation/media/uapi/v4l/extended-controls.rst > b/Documentation/media/uapi/v4l/extended-controls.rst > index abb1057..7767c70 100644 > --- a/Documentation/media/uapi/v4l/extended-controls.rst > +++ b/Documentation/media/uapi/v4l/extended-controls.rst > @@ -1960,6 +1960,370 @@ enum v4l2_vp8_golden_frame_sel - > 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3. > > > +High Efficiency Video Coding (HEVC/H.265) Control Reference > +--- > + > +The HEVC/H.265 controls include controls for encoding parameters of > HEVC/H.265 > +video codec. > + > + > +.. _hevc-control-id: > + > +HEVC/H.265 Control IDs > +^^ > + > +``V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP (integer)`` > +Minimum quantization parameter for HEVC. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP (integer)`` > +Maximum quantization parameter for HEVC. It's a bit ambiguous. Are these supposed to be read-only parameters? Normally min-max is already implied in the control range, so this is a bit odd. Perhaps it is clear for people who know HEVC, but I'm not quite sure what to make of it. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP (integer)`` > +Quantization parameter for an I frame for HEVC. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP (integer)`` > +Quantization parameter for a P frame for HEVC. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP (integer)`` > +Quantization parameter for a B frame for HEVC. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP (boolean)`` > +HIERARCHICAL_QP allows host to specify the quantization parameter values > +for each temporal layer through HIERARCHICAL_QP_LAYER. This is valid only > +if HIERARCHICAL_CODING_LAYER is greater than 1. Setting the control value > +to 1 enables setting of the QP values for the layers. > + > +.. _v4l2-hevc-hier-coding-type: > + > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE`` > +(enum) > + > +enum v4l2_mpeg_video_hevc_hier_coding_type - > +Selects the hierarchical coding type for encoding. Possible values are: > + > +.. raw:: latex > + > +\begin{adjustbox}{width=\columnwidth} > + > +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| > + > +.. flat-table:: > +:header-rows: 0 > +:stub-columns: 0 > + > +* - ``V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B`` > + - Use the B frame for hierarchical coding. > +* - ``V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P`` > + - Use the P frame for hierarchical coding. > + > +.. raw:: latex > + > +\end{adjustbox} > + > + > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (integer)`` > +Selects the hierarchical coding layer. In normal encoding > +(non-hierarchial coding), it should be zero. Possible values are 0 ~ 6. > +0 indicates HIERARCHICAL CODING LAYER 0, 1 indicates HIERARCHICAL CODING > +LAYER 1 and so on. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER_QP (integer)`` > +Indicates the hierarchical coding layer quantization parameter. > +For HEVC it can have a value of 0-51. Hence in the control value passed > +the LSB 16 bits will indicate the quantization parameter. The MSB 16 bit > +will pass the layer(0-6) it is meant for. This is ugly. Why not make this an array control? This really is an array of 7 values, right? An alternative is to split this in 7 controls just as you did with V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L?_BR. The way it is now doesn't work either since G_CTRL(V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER_QP) would just return the QP for whatever was the last layer you set it for and you can't query it for another layer. > + > +.. _v4l2-hevc-profile: > + > +``V4L2_CID_MPEG_VIDEO_HEVC_PROFILE`` > +(enum) > + > +enum v4l2_mpeg_video_hevc_profile - > +Select the desired profile for HEVC encoder. > + > +.. raw:: latex > + > +\begin{adjustbox}{width=\columnwidth} > + > +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| > + > +.. flat-table:: > +:header-rows: 0 > +:stub-columns: 0 > + > +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN`` > + - Main profile. > +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE`` > + - Main still picture profile. > + > +.. raw:: latex > + > +\end{adjustbox} > + > + > +.. _v4l2-hevc-level: > + > +``V4L2_CID_MPEG_VIDEO_HEVC_LEVEL`` > +(enum) > + > +enum v4l2_mpeg_video_hevc_level - > +Selects the desired level for HEVC encoder. > + > +.. raw:: latex > + > +\begin{adjustbox}{width=\columnwidth} > + > +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| > + > +.. flat-table:: > +:header-rows: 0 > +:stub-columns: 0 > + > +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_1`` > + - Level 1.0 > +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_2`` > + - Level 2
Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
On Fri, 2017-07-07 at 17:59 +0300, Stanimir Varbanov wrote: > Hi, > > On 06/19/2017 08:10 AM, Smitha T Murthy wrote: > > Added V4l2 controls for HEVC encoder > > > > Signed-off-by: Smitha T Murthy > > --- > > Documentation/media/uapi/v4l/extended-controls.rst | 364 > > + > > 1 file changed, 364 insertions(+) > > > > diff --git a/Documentation/media/uapi/v4l/extended-controls.rst > > b/Documentation/media/uapi/v4l/extended-controls.rst > > index abb1057..7767c70 100644 > > --- a/Documentation/media/uapi/v4l/extended-controls.rst > > +++ b/Documentation/media/uapi/v4l/extended-controls.rst > > @@ -1960,6 +1960,370 @@ enum v4l2_vp8_golden_frame_sel - > > 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3. > > > > > > > > > +``V4L2_CID_MPEG_VIDEO_HEVC_PROFILE`` > > +(enum) > > + > > +enum v4l2_mpeg_video_hevc_profile - > > +Select the desired profile for HEVC encoder. > > + > > +.. raw:: latex > > + > > +\begin{adjustbox}{width=\columnwidth} > > + > > +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| > > + > > +.. flat-table:: > > +:header-rows: 0 > > +:stub-columns: 0 > > + > > +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN`` > > + - Main profile. > > MAIN10? > No just MAIN. > > +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE`` > > + - Main still picture profile. > > + > > +.. raw:: latex > > + > > +\end{adjustbox} > > + > > + > > > > > +MFC 10.10 MPEG Controls > > +--- > > + > > +The following MPEG class controls deal with MPEG decoding and encoding > > +settings that are specific to the Multi Format Codec 10.10 device present > > +in the S5P and Exynos family of SoCs by Samsung. > > + > > + > > +.. _mfc1010-control-id: > > + > > +MFC 10.10 Control IDs > > +^ > > + > > +``V4L2_CID_MPEG_MFC10_VIDEO_HEVC_REF_NUMBER_FOR_PFRAMES (integer)`` > > +Selects number of P reference pictures required for HEVC encoder. > > +P-Frame can use 1 or 2 frames for reference. > > + > > +``V4L2_CID_MPEG_MFC10_VIDEO_HEVC_PREPEND_SPSPPS_TO_IDR (integer)`` > > +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. > > + > > I'm not sure those two should be driver specific, have to check does > venus driver has similar controls. > Yes please check and let me know if you have similar controls, I will move it out. > > + > > .. _camera-controls: > > > > Camera Control Reference > > >
Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
Hi, On 06/19/2017 08:10 AM, Smitha T Murthy wrote: > Added V4l2 controls for HEVC encoder > > Signed-off-by: Smitha T Murthy > --- > Documentation/media/uapi/v4l/extended-controls.rst | 364 > + > 1 file changed, 364 insertions(+) > > diff --git a/Documentation/media/uapi/v4l/extended-controls.rst > b/Documentation/media/uapi/v4l/extended-controls.rst > index abb1057..7767c70 100644 > --- a/Documentation/media/uapi/v4l/extended-controls.rst > +++ b/Documentation/media/uapi/v4l/extended-controls.rst > @@ -1960,6 +1960,370 @@ enum v4l2_vp8_golden_frame_sel - > 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3. > > > +``V4L2_CID_MPEG_VIDEO_HEVC_PROFILE`` > +(enum) > + > +enum v4l2_mpeg_video_hevc_profile - > +Select the desired profile for HEVC encoder. > + > +.. raw:: latex > + > +\begin{adjustbox}{width=\columnwidth} > + > +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| > + > +.. flat-table:: > +:header-rows: 0 > +:stub-columns: 0 > + > +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN`` > + - Main profile. MAIN10? > +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE`` > + - Main still picture profile. > + > +.. raw:: latex > + > +\end{adjustbox} > + > + > +MFC 10.10 MPEG Controls > +--- > + > +The following MPEG class controls deal with MPEG decoding and encoding > +settings that are specific to the Multi Format Codec 10.10 device present > +in the S5P and Exynos family of SoCs by Samsung. > + > + > +.. _mfc1010-control-id: > + > +MFC 10.10 Control IDs > +^ > + > +``V4L2_CID_MPEG_MFC10_VIDEO_HEVC_REF_NUMBER_FOR_PFRAMES (integer)`` > +Selects number of P reference pictures required for HEVC encoder. > +P-Frame can use 1 or 2 frames for reference. > + > +``V4L2_CID_MPEG_MFC10_VIDEO_HEVC_PREPEND_SPSPPS_TO_IDR (integer)`` > +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. > + I'm not sure those two should be driver specific, have to check does venus driver has similar controls. > + > .. _camera-controls: > > Camera Control Reference > -- regards, Stan
Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
On Wed, 2017-06-28 at 22:04 +0200, Kamil Debski wrote: > Hi, > > Please find my comments inline. > > On 19 June 2017 at 07:10, Smitha T Murthy wrote: > > Added V4l2 controls for HEVC encoder > > > > Signed-off-by: Smitha T Murthy > > --- > > Documentation/media/uapi/v4l/extended-controls.rst | 364 > > + > > 1 file changed, 364 insertions(+) > > > > diff --git a/Documentation/media/uapi/v4l/extended-controls.rst > > b/Documentation/media/uapi/v4l/extended-controls.rst > > index abb1057..7767c70 100644 > > --- a/Documentation/media/uapi/v4l/extended-controls.rst > > +++ b/Documentation/media/uapi/v4l/extended-controls.rst > > @@ -1960,6 +1960,370 @@ enum v4l2_vp8_golden_frame_sel - > > 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3. > > > > > > [snip] > > > + > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (integer)`` > > +Selects the hierarchical coding layer. In normal encoding > > +(non-hierarchial coding), it should be zero. Possible values are 0 ~ 6. > > +0 indicates HIERARCHICAL CODING LAYER 0, 1 indicates HIERARCHICAL > > CODING > > +LAYER 1 and so on. > > I would like the above to be more consistent. If HIER is in the name > then HIER in the description should be used as well. Aside from that, > I would recommend using full HIERARCHICAL instead of HIER in the name > of the control. Why? Because it is HIERARCHICAL in controls already > present in V4L2, such as > V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP. > I had changed it from HIERARCHICAL to HIER as per suggestion by Sylwester Nawrocki. Here https://patchwork.kernel.org/patch/9666129/ > [snip] > > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_LF (boolean)`` > > +Indicates loop filtering. Control value 1 indicates loop filtering > > +is enabled and when set to 0 indicates loop filtering is disabled. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_LF_SLICE_BOUNDARY (boolean)`` > > +Selects whether to apply the loop filter across the slice boundary or > > not. > > +If the value is 0, loop filter will not be applied across the slice > > boundary. > > +If the value is 1, loop filter will be applied across the slice > > boundary. > > Just a thought. Pretty much the same fucntionality is achieved via the > V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE control. It's an enum having > three states: enabled, disabled and disabled at slice boundary. Maybe > a single control could be introduced? With another legacy define for > API compatibility. Also, I don't like that controls are not consistent > between H264 and HEVC. I would opt for the enum option. > I will add enum options for the above control. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2 (integer)`` > > +Selects HEVC loop filter beta offset. The valid range is [-6, +6]. > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2 (integer)`` > > +Selects HEVC loop filter tc offset. The valid range is [-6, +6]. > > + > > +.. _v4l2-hevc-refresh-type: > > + > > +``V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE`` > > +(enum) > > + > [snip] > > Best wishes, > Kamil > > Thank you for the review. Regards, Smitha
Re: [Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
Hi, Please find my comments inline. On 19 June 2017 at 07:10, Smitha T Murthy wrote: > Added V4l2 controls for HEVC encoder > > Signed-off-by: Smitha T Murthy > --- > Documentation/media/uapi/v4l/extended-controls.rst | 364 > + > 1 file changed, 364 insertions(+) > > diff --git a/Documentation/media/uapi/v4l/extended-controls.rst > b/Documentation/media/uapi/v4l/extended-controls.rst > index abb1057..7767c70 100644 > --- a/Documentation/media/uapi/v4l/extended-controls.rst > +++ b/Documentation/media/uapi/v4l/extended-controls.rst > @@ -1960,6 +1960,370 @@ enum v4l2_vp8_golden_frame_sel - > 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3. > > [snip] > + > + > +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (integer)`` > +Selects the hierarchical coding layer. In normal encoding > +(non-hierarchial coding), it should be zero. Possible values are 0 ~ 6. > +0 indicates HIERARCHICAL CODING LAYER 0, 1 indicates HIERARCHICAL CODING > +LAYER 1 and so on. I would like the above to be more consistent. If HIER is in the name then HIER in the description should be used as well. Aside from that, I would recommend using full HIERARCHICAL instead of HIER in the name of the control. Why? Because it is HIERARCHICAL in controls already present in V4L2, such as V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP. [snip] > + > +``V4L2_CID_MPEG_VIDEO_HEVC_LF (boolean)`` > +Indicates loop filtering. Control value 1 indicates loop filtering > +is enabled and when set to 0 indicates loop filtering is disabled. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_LF_SLICE_BOUNDARY (boolean)`` > +Selects whether to apply the loop filter across the slice boundary or > not. > +If the value is 0, loop filter will not be applied across the slice > boundary. > +If the value is 1, loop filter will be applied across the slice boundary. Just a thought. Pretty much the same fucntionality is achieved via the V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE control. It's an enum having three states: enabled, disabled and disabled at slice boundary. Maybe a single control could be introduced? With another legacy define for API compatibility. Also, I don't like that controls are not consistent between H264 and HEVC. I would opt for the enum option. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2 (integer)`` > +Selects HEVC loop filter beta offset. The valid range is [-6, +6]. > + > +``V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2 (integer)`` > +Selects HEVC loop filter tc offset. The valid range is [-6, +6]. > + > +.. _v4l2-hevc-refresh-type: > + > +``V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE`` > +(enum) > + [snip] Best wishes, Kamil
[Patch v5 12/12] Documention: v4l: Documentation for HEVC CIDs
Added V4l2 controls for HEVC encoder Signed-off-by: Smitha T Murthy --- Documentation/media/uapi/v4l/extended-controls.rst | 364 + 1 file changed, 364 insertions(+) diff --git a/Documentation/media/uapi/v4l/extended-controls.rst b/Documentation/media/uapi/v4l/extended-controls.rst index abb1057..7767c70 100644 --- a/Documentation/media/uapi/v4l/extended-controls.rst +++ b/Documentation/media/uapi/v4l/extended-controls.rst @@ -1960,6 +1960,370 @@ enum v4l2_vp8_golden_frame_sel - 1, 2 and 3 corresponding to encoder profiles 0, 1, 2 and 3. +High Efficiency Video Coding (HEVC/H.265) Control Reference +--- + +The HEVC/H.265 controls include controls for encoding parameters of HEVC/H.265 +video codec. + + +.. _hevc-control-id: + +HEVC/H.265 Control IDs +^^ + +``V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP (integer)`` +Minimum quantization parameter for HEVC. + +``V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP (integer)`` +Maximum quantization parameter for HEVC. + +``V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP (integer)`` +Quantization parameter for an I frame for HEVC. + +``V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP (integer)`` +Quantization parameter for a P frame for HEVC. + +``V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP (integer)`` +Quantization parameter for a B frame for HEVC. + +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP (boolean)`` +HIERARCHICAL_QP allows host to specify the quantization parameter values +for each temporal layer through HIERARCHICAL_QP_LAYER. This is valid only +if HIERARCHICAL_CODING_LAYER is greater than 1. Setting the control value +to 1 enables setting of the QP values for the layers. + +.. _v4l2-hevc-hier-coding-type: + +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE`` +(enum) + +enum v4l2_mpeg_video_hevc_hier_coding_type - +Selects the hierarchical coding type for encoding. Possible values are: + +.. raw:: latex + +\begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| + +.. flat-table:: +:header-rows: 0 +:stub-columns: 0 + +* - ``V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B`` + - Use the B frame for hierarchical coding. +* - ``V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P`` + - Use the P frame for hierarchical coding. + +.. raw:: latex + +\end{adjustbox} + + +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (integer)`` +Selects the hierarchical coding layer. In normal encoding +(non-hierarchial coding), it should be zero. Possible values are 0 ~ 6. +0 indicates HIERARCHICAL CODING LAYER 0, 1 indicates HIERARCHICAL CODING +LAYER 1 and so on. + +``V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER_QP (integer)`` +Indicates the hierarchical coding layer quantization parameter. +For HEVC it can have a value of 0-51. Hence in the control value passed +the LSB 16 bits will indicate the quantization parameter. The MSB 16 bit +will pass the layer(0-6) it is meant for. + +.. _v4l2-hevc-profile: + +``V4L2_CID_MPEG_VIDEO_HEVC_PROFILE`` +(enum) + +enum v4l2_mpeg_video_hevc_profile - +Select the desired profile for HEVC encoder. + +.. raw:: latex + +\begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| + +.. flat-table:: +:header-rows: 0 +:stub-columns: 0 + +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN`` + - Main profile. +* - ``V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE`` + - Main still picture profile. + +.. raw:: latex + +\end{adjustbox} + + +.. _v4l2-hevc-level: + +``V4L2_CID_MPEG_VIDEO_HEVC_LEVEL`` +(enum) + +enum v4l2_mpeg_video_hevc_level - +Selects the desired level for HEVC encoder. + +.. raw:: latex + +\begin{adjustbox}{width=\columnwidth} + +.. tabularcolumns:: |p{11.0cm}|p{10.0cm}| + +.. flat-table:: +:header-rows: 0 +:stub-columns: 0 + +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_1`` + - Level 1.0 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_2`` + - Level 2.0 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1`` + - Level 2.1 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_3`` + - Level 3.0 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1`` + - Level 3.1 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_4`` + - Level 4.0 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1`` + - Level 4.1 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_5`` + - Level 5.0 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1`` + - Level 5.1 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2`` + - Level 5.2 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_6`` + - Level 6.0 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1`` + - Level 6.1 +* - ``V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2`` + - Level 6.2 + +.. raw:: latex + +\end{adjustbox} + + +``V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION (integer)`` +Indicates the number of evenly spaced subintervals, called ticks, within +one second. This is a 16bit unsigned integer and has a maximum value up to +0x. + +.. _v4l2-hevc-tier-