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

James Zern jzern at google.com
Tue Feb 28 23:11:29 EET 2023


On Tue, Feb 28, 2023 at 4:01 AM Anton Khirnov <anton at khirnov.net> wrote:
>
> ---
>  libavcodec/libvpxenc.c | 139 +++++++++++++++++++++++++++++------------
>  libavcodec/version.h   |   2 +-
>  2 files changed, 100 insertions(+), 41 deletions(-)
>

lgtm

> 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.

> +    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?

> [...]
> 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.


More information about the ffmpeg-devel mailing list