From 92e51b66cfa89f35d42b370a968bff2edfc5adb8 Mon Sep 17 00:00:00 2001
From: Roine Gustafsson <roine@users.sourceforge.net>
Date: Thu, 27 Jan 2005 15:39:13 +0000
Subject: [PATCH] chunk support in mov patch by Roine Gustafsson <roine AT
 users DOT sourceforge DOT net>

Originally committed as revision 3890 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavformat/mov.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 8c334110b52..d49c84dede4 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1746,11 +1746,10 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
 #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 @@ again:
     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 @@ again:
 
 #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 @@ again:
 	    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++;
-- 
GitLab