]> git.sesse.net Git - vlc/commitdiff
mux: mp4: compress stsz entries
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 2 Jun 2014 19:26:22 +0000 (21:26 +0200)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 2 Jun 2014 19:27:22 +0000 (21:27 +0200)
modules/mux/mp4.c

index 8deb7153139b233a99fcf55800a5f600666dc743..207f71c2a9e7dd611ed40d8a292683465c0b1b8b 100644 (file)
@@ -1411,10 +1411,24 @@ static bo_t *GetStblBox(sout_mux_t *p_mux, mp4_stream_t *p_stream)
     /* FIXME add ctts ?? FIXME */
 
     bo_t *stsz = box_full_new("stsz", 0, 0);
-    bo_add_32be(stsz, 0);                             // sample-size
-    bo_add_32be(stsz, p_stream->i_entry_count);       // sample-count
+    int i_size = 0;
     for (unsigned i = 0; i < p_stream->i_entry_count; i++)
-        bo_add_32be(stsz, p_stream->entry[i].i_size); // sample-size
+    {
+        if ( i == 0 )
+            i_size = p_stream->entry[i].i_size;
+        else if ( p_stream->entry[i].i_size != i_size )
+        {
+            i_size = 0;
+            break;
+        }
+    }
+    bo_add_32be(stsz, i_size);                         // sample-size
+    bo_add_32be(stsz, p_stream->i_entry_count);       // sample-count
+    if ( i_size == 0 ) // all samples have different size
+    {
+        for (unsigned i = 0; i < p_stream->i_entry_count; i++)
+            bo_add_32be(stsz, p_stream->entry[i].i_size); // sample-size
+    }
 
     /* create stss table */
     bo_t *stss = NULL;