[FFmpeg-devel] [PATCH] avcodec: Pass the HDR10+ metadata to the packet side data in VP9 encoder

Mohammad Izadi izadi at google.com
Wed Jun 2 04:23:24 EEST 2021


On Fri, May 28, 2021 at 4:49 AM Michael Niedermayer <michael at niedermayer.cc>
wrote:

> On Thu, May 27, 2021 at 09:44:10AM -0700, Mohammad Izadi wrote:
> > HDR10+ metadata is stored in the bit stream for HEVC. The story is
> different for VP9 and cannot store the metadata in the bit stream. HDR10+
> should be passed to packet side data an stored in the container (mkv) for
> VP9.
> >
> > This CL is taking HDR10+ from AVFrame side data in libvpxenc and is
> passing it to the AVPacket side data.
> > ---
> >  doc/APIchanges         |  2 +
> >  libavcodec/avpacket.c  |  1 +
> >  libavcodec/decode.c    |  1 +
> >  libavcodec/libvpxenc.c | 92 ++++++++++++++++++++++++++++++++++++++++++
> >  libavcodec/packet.h    |  8 ++++
> >  libavcodec/version.h   |  2 +-
> >  6 files changed, 105 insertions(+), 1 deletion(-)
> [...]
> > @@ -316,6 +323,53 @@ static av_cold void free_frame_list(struct
> FrameListData *list)
> >      }
> >  }
> >
> > +static av_cold int add_hdr10_plus(AVFifoBuffer *fifo, struct
> FrameHDR10Plus *data)
> > +{
> > +    int err = av_fifo_grow(fifo, sizeof(FrameHDR10Plus));
> > +    if (err < 0)
> > +        return err;
> > +    av_fifo_generic_write(fifo, data, sizeof(FrameHDR10Plus), NULL);
> > +    return 0;
> > +}
> > +
> > +static av_cold void free_hdr10_plus(struct FrameHDR10Plus *p)
> > +{
> > +    if (!p)
> > +        return;
> > +    av_buffer_unref(&p->hdr10_plus);
> > +    av_free(p);
> > +}
> > +
> > +static av_cold void free_hdr10_plus_fifo(AVFifoBuffer **fifo)
> > +{
> > +    FrameHDR10Plus *frame_hdr10_plus = NULL;
> > +    while (av_fifo_generic_read(*fifo, frame_hdr10_plus,
> sizeof(*frame_hdr10_plus), NULL) > 0)
> > +        free_hdr10_plus(frame_hdr10_plus);
> > +    av_fifo_freep(fifo);
> > +}
>
> This seems crashing
>
Fixed. Can you please verify it?

>
> frame=    3 fps=0.1 q=0.0 Lsize=      18kB time=00:00:01.03 bitrate=
> 145.7kbits/s speed=0.0346x
> video:3kB audio:14kB subtitle:0kB other streams:0kB global headers:0kB
> muxing overhead: 7.865490%
> ==21306== Invalid read of size 8
> ==21306==    at 0x12203B3: av_fifo_generic_read (fifo.c:218)
> ==21306==    by 0x9F5DA3: free_hdr10_plus_fifo (libvpxenc.c:346)
> ==21306==    by 0x9F627A: vpx_free (libvpxenc.c:441)
> ==21306==    by 0x7A1B02: avcodec_close (avcodec.c:472)
> ==21306==    by 0xAE48E0: avcodec_free_context (options.c:163)
> ==21306==    by 0x24AA21: ffmpeg_cleanup (ffmpeg.c:609)
> ==21306==    by 0x24239C: exit_program (cmdutils.c:135)
> ==21306==    by 0x25C3AB: main (ffmpeg.c:5030)
> ==21306==  Address 0x18 is not stack'd, malloc'd or (recently) free'd
>
> [...]
>
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Dictatorship: All citizens are under surveillance, all their steps and
> actions recorded, for the politicians to enforce control.
> Democracy: All politicians are under surveillance, all their steps and
> actions recorded, for the citizens to enforce control.
> _______________________________________________
> 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