[FFmpeg-devel] [PATCH 5/8] lavc/libvpxenc: handle frame durations and AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE

Anton Khirnov anton at khirnov.net
Wed Mar 1 14:01:56 EET 2023


Quoting James Zern (2023-02-28 22:11:29)
> On Tue, Feb 28, 2023 at 4:01 AM Anton Khirnov <anton at khirnov.net> wrote:
> > diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
> > index 77921badba..af16e53deb 100644
> > --- a/libavcodec/libvpxenc.c
> > +++ b/libavcodec/libvpxenc.c
> > @@ -68,6 +68,14 @@ struct FrameListData {
> >
> >  typedef struct FrameData {
> >      int64_t pts;
> > +    int64_t duration;
> > +
> > +#if FF_API_REORDERED_OPAQUE
> > +    int64_t      reordered_opaque;
> > +#endif
> > +    void        *frame_opaque;
> > +    AVBufferRef *frame_opaque_ref;
> > +
> >      AVBufferRef *hdr10_plus;
> >  } FrameData;
> >
> > @@ -329,32 +337,101 @@ static av_cold void free_frame_list(struct FrameListData *list)
> >      }
> >  }
> >
> > +static void frame_data_uninit(FrameData *fd)
> > +{
> > +    av_buffer_unref(&fd->frame_opaque_ref);
> > +    av_buffer_unref(&fd->hdr10_plus);
> > +}
> > +
> >  static av_cold void fifo_free(AVFifo **fifo)
> >  {
> >      FrameData fd;
> >      while (av_fifo_read(*fifo, &fd, 1) >= 0)
> > -        av_buffer_unref(&fd.hdr10_plus);
> > +        frame_data_uninit(&fd);
> >      av_fifo_freep2(fifo);
> >  }
> >
> > -static int frame_data_apply(AVFifo *fifo, AVPacket *pkt)
> > +static int frame_data_submit(AVCodecContext *avctx, AVFifo *fifo,
> > +                             const AVFrame *frame)
> > +{
> > +    VPxContext *ctx = avctx->priv_data;
> > +    const struct vpx_codec_enc_cfg *enccfg = ctx->encoder.config.enc;
> > +
> > +    FrameData        fd = { .pts = frame->pts };
> > +
> 
> The alignment of this declaration looks strange.

Ah yes, it's a remnant from before I moved it to a separate function.
Fixed locally.

> 
> > +    AVFrameSideData *av_uninit(sd);
> > +    int ret;
> > +
> > +#if CONFIG_LIBVPX_VP9_ENCODER
> > +    // Keep HDR10+ if it has bit depth higher than 8 and
> > +    // it has PQ trc (SMPTE2084).
> 
> Out of curiosity are there any HDR10+ files in fate?

Yes, there is hevc/hdr10_plus_h265_sample.hevc. I tested that the side
data does appear on output packets.

> 
> > [...]
> > diff --git a/libavcodec/version.h b/libavcodec/version.h
> > index 06631ffa8c..789d9047c2 100644
> > --- a/libavcodec/version.h
> > +++ b/libavcodec/version.h
> > @@ -30,7 +30,7 @@
> >  #include "version_major.h"
> >
> >  #define LIBAVCODEC_VERSION_MINOR   4
> > -#define LIBAVCODEC_VERSION_MICRO 100
> > +#define LIBAVCODEC_VERSION_MICRO 101
> >
> 
> This needs a rebase to apply cleanly.

Rebased locally.

-- 
Anton Khirnov


More information about the ffmpeg-devel mailing list