From a0fa6d06b848f26b16ba12f0a9a4a85b93ab8022 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Sat, 31 Oct 2015 19:45:27 +0100 Subject: matroska: Warn when metadata references a non-existent element Avoid some confusion when the information is not present. Bug-Id: 902 --- libavformat/matroskadec.c | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) (limited to 'libavformat/matroskadec.c') 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); -- cgit v1.2.3