From: dikshita@codeaurora.org
To: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-arm-msm@vger.kernel.org, mchehab@kernel.org,
nicolas@ndufresne.ca, majja@codeaurora.org,
stanimir.varbanov@linaro.org, vgarodia@codeaurora.org
Subject: Re: [PATCH v2] media: v4l2-ctrl: add control for long term reference.
Date: Thu, 27 Aug 2020 12:29:09 +0530 [thread overview]
Message-ID: <b6c14a61a5a63b68a07a539f39b88477@codeaurora.org> (raw)
In-Reply-To: <506c9e88-e54b-2534-0df9-f7855456dcd8@xs4all.nl>
Hi Hans,
Thanks for your comments.
On 2020-08-25 15:34, Hans Verkuil wrote:
> On 14/08/2020 07:29, Dikshita Agarwal wrote:
>> LTR (Long Term Reference) frames are the frames that are encoded
>> sometime in the past and stored in the DPB buffer list to be used
>> as reference to encode future frames.
>> This change adds controls to enable this feature.
>>
>> Signed-off-by: Dikshita Agarwal <dikshita@codeaurora.org>
>> ---
>> .../userspace-api/media/v4l/ext-ctrls-codec.rst | 23
>> ++++++++++++++++++++++
>> drivers/media/v4l2-core/v4l2-ctrls.c | 6 ++++++
>> include/uapi/linux/v4l2-controls.h | 4 ++++
>> 3 files changed, 33 insertions(+)
>>
>> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> index d0d506a..6d1b005 100644
>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> @@ -4272,3 +4272,26 @@ enum v4l2_mpeg_video_hevc_size_of_length_field
>> -
>> - 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.
>> +
>> +``V4L2_CID_MPEG_VIDEO_LTRCOUNT (enum)``
>
> I prefer _LTR_COUNT (same for the other control defines).
>
> I assume 'enum' is a mistake? This should be 'integer', right?
Right, I will correct it at all the places.
>
>> + Specifies the number of Long Term Reference frames encoder needs to
>> + generate or keep.
>> + This control is used to query or configure the number of Long Term
>> + Reference frames.
>
> Add something like: "Applicable to the H264 and HEVC encoder."
Sure.
>
>> +
>> +``V4L2_CID_MPEG_VIDEO_MARKLTRFRAME (enum)``
>> + This control is used to mark current frame as Long Term Reference
>> + frame.
>
> enum -> integer
> _MARK_LTR_FRAME
>
> How about renaming this to: "_FRAME_LTR_INDEX"?
You are suggesting to rename it to V4L2_CID_MPEG_VIDEO_MARK_LTR_FRAME or
V4L2_CID_MPEG_VIDEO_MARK_FRAME_LTR_INDEX ?
>
> I would also suggest having the range as 0..LTR_COUNT where 0 means
> that
> this is not a LTR frame. An alternative is to have two controls: one
> boolean
> that determines if the frame is a LTR frame or not, and one control
> containing
> the LTR index.
>
> Is the LTR index 0 or 1 based according to the standard? I think that
> if it is
> 1 based you can use 0 to mean 'not an LTR frame'. If it is 0 based in
> the standard,
> then having two controls might be better.
>
> A third alternative might be to use -1 as the value to indicate that it
> is not
> an LTR frame, but it feels hackish. I'm not sure yet.
>
Could you please help me to understand how this info will be helpful?
This control won't be set by client for every frame. So a frame for
which this control is not set
is not a LTR frame and a frame for which this control is set is a LTR
frame and will be marked with
LTR index ranging from 0 to LTR_COUNT-1 (range is according to standard)
>> + this provides a Long Term Reference index that ranges from 0
>> + to LTR count-1 and then the particular frame will be marked with
>> that
>> + Long Term Reference index.
>
> Add something like: "Applicable to the H264 and HEVC encoder."
sure, will add.
>
> This only makes sense when used with requests, right? Otherwise you
> cannot
> reliably associate this control with a frame. That should be mentioned
> here.
Sure, will add.
>
>> +
>> +``V4L2_CID_MPEG_VIDEO_USELTRFRAME (enum)``
>
> enum -> bitmask
> _USE_LTR_FRAMES
Will correct this in next patch.
>
>> + Specifies the Long Term Reference frame(s) to be used for encoding
>> + the current frame.
>> + This provides a bitmask which consists of bits [0, 15]. A total of N
>> + LSB bits of this field are valid, where N is the maximum number of
>> + Long Term Reference frames supported.
>> + All the other bits are invalid and should be rejected.
>> + The LSB corresponds to the Long Term Reference index 0. Bit N-1 from
>> + the LSB corresponds to the Long Term Reference index max LTR
>> count-1.
>
> Add something like: "Applicable to the H264 and HEVC encoder."
>
> This too only makes sense when using requests, correct? That should be
> mentioned
> here.
Sure, will do.
>
> I assume that this must be set to 0 for LTR frames? Or at least this
> control will
> be ignored for LTR frames.
Yes, frames marked as LTR frames will not be encoded by using any other
LTR frame as a reference.
So this control won't be set for LTR frames.
This will be set only for the frames which needs to be encoded by using
an LTR frame as a reference.
>
>> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c
>> b/drivers/media/v4l2-core/v4l2-ctrls.c
>> index 3f3fbcd..3138c72 100644
>> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
>> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
>> @@ -991,6 +991,9 @@ const char *v4l2_ctrl_get_name(u32 id)
>> 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";
>> + case V4L2_CID_MPEG_VIDEO_LTRCOUNT: return "LTR Count";
>> + case V4L2_CID_MPEG_VIDEO_MARKLTRFRAME: return "Mark LTR";
>> + case V4L2_CID_MPEG_VIDEO_USELTRFRAME: return "Use LTR";
>
> "Use LTR Frames"
>
>>
>> /* CAMERA controls */
>> /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> @@ -1224,6 +1227,9 @@ void v4l2_ctrl_fill(u32 id, const char **name,
>> enum v4l2_ctrl_type *type,
>> break;
>> case V4L2_CID_MPEG_VIDEO_MV_H_SEARCH_RANGE:
>> case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:
>> + case V4L2_CID_MPEG_VIDEO_LTRCOUNT:
>> + case V4L2_CID_MPEG_VIDEO_MARKLTRFRAME:
>> + case V4L2_CID_MPEG_VIDEO_USELTRFRAME:
>> *type = V4L2_CTRL_TYPE_INTEGER;
>> break;
>> case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:
>> diff --git a/include/uapi/linux/v4l2-controls.h
>> b/include/uapi/linux/v4l2-controls.h
>> index 6227141..f2daa86 100644
>> --- a/include/uapi/linux/v4l2-controls.h
>> +++ b/include/uapi/linux/v4l2-controls.h
>> @@ -742,6 +742,10 @@ enum
>> v4l2_cid_mpeg_video_hevc_size_of_length_field {
>> #define
>> V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR (V4L2_CID_MPEG_BASE + 642)
>> #define
>> V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES (V4L2_CID_MPEG_BASE + 643)
>> #define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR (V4L2_CID_MPEG_BASE
>> + 644)
>> +#define V4L2_CID_MPEG_VIDEO_LTRCOUNT (V4L2_CID_MPEG_BASE + 645)
>> +#define V4L2_CID_MPEG_VIDEO_MARKLTRFRAME (V4L2_CID_MPEG_BASE + 646)
>> +#define V4L2_CID_MPEG_VIDEO_USELTRFRAME (V4L2_CID_MPEG_BASE + 647)
>> +
>>
>> /* MPEG-class control IDs specific to the CX2341x driver as defined
>> by V4L2 */
>> #define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)
>>
>
> Regards,
>
> Hans
Thanks,
Dikshita
next prev parent reply other threads:[~2020-08-27 6:59 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-14 5:29 [PATCH v2] media: v4l2-ctrl: add control for long term reference Dikshita Agarwal
2020-08-25 10:04 ` Hans Verkuil
2020-08-27 6:59 ` dikshita [this message]
2020-09-14 13:56 ` Hans Verkuil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b6c14a61a5a63b68a07a539f39b88477@codeaurora.org \
--to=dikshita@codeaurora.org \
--cc=hverkuil-cisco@xs4all.nl \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=majja@codeaurora.org \
--cc=mchehab@kernel.org \
--cc=nicolas@ndufresne.ca \
--cc=stanimir.varbanov@linaro.org \
--cc=vgarodia@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox