On Thu, 26 Jan 2017 12:55:15 +0100 Paul Arzelier <paul.arzel...@free.fr> wrote:
> From a3dc6068fb06722aacea56365f948afdb8df841f Mon Sep 17 00:00:00 2001 > From: Paul Arzelier <paul.arzel...@free.fr> > Date: Thu, 26 Jan 2017 12:51:33 +0100 > Subject: [PATCH] Ignore ID3 tags if other tags are present (e.g. vorbis > comments) > Originally-by: Ben Boeckel <maths...@gmail.com> > --- > libavformat/utils.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/libavformat/utils.c b/libavformat/utils.c > index d5dfca7dec..bbe5c1ff1c 100644 > --- a/libavformat/utils.c > +++ b/libavformat/utils.c > @@ -513,6 +513,7 @@ int avformat_open_input(AVFormatContext **ps, const char > *filename, > AVFormatContext *s = *ps; > int i, ret = 0; > AVDictionary *tmp = NULL; > + AVDictionary *id3_meta = NULL; Looks like this would leak on "goto fail;". > ID3v2ExtraMeta *id3v2_extra_meta = NULL; > > if (!s && !(s = avformat_alloc_context())) > @@ -588,12 +589,25 @@ int avformat_open_input(AVFormatContext **ps, const > char *filename, > > /* e.g. AVFMT_NOFILE formats will not have a AVIOContext */ > if (s->pb) > - ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC, &id3v2_extra_meta, 0); > + ff_id3v2_read_dict(s->pb, &id3_meta, ID3v2_DEFAULT_MAGIC, > &id3v2_extra_meta); > > if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->iformat->read_header) > if ((ret = s->iformat->read_header(s)) < 0) > goto fail; > > + if (!s->metadata) { > + av_dict_copy(&s->metadata, id3_meta, AV_DICT_DONT_OVERWRITE); > + av_dict_free(&id3_meta); > + } > + else if (id3_meta) { > + int level = AV_LOG_WARNING; > + if (s->error_recognition & AV_EF_COMPLIANT) > + level = AV_LOG_ERROR; > + av_log(s, level, "Spec-compliant flac files do not support ID3 > tags.\n"); Seems ok, but this message will be printed for non-flac formats too, which is weird at best. Maybe something along the id3 tag being discarded or so? > + if (s->error_recognition & AV_EF_EXPLODE) > + return AVERROR_INVALIDDATA; Not sure about this one, but I'd be fine with it personally. > + } > + > if (id3v2_extra_meta) { > if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, > "aac") || > !strcmp(s->iformat->name, "tta")) { _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel