changeset 660:758929a1744c libavformat

chunk support in mov patch by Roine Gustafsson <roine AT users DOT sourceforge DOT net>
author mmu_man
date Thu, 27 Jan 2005 15:39:13 +0000
parents 6d7c0e6d929e
children ff3b403d0498
files mov.c
diffstat 1 files changed, 8 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mov.c	Thu Jan 27 14:48:15 2005 +0000
+++ b/mov.c	Thu Jan 27 15:39:13 2005 +0000
@@ -1746,11 +1746,10 @@
 #ifdef DEBUG
         fprintf(stderr, "sc[ffid %d]->sample_size = %d\n", sc->ffindex, sc->sample_size);
 #endif
-        //size = sc->sample_sizes[sc->current_sample];
-        // that ain't working...
-        //size = (sc->sample_size)?sc->sample_size:sc->sample_sizes[sc->current_sample];
-        size = (sc->sample_size > 1)?sc->sample_size:sc->sample_sizes[sc->current_sample];
-
+        // sample_size is not always correct for audio. Quicktime ignores this value and
+        // computes it differently.
+        if(s->streams[sc->ffindex]->codec.codec_type == CODEC_TYPE_VIDEO)
+            size = sc->sample_size?sc->sample_size:sc->sample_sizes[sc->current_sample];
         sc->current_sample++;
         sc->left_in_chunk--;
 
@@ -1810,7 +1809,7 @@
     if (sc->sample_size > 0) { 
         int foundsize=0;
         for(i=0; i<(sc->sample_to_chunk_sz); i++) {
-            if( (sc->sample_to_chunk[i].first)<=(sc->next_chunk) && (sc->sample_size>0) )
+            if( (sc->sample_to_chunk[i].first)<=(sc->next_chunk) )
             {
 		// I can't figure out why for PCM audio sample_size is always 1
 		// (it should actually be channels*bits_per_second/8) but it is.
@@ -1836,7 +1835,8 @@
 
 #ifdef MOV_SPLIT_CHUNKS
     /* split chunks into samples */
-    if (sc->sample_size == 0) {
+    if (s->streams[sc->ffindex]->codec.codec_type == CODEC_TYPE_VIDEO) {
+        // This does not support split audio, as the sample_size is often not correct
         idx = sc->sample_to_chunk_index;
         if ((idx + 1 < sc->sample_to_chunk_sz)
                 && (sc->next_chunk >= sc->sample_to_chunk[idx + 1].first))
@@ -1846,7 +1846,7 @@
 	    mov->partial = sc;
             /* we'll have to get those samples before next chunk */
             sc->left_in_chunk = sc->sample_to_chunk[idx].count - 1;
-            size = (sc->sample_size > 1)?sc->sample_size:sc->sample_sizes[sc->current_sample];
+            size = sc->sample_size?sc->sample_size:sc->sample_sizes[sc->current_sample];
         }
 
         sc->current_sample++;