[FFmpeg-trac] #10012(avcodec:new): rkmppdec improperly judging interlaced source
FFmpeg
trac at avcodec.org
Mon Nov 7 05:25:16 EET 2022
#10012: rkmppdec improperly judging interlaced source
-------------------------------------+-------------------------------------
Reporter: tc | Type: defect
Status: new | Priority: normal
Component: avcodec | Version:
| unspecified
Keywords: interlaced | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary of the bug:
https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/rkmppdec.c#L407
{{{#!c
frame->interlaced_frame = ((mode & MPP_FRAME_FLAG_FIELD_ORDER_MASK) ==
MPP_FRAME_FLAG_DEINTERLACED);
}}}
my understanding of frame->interlaced is that it should be non-zero when
input frames are interlaced.
`mpp_frame_get_mode(mppframe)` returns a bitfield covered by
`mpp_frame.h`:
{{{#!c
#define MPP_FRAME_FLAG_TOP_FIELD (0x00000001)
/* bottom field only */
#define MPP_FRAME_FLAG_BOT_FIELD (0x00000002)
/* paired field */
#define MPP_FRAME_FLAG_PAIRED_FIELD
(MPP_FRAME_FLAG_TOP_FIELD|MPP_FRAME_FLAG_BOT_FIELD)
/* paired field with field order of top first */
#define MPP_FRAME_FLAG_TOP_FIRST (0x00000004)
/* paired field with field order of bottom first */
#define MPP_FRAME_FLAG_BOT_FIRST (0x00000008)
/* paired field with unknown field order (MBAFF) */
#define MPP_FRAME_FLAG_DEINTERLACED
(MPP_FRAME_FLAG_TOP_FIRST|MPP_FRAME_FLAG_BOT_FIRST)
#define MPP_FRAME_FLAG_FIELD_ORDER_MASK (0x0000000C)
}}}
For a typical tff interlaced source, returned mode is `0x7` (`0b111`). For
bff, it would be `0b1011`.
However, MPP_FRAME_FLAG_DEINTERLACED masks both TFF and BFF, which is
impossible in interlaced sources.
As per discussion here: https://github.com/JeffyCN/FFmpeg/issues/10
the correct logic would be inverse of current, i.e.
{{{#!c
frame->interlaced_frame = (!((mode & MPP_FRAME_FLAG_FIELD_ORDER_MASK) ==
MPP_FRAME_FLAG_DEINTERLACED));
}}}
After making this change, the stream is properly marked as interlaced:
{{{
Stream #0:0: Video: h264, drm_prime(bt709, top coded first (swapped)),
1440x1080, q=2-31, 3000 kb/s, 29.97 fps, 90k tbn
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10012>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list