changeset 1032:58a0e351ef4c libavformat

fix demuxing of CDR-Dinner_LAN_800k.mp4
author bcoudurier
date Fri, 24 Mar 2006 16:52:56 +0000
parents 480c84af0f61
children a757a0a3824f
files mov.c
diffstat 1 files changed, 12 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/mov.c	Fri Mar 24 16:01:00 2006 +0000
+++ b/mov.c	Fri Mar 24 16:52:56 2006 +0000
@@ -946,12 +946,18 @@
                 (format >> 0) & 0xff, (format >> 8) & 0xff, (format >> 16) & 0xff, (format >> 24) & 0xff,
                 st->codec->codec_type);
         st->codec->codec_tag = format;
-        /* codec_type is set earlier by read_hdlr */
+        id = codec_get_id(mov_audio_tags, format);
+        if (id > 0) {
+            st->codec->codec_type = CODEC_TYPE_AUDIO;
+        } else if (format != MKTAG('m', 'p', '4', 's')) { /* skip old asf mpeg4 tag */
+            id = codec_get_id(mov_video_tags, format);
+            if (id <= 0)
+                id = codec_get_id(codec_bmp_tags, format);
+            if (id > 0)
+                st->codec->codec_type = CODEC_TYPE_VIDEO;
+        }
+
         if(st->codec->codec_type==CODEC_TYPE_VIDEO) {
-            /* for MPEG4: set codec type by looking for it */
-            id = codec_get_id(mov_video_tags, format);
-            if(id <= 0)
-                id = codec_get_id(codec_bmp_tags, format);
             st->codec->codec_id = id;
             get_be16(pb); /* version */
             get_be16(pb); /* revision level */
@@ -1058,7 +1064,7 @@
         } else if(st->codec->codec_type==CODEC_TYPE_AUDIO) {
             uint16_t version = get_be16(pb);
 
-            st->codec->codec_id = codec_get_id(mov_audio_tags, format);
+            st->codec->codec_id = id;
             get_be16(pb); /* revision level */
             get_be32(pb); /* vendor */