[FFmpeg-devel] [PATCH] libavcodec/hevc_mp4toannexb_bsf: ignore extra data if possible

Xiang, Haihao haihao.xiang at intel.com
Wed Sep 22 07:37:11 EEST 2021


> LGTM.

Thanks for reviewing the patch. Could someone please merge this patch if no more
comment ?

Regards
Haihao

> 
> On Fri, 10 Sept 2021 at 05:10, Haihao Xiang <haihao.xiang at intel.com> wrote:
> > 
> > It is possible that an IRAP frame in input AVPacket has SPS and PPS, and
> > these headers should take effect. Hence we should not prepend extra data
> > to IRAP frame in this case, otherwise an IRAP frame in output AVPacket
> > will have 2 SPS/PPS when extra data also has SPS and PPS, the second
> > SPS/PPS will override the first SPS/PPS and take effect.
> > ---
> >  libavcodec/hevc_mp4toannexb_bsf.c | 7 +++++--
> >  tests/fate/hevc.mak               | 2 +-
> >  2 files changed, 6 insertions(+), 3 deletions(-)
> > 
> > diff --git a/libavcodec/hevc_mp4toannexb_bsf.c
> > b/libavcodec/hevc_mp4toannexb_bsf.c
> > index 790dfb0394..3b3732bbd0 100644
> > --- a/libavcodec/hevc_mp4toannexb_bsf.c
> > +++ b/libavcodec/hevc_mp4toannexb_bsf.c
> > @@ -121,7 +121,7 @@ static int hevc_mp4toannexb_filter(AVBSFContext *ctx,
> > AVPacket *out)
> >      HEVCBSFContext *s = ctx->priv_data;
> >      AVPacket *in;
> >      GetByteContext gb;
> > -
> > +    int has_sps = 0, has_pps = 0;
> >      int got_irap = 0;
> >      int i, ret = 0;
> > 
> > @@ -155,10 +155,13 @@ static int hevc_mp4toannexb_filter(AVBSFContext *ctx,
> > AVPacket *out)
> >          }
> > 
> >          nalu_type = (bytestream2_peek_byte(&gb) >> 1) & 0x3f;
> > +        has_sps = (has_sps || nalu_type == HEVC_NAL_SPS);
> > +        has_pps = (has_pps || nalu_type == HEVC_NAL_PPS);
> > 
> >          /* prepend extradata to IRAP frames */
> >          is_irap       = nalu_type >= 16 && nalu_type <= 23;
> > -        add_extradata = is_irap && !got_irap;
> > +        /* ignore the extradata if IRAP frame has sps and pps */
> > +        add_extradata = is_irap && !got_irap && !(has_sps && has_pps);
> >          extra_size    = add_extradata * ctx->par_out->extradata_size;
> >          got_irap     |= is_irap;
> > 
> > diff --git a/tests/fate/hevc.mak b/tests/fate/hevc.mak
> > index f6ea1df9a5..a4dac99b6a 100644
> > --- a/tests/fate/hevc.mak
> > +++ b/tests/fate/hevc.mak
> > @@ -251,7 +251,7 @@ FATE_HEVC-$(call ALLYES, HEVC_DEMUXER MOV_DEMUXER
> > HEVC_MP4TOANNEXB_BSF MOV_MUXER
> >  fate-hevc-bsf-mp4toannexb: tests/data/hevc-mp4.mov
> >  fate-hevc-bsf-mp4toannexb: CMD = md5 -i $(TARGET_PATH)/tests/data/hevc-
> > mp4.mov -c:v copy -fflags +bitexact -f hevc
> >  fate-hevc-bsf-mp4toannexb: CMP = oneline
> > -fate-hevc-bsf-mp4toannexb: REF = 1873662a3af1848c37e4eb25722c8df9
> > +fate-hevc-bsf-mp4toannexb: REF = 3c9d998a3aa2b9e0fb1c1f434952bf8b
> > 
> >  fate-hevc-skiploopfilter: CMD = framemd5 -skip_loop_filter nokey -i
> > $(TARGET_SAMPLES)/hevc-conformance/SAO_D_Samsung_5.bit -sws_flags bitexact
> >  FATE_HEVC += fate-hevc-skiploopfilter
> > --
> > 2.17.1
> > 
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> > 
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list