On 2019-10-31 11:20, Boris Brezillon wrote: > On Tue, 29 Oct 2019 01:26:01 +0000 > Jonas Karlman <jonas@xxxxxxxxx> wrote: > >> Add DPB entry flags to help indicate when a reference frame is a field picture >> and how the DPB entry is referenced, top or bottom field or full frame. >> >> Signed-off-by: Jonas Karlman <jonas@xxxxxxxxx> >> --- >> Documentation/media/uapi/v4l/ext-ctrls-codec.rst | 12 ++++++++++++ >> include/media/h264-ctrls.h | 4 ++++ >> 2 files changed, 16 insertions(+) >> >> diff --git a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst >> index 28313c0f4e7c..d472a54d1c4d 100644 >> --- a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst >> +++ b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst >> @@ -2028,6 +2028,18 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type - >> * - ``V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM`` >> - 0x00000004 >> - The DPB entry is a long term reference frame >> + * - ``V4L2_H264_DPB_ENTRY_FLAG_FIELD_PICTURE`` >> + - 0x00000008 >> + - The DPB entry is a field picture >> + * - ``V4L2_H264_DPB_ENTRY_FLAG_REF_TOP`` >> + - 0x00000010 >> + - The DPB entry is a top field reference >> + * - ``V4L2_H264_DPB_ENTRY_FLAG_REF_BOTTOM`` >> + - 0x00000020 >> + - The DPB entry is a bottom field reference >> + * - ``V4L2_H264_DPB_ENTRY_FLAG_REF_FRAME`` >> + - 0x00000030 >> + - The DPB entry is a reference frame >> >> ``V4L2_CID_MPEG_VIDEO_H264_DECODE_MODE (enum)`` >> Specifies the decoding mode to use. Currently exposes slice-based and >> diff --git a/include/media/h264-ctrls.h b/include/media/h264-ctrls.h >> index e877bf1d537c..76020ebd1e6c 100644 >> --- a/include/media/h264-ctrls.h >> +++ b/include/media/h264-ctrls.h >> @@ -185,6 +185,10 @@ struct v4l2_ctrl_h264_slice_params { >> #define V4L2_H264_DPB_ENTRY_FLAG_VALID 0x01 >> #define V4L2_H264_DPB_ENTRY_FLAG_ACTIVE 0x02 >> #define V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM 0x04 >> +#define V4L2_H264_DPB_ENTRY_FLAG_FIELD_PICTURE 0x08 >> +#define V4L2_H264_DPB_ENTRY_FLAG_REF_TOP 0x10 >> +#define V4L2_H264_DPB_ENTRY_FLAG_REF_BOTTOM 0x20 >> +#define V4L2_H264_DPB_ENTRY_FLAG_REF_FRAME 0x30 > I don't remember all the details, but do we really need 3 flags? > Maybe I'm wrong, but it looks like the following combination doesn't > make sense: > > - FIELD_PICTURE + REF_FRAME: if it's a full frame ref it should > contain both top and bottom fields right, so it's no longer a > FIELD_PICTURE, is it? > > Can't we just have 2 flags? > > FIELD_PICTURE 0x08 > FIELD_REF_TOP 0x10 (meaning that FIELD_REF_BOTTOM is > 0x00) > > and then have the following combinations: > > top field ref => FIELD_PICTURE | FIELD_REF_TOP > bottom field ref => FIELD_PICTURE > full frame ref => 0x0 I am not sure and will need to look closer at spec and what ffmpeg is doing. These flags was mostly inspired by the information ffmpeg stores in H264Picture->reference and H264Picture->field_picture. I also believe that the new FLAG_REF_TOP/BOTTOM may make FLAG_ACTIVE obsolete. active => flags & FLAG_REF_FRAME Hopefully I will have some time to rework and respin this at the end of next week. Regards, Jonas > >> >> struct v4l2_h264_dpb_entry { >> __u64 reference_ts;