diff options
author | Luca Barbato <lu_zero@gentoo.org> | 2015-10-31 19:45:27 +0100 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2015-11-28 17:02:15 +0100 |
commit | a0fa6d06b848f26b16ba12f0a9a4a85b93ab8022 (patch) | |
tree | 977c9d581d2cdffe14af7d09a6d2f033f2a39f2a | |
parent | f7986239f4dbec91c743c4c5eb0a2339bd325bf6 (diff) | |
download | ffmpeg-a0fa6d06b848f26b16ba12f0a9a4a85b93ab8022.tar.gz |
matroska: Warn when metadata references a non-existent element
Avoid some confusion when the information is not present.
Bug-Id: 902
-rw-r--r-- | libavformat/matroskadec.c | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 8296a41559..bdf2eb4219 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -1276,24 +1276,55 @@ static void matroska_convert_tags(AVFormatContext *s) for (i = 0; i < matroska->tags.nb_elem; i++) { if (tags[i].target.attachuid) { MatroskaAttachment *attachment = matroska->attachments.elem; - for (j = 0; j < matroska->attachments.nb_elem; j++) + int found = 0; + for (j = 0; j < matroska->attachments.nb_elem; j++) { if (attachment[j].uid == tags[i].target.attachuid && - attachment[j].stream) + attachment[j].stream) { matroska_convert_tag(s, &tags[i].tag, &attachment[j].stream->metadata, NULL); + found = 1; + } + } + if (!found) { + av_log(NULL, AV_LOG_WARNING, + "The tags at index %d refer to a " + "non-existent attachment %"PRId64".\n", + i, tags[i].target.attachuid); + } } else if (tags[i].target.chapteruid) { MatroskaChapter *chapter = matroska->chapters.elem; - for (j = 0; j < matroska->chapters.nb_elem; j++) + int found = 0; + for (j = 0; j < matroska->chapters.nb_elem; j++) { if (chapter[j].uid == tags[i].target.chapteruid && - chapter[j].chapter) + chapter[j].chapter) { matroska_convert_tag(s, &tags[i].tag, &chapter[j].chapter->metadata, NULL); + found = 1; + } + } + if (!found) { + av_log(NULL, AV_LOG_WARNING, + "The tags at index %d refer to a non-existent chapter " + "%"PRId64".\n", + i, tags[i].target.chapteruid); + } } else if (tags[i].target.trackuid) { MatroskaTrack *track = matroska->tracks.elem; - for (j = 0; j < matroska->tracks.nb_elem; j++) - if (track[j].uid == tags[i].target.trackuid && track[j].stream) + int found = 0; + for (j = 0; j < matroska->tracks.nb_elem; j++) { + if (track[j].uid == tags[i].target.trackuid && + track[j].stream) { matroska_convert_tag(s, &tags[i].tag, &track[j].stream->metadata, NULL); + found = 1; + } + } + if (!found) { + av_log(NULL, AV_LOG_WARNING, + "The tags at index %d refer to a non-existent track " + "%"PRId64".\n", + i, tags[i].target.trackuid); + } } else { matroska_convert_tag(s, &tags[i].tag, &s->metadata, tags[i].target.type); |