]> git.nihav.org Git - nihav.git/commitdiff
movmuxer: write more compact stsc atom representation
authorKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 6 Apr 2026 13:59:16 +0000 (15:59 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 6 Apr 2026 13:59:16 +0000 (15:59 +0200)
nihav-commonfmt/src/muxers/mov/mod.rs

index 748d36f1a1dffe8db7c655f964baeb4cf915133e..aaf5203ca9f1e6875f2a8211781d424ffb73fc54 100644 (file)
@@ -152,11 +152,23 @@ impl ChunkAccount {
             bw.write_u32be(1)?; // samples per chunk
             bw.write_u32be(1)?; // sample description ID
         } else {
-            bw.write_u32be(self.cmap.len() as u32)?;
+            let mut len = 0u32;
+            let mut prev = 0;
+            for &nsamps in self.cmap.iter() {
+                if nsamps != prev {
+                    prev = nsamps;
+                    len += 1;
+                }
+            }
+            bw.write_u32be(len)?;
+            let mut prev = 0;
             for (i, &entry) in self.cmap.iter().enumerate() {
-                bw.write_u32be(i as u32 + 1)?;
-                bw.write_u32be(entry)?; // samples per chunk
-                bw.write_u32be(1)?; // sample description ID
+                if entry != prev {
+                    bw.write_u32be(i as u32 + 1)?;
+                    bw.write_u32be(entry)?; // samples per chunk
+                    bw.write_u32be(1)?; // sample description ID
+                    prev = entry;
+                }
             }
         }
         Ok(())