Message ID | CAGB5vbEx1eyHtfssYy-f-QO5AhHTEHMnAcEDieQOFqmcOwhfdQ@mail.gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avcodec/h264: ignore POC when flag is set | expand |
Context | Check | Description |
---|---|---|
andriy/configure_x86 | warning | Failed to apply patch |
yinshiyou/configure_loongarch64 | warning | Failed to apply patch |
On Thu, Sep 12, 2024 at 10:40:17PM -0700, kevmo314@gmail.com wrote: > From: Kevin Wang <kevmo314@gmail.com> > > When the flag AV_CODEC_FLAG_OUTPUT_CORRUPT or AV_CODEC_FLAG2_SHOW_ALL > is set, ignore any out of order POC's as they may still be valid > frames. > > Fixes https://trac.ffmpeg.org/ticket/11190. > > Signed-off-by: Kevin Wang <kevmo314@gmail.com> > --- > libavcodec/h264_slice.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c > index a66b75ca80..fc5a829755 100644 > --- a/libavcodec/h264_slice.c > +++ b/libavcodec/h264_slice.c > @@ -1341,7 +1341,8 @@ static int h264_select_output_frame(H264Context *h) > out_idx = i; > } > if (h->avctx->has_b_frames == 0 && > - ((h->delayed_pic[0]->f->flags & AV_FRAME_FLAG_KEY) || > h->delayed_pic[0]->mmco_reset)) > + // Check if we should ignore the output order and output the frame > + ((h->delayed_pic[0]->f->flags & AV_FRAME_FLAG_KEY) || > h->delayed_pic[0]->mmco_reset || h->avctx->flags & > (AV_CODEC_FLAG_OUTPUT_CORRUPT | AV_CODEC_FLAG2_SHOW_ALL))) > h->next_outputed_poc = INT_MIN; > out_of_order = out->poc < h->next_outputed_poc; dunno about patchwork but this patch is corrupted by linebreaks (probably from some editors word wrap settings) thx [...]
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index a66b75ca80..fc5a829755 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -1341,7 +1341,8 @@ static int h264_select_output_frame(H264Context *h) out_idx = i; } if (h->avctx->has_b_frames == 0 && - ((h->delayed_pic[0]->f->flags & AV_FRAME_FLAG_KEY) || h->delayed_pic[0]->mmco_reset)) + // Check if we should ignore the output order and output the frame + ((h->delayed_pic[0]->f->flags & AV_FRAME_FLAG_KEY) || h->delayed_pic[0]->mmco_reset || h->avctx->flags & (AV_CODEC_FLAG_OUTPUT_CORRUPT | AV_CODEC_FLAG2_SHOW_ALL)))