aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2015-10-31 19:45:27 +0100
committerLuca Barbato <lu_zero@gentoo.org>2015-11-28 17:02:15 +0100
commita0fa6d06b848f26b16ba12f0a9a4a85b93ab8022 (patch)
tree977c9d581d2cdffe14af7d09a6d2f033f2a39f2a
parentf7986239f4dbec91c743c4c5eb0a2339bd325bf6 (diff)
downloadffmpeg-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.c43
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);