[Ffmpeg-cvslog] CVS: ffmpeg/libavformat mov.c,1.103,1.104

Michael Niedermayer CVS michael
Sat Feb 11 22:43:23 CET 2006


Update of /cvsroot/ffmpeg/ffmpeg/libavformat
In directory mail:/var2/tmp/cvs-serv9785

Modified Files:
	mov.c 
Log Message:
stsd fix by (Baptiste COUDURIER )baptiste.coudurier smartjog com)


Index: mov.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/mov.c,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -d -r1.103 -r1.104
--- mov.c	11 Feb 2006 18:27:57 -0000	1.103
+++ mov.c	11 Feb 2006 21:43:21 -0000	1.104
@@ -831,17 +831,21 @@
     if((uint64_t)atom.size > (1<<30))
         return -1;
 
-    // pass all frma atom to codec, needed at least for QDM2
-    av_free(st->codec->extradata);
-    st->codec->extradata_size = atom.size;
-    st->codec->extradata = (uint8_t*) av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
+    if (st->codec->codec_id == CODEC_ID_QDM2) {
+        // pass all frma atom to codec, needed at least for QDM2
+        av_free(st->codec->extradata);
+        st->codec->extradata_size = atom.size;
+        st->codec->extradata = (uint8_t*) av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
 
-    if (st->codec->extradata) {
-        get_buffer(pb, st->codec->extradata, atom.size);
-        //av_log(NULL, AV_LOG_DEBUG, "Reading frma %Ld  %s\n", atom.size, (char*)st->codec->extradata);
-    } else
+        if (st->codec->extradata) {
+            get_buffer(pb, st->codec->extradata, atom.size);
+            //av_log(NULL, AV_LOG_DEBUG, "Reading frma %Ld  %s\n", atom.size, (char*)st->codec->extradata);
+        } else
+            url_fskip(pb, atom.size);
+    } else if (atom.size > 8) { /* to read frma, esds atoms */
+        mov_read_default(c, pb, atom);
+    } else if (atom.size > 0)
         url_fskip(pb, atom.size);
-
     return 0;
 }
 
@@ -944,6 +948,7 @@
 
     while(entries--) { //Parsing Sample description table
         enum CodecID id;
+        offset_t start_pos = url_ftell(pb);
         int size = get_be32(pb); /* size */
         format = get_le32(pb); /* data format */
 
@@ -1006,7 +1011,6 @@
             st->codec->time_base.den      = 25;
             st->codec->time_base.num = 1;
 */
-            size -= (16+8*4+2+32+2*2);
 #if 0
             while (size >= 8) {
                 MOV_atom_t a;
@@ -1147,8 +1151,11 @@
             } else
                 st->codec->palctrl = NULL;
 
-            a.size = size;
-            mov_read_default(c, pb, a);
+            a.size = size - (url_ftell(pb) - start_pos);
+            if (a.size > 8)
+                mov_read_default(c, pb, a);
+            else if (a.size > 0)
+                url_fskip(pb, a.size);
 #endif
         } else {
             st->codec->codec_id = codec_get_id(mov_audio_tags, format);





More information about the ffmpeg-cvslog mailing list