[FFmpeg-devel] [PATCH 04/42] avcodec/h264_ps: Use RefStruct API for SPS/PPS

Anton Khirnov anton at khirnov.net
Mon Oct 2 12:39:02 EEST 2023


Quoting Andreas Rheinhardt (2023-09-28 17:49:15)
> Anton Khirnov:
> > Quoting Andreas Rheinhardt (2023-09-19 21:56:56)
> >> diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
> >> index 5657327f0c..632f5b23b2 100644
> >> --- a/libavcodec/h264_slice.c
> >> +++ b/libavcodec/h264_slice.c
> >> @@ -363,25 +361,16 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
> >>  
> >>      // SPS/PPS
> >>      for (i = 0; i < FF_ARRAY_ELEMS(h->ps.sps_list); i++) {
> >> -        ret = av_buffer_replace(&h->ps.sps_list[i], h1->ps.sps_list[i]);
> >> -        if (ret < 0)
> >> -            return ret;
> >> +        ff_refstruct_replace(&h->ps.sps_list[i], h1->ps.sps_list[i]);
> >>      }
> >>      for (i = 0; i < FF_ARRAY_ELEMS(h->ps.pps_list); i++) {
> >> -        ret = av_buffer_replace(&h->ps.pps_list[i], h1->ps.pps_list[i]);
> >> -        if (ret < 0)
> >> -            return ret;
> >> +        ff_refstruct_replace(&h->ps.pps_list[i], h1->ps.pps_list[i]);
> >>      }
> >>  
> >> -    ret = av_buffer_replace(&h->ps.pps_ref, h1->ps.pps_ref);
> >> -    if (ret < 0)
> >> -        return ret;
> >> -    h->ps.pps = NULL;
> >> +    ff_refstruct_replace(&h->ps.pps, h1->ps.pps);
> >>      h->ps.sps = NULL;
> >> -    if (h1->ps.pps_ref) {
> >> -        h->ps.pps = (const PPS*)h->ps.pps_ref->data;
> >> +    if (h1->ps.pps)
> >>          h->ps.sps = h->ps.pps->sps;
> > 
> > nit: this would look better as
> >        h->ps.sps = h->ps.pps ? h->ps.pps->sps : NULL
> > 
> 
> Is there actually a reason not to just use h->ps.sps = h1->ps.sps?

Probably not a good one.

-- 
Anton Khirnov


More information about the ffmpeg-devel mailing list