Message ID | 20220407152940.738159-10-benjamin.gaignard@collabora.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Move HEVC stateless controls out of staging | expand |
Le jeudi 07 avril 2022 à 17:29 +0200, Benjamin Gaignard a écrit : > Make explicit that V4L2_CID_STATELESS_HEVC_SLICE_PARAMS control is > a dynamic array control type. > Some drivers may be able to receive multiple slices in one control > to improve decoding performance. > > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > --- > Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 2 ++ > include/media/hevc-ctrls.h | 3 +++ > 2 files changed, 5 insertions(+) > > diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst > index 7fcc6c2bac4c..1aaf3b84b584 100644 > --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst > +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst > @@ -2964,6 +2964,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - > 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. > + This control is a dynamically sized 1-dimensional array, > + V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it. > > .. c:type:: v4l2_ctrl_hevc_slice_params > > diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h > index 96a9b71d1def..28049e1a8a07 100644 > --- a/include/media/hevc-ctrls.h > +++ b/include/media/hevc-ctrls.h > @@ -314,6 +314,9 @@ struct v4l2_hevc_pred_weight_table { > /** > * v4l2_ctrl_hevc_slice_params - HEVC slice parameters > * > + * This control is a dynamically sized 1-dimensional array, > + * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it. > + * I'm not sure about this comment, but I'm sure you forgot: --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c @@ -1505,6 +1505,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, break; case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS: *type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS; + *flags |= V4L2_CTRL_FLAG_DYNAMIC_ARRAY; break; case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX: *type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX; Also, in AV1 we have V4L2_AV1_MAX_TILE_COUNT, which can be used in cfg.dims, something the driver will actually set. We could have #define V4L2_HEVC_MAX_TILE_COUNT 600 And drives can set: .dims = { V4L2_HEVC_MAX_TILE_COUNT }, In the control config. > * @bit_size: size (in bits) of the current slice data > * @data_bit_offset: offset (in bits) to the video data in the current slice data > * @nal_unit_type: specifies the coding type of the slice (B, P or I)
Le 08/04/2022 à 20:53, Nicolas Dufresne a écrit : > Le jeudi 07 avril 2022 à 17:29 +0200, Benjamin Gaignard a écrit : >> Make explicit that V4L2_CID_STATELESS_HEVC_SLICE_PARAMS control is >> a dynamic array control type. >> Some drivers may be able to receive multiple slices in one control >> to improve decoding performance. >> >> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> >> --- >> Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 2 ++ >> include/media/hevc-ctrls.h | 3 +++ >> 2 files changed, 5 insertions(+) >> >> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> index 7fcc6c2bac4c..1aaf3b84b584 100644 >> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst >> @@ -2964,6 +2964,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - >> 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. >> + This control is a dynamically sized 1-dimensional array, >> + V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it. >> >> .. c:type:: v4l2_ctrl_hevc_slice_params >> >> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h >> index 96a9b71d1def..28049e1a8a07 100644 >> --- a/include/media/hevc-ctrls.h >> +++ b/include/media/hevc-ctrls.h >> @@ -314,6 +314,9 @@ struct v4l2_hevc_pred_weight_table { >> /** >> * v4l2_ctrl_hevc_slice_params - HEVC slice parameters >> * >> + * This control is a dynamically sized 1-dimensional array, >> + * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it. >> + * > I'm not sure about this comment, but I'm sure you forgot: > > > --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c > +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c > @@ -1505,6 +1505,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum > v4l2_ctrl_type *type, > break; > case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS: > *type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS; > + *flags |= V4L2_CTRL_FLAG_DYNAMIC_ARRAY; > break; > case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX: > *type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX; > > Also, in AV1 we have V4L2_AV1_MAX_TILE_COUNT, which can be used in cfg.dims, > something the driver will actually set. We could have > > #define V4L2_HEVC_MAX_TILE_COUNT 600 > > And drives can set: > > .dims = { V4L2_HEVC_MAX_TILE_COUNT }, > > In the control config. Ok that will be in v6 > >> * @bit_size: size (in bits) of the current slice data >> * @data_bit_offset: offset (in bits) to the video data in the current slice data >> * @nal_unit_type: specifies the coding type of the slice (B, P or I)
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst index 7fcc6c2bac4c..1aaf3b84b584 100644 --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst @@ -2964,6 +2964,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field - 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. + This control is a dynamically sized 1-dimensional array, + V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it. .. c:type:: v4l2_ctrl_hevc_slice_params diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h index 96a9b71d1def..28049e1a8a07 100644 --- a/include/media/hevc-ctrls.h +++ b/include/media/hevc-ctrls.h @@ -314,6 +314,9 @@ struct v4l2_hevc_pred_weight_table { /** * v4l2_ctrl_hevc_slice_params - HEVC slice parameters * + * This control is a dynamically sized 1-dimensional array, + * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it. + * * @bit_size: size (in bits) of the current slice data * @data_bit_offset: offset (in bits) to the video data in the current slice data * @nal_unit_type: specifies the coding type of the slice (B, P or I)
Make explicit that V4L2_CID_STATELESS_HEVC_SLICE_PARAMS control is a dynamic array control type. Some drivers may be able to receive multiple slices in one control to improve decoding performance. Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> --- Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 2 ++ include/media/hevc-ctrls.h | 3 +++ 2 files changed, 5 insertions(+)