flvdec: Ignore the index if it's from a creator known to be different
authorMartin Storsjö <martin@martin.st>
Wed, 21 Sep 2011 13:51:13 +0000 (16:51 +0300)
committerMartin Storsjö <martin@martin.st>
Fri, 23 Sep 2011 17:59:48 +0000 (20:59 +0300)
Signed-off-by: Martin Storsjö <martin@martin.st>
libavformat/flvdec.c

index cafbeb5..569d734 100644 (file)
@@ -140,6 +140,18 @@ static int parse_keyframes_index(AVFormatContext *s, AVIOContext *ioc, AVStream
     int64_t *filepositions = NULL;
     int ret = AVERROR(ENOSYS);
     int64_t initial_pos = avio_tell(ioc);
+    AVDictionaryEntry *creator = av_dict_get(s->metadata, "metadatacreator",
+                                             NULL, 0);
+
+    if (creator && !strcmp(creator->value, "MEGA")) {
+        /* Files with this metadatacreator tag seem to have filepositions
+         * pointing at the 4 trailer bytes of the previous packet,
+         * which isn't the norm (nor what we expect here, nor what
+         * jwplayer + lighttpd expect, nor what flvtool2 produces).
+         * Just ignore the index in this case, instead of risking trying
+         * to adjust it to something that might or might not work. */
+        return 0;
+    }
 
     while (avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) {
         int64_t* current_array;