[FFmpeg-devel] [PATCH v2 1/3] libavformat/oggdec: Allow first parameter in ff_vorbis_comment to be a generic AVClass struct

Romain Beauxis romain.beauxis at gmail.com
Sat Feb 8 19:20:03 EET 2025


Le ven. 7 févr. 2025 à 05:56, Andreas Rheinhardt
<andreas.rheinhardt at outlook.com> a écrit :
>
> Romain Beauxis:
> > Firt argument in these function is only used to pass to av_log. This
> > makes it possible to re-use them with any type of AVClass struct.
> >
> > ---
> >  libavformat/oggdec.h         | 5 ++++-
> >  libavformat/oggparsevorbis.c | 4 ++--
> >  2 files changed, 6 insertions(+), 3 deletions(-)
> >
> > diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h
> > index 43df23f4cb..6177254fd2 100644
> > --- a/libavformat/oggdec.h
> > +++ b/libavformat/oggdec.h
> > @@ -136,8 +136,11 @@ extern const struct ogg_codec ff_vp8_codec;
> >   *        so it needs to be writable. Furthermore it must be padded
> >   *        by a single byte (not counted in size).
> >   *        All changes will have been reverted upon return.
> > + *
> > + * @param avcl A pointer to an arbitrary struct of which the first field is a
> > + *        pointer to an AVClass struct.
> >   */
> > -int ff_vorbis_comment(AVFormatContext *ms, AVDictionary **m,
> > +int ff_vorbis_comment(void *avcl, AVDictionary **m,
> >                        const uint8_t *buf, int size, int parse_picture);
> >
> >  /**
> > diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
> > index 9f50ab9ffc..62eb8bbf70 100644
> > --- a/libavformat/oggparsevorbis.c
> > +++ b/libavformat/oggparsevorbis.c
> > @@ -88,7 +88,7 @@ int ff_vorbis_stream_comment(AVFormatContext *as, AVStream *st,
> >   * and reverts its changes before return. The input buffer needs to have
> >   * at least one byte of padding.
> >   */
> > -static int vorbis_parse_single_comment(AVFormatContext *as, AVDictionary **m,
> > +static int vorbis_parse_single_comment(void *as, AVDictionary **m,
> >                                         const uint8_t *buf, uint32_t size,
> >                                         int *updates, int parse_picture)
> >  {
> > @@ -146,7 +146,7 @@ end:
> >      return 0;
> >  }
> >
> > -int ff_vorbis_comment(AVFormatContext *as, AVDictionary **m,
> > +int ff_vorbis_comment(void *as, AVDictionary **m,
> >                        const uint8_t *buf, int size,
> >                        int parse_picture)
> >  {
>
> This is wrong: ff_vorbis_comment() really requires an AVFormatContext*
> (see e.g. ogm_chapter() or ff_flac_parse_picture()).
> Anyway: Your comment could simply say "a logcontext". And the variable
> could be renamed to logctx.

That's correct, thanks for looking into this.

The v3 of the patch series is a much better implementation that keeps
the separation between avformat/avcodec. Metadata are passed via a
AV_PKT_DATA_METADATA_UPDATE extra_data.


More information about the ffmpeg-devel mailing list