package org.jcodec.containers.mp4; import static org.jcodec.containers.mp4.SampleOffsetUtils.getChunkBySample; import static org.jcodec.containers.mp4.SampleOffsetUtils.getFirstSampleAtChunk; import static org.jcodec.containers.mp4.SampleOffsetUtils.getSamplesInChunk; import static org.junit.Assert.assertEquals; import org.jcodec.containers.mp4.boxes.Box; import org.jcodec.containers.mp4.boxes.ChunkOffsetsBox; import org.jcodec.containers.mp4.boxes.MediaInfoBox; import org.jcodec.containers.mp4.boxes.MovieBox; import org.jcodec.containers.mp4.boxes.NodeBox; import org.jcodec.containers.mp4.boxes.SampleToChunkBox; import org.junit.Test; import java.io.File; public class SampleOffsetUtilsTest { static File f = new File("src/test/resources/petro_dae/95BCC757-7E23-445B-B7AB-6737208069FA/example1.mp4"); @Test public void testGetFirstSampleAtChunk() throws Exception { MovieBox moov = MP4Util.parseMovie(f); MediaInfoBox minf = moov.getAudioTracks().get(0).getMdia().getMinf(); ChunkOffsetsBox stco = NodeBox.findFirstPath(minf, ChunkOffsetsBox.class, Box.path("stbl.stco")); SampleToChunkBox stsc = NodeBox.findFirstPath(minf, SampleToChunkBox.class, Box.path("stbl.stsc")); assertEquals(0, getFirstSampleAtChunk(1, stsc, stco)); assertEquals(2, getFirstSampleAtChunk(2, stsc, stco)); assertEquals(4, getFirstSampleAtChunk(3, stsc, stco)); } @Test public void testGetChunkBySample() throws Exception { MovieBox moov = MP4Util.parseMovie(f); MediaInfoBox minf = moov.getAudioTracks().get(0).getMdia().getMinf(); ChunkOffsetsBox stco = NodeBox.findFirstPath(minf, ChunkOffsetsBox.class, Box.path("stbl.stco")); SampleToChunkBox stsc = NodeBox.findFirstPath(minf, SampleToChunkBox.class, Box.path("stbl.stsc")); assertEquals(1, getChunkBySample(0, stco, stsc)); assertEquals(1, getChunkBySample(1, stco, stsc)); assertEquals(2, getChunkBySample(2, stco, stsc)); assertEquals(2, getChunkBySample(3, stco, stsc)); } @Test public void testGetSamplesInChunk() throws Exception { MovieBox moov = MP4Util.parseMovie(f); MediaInfoBox minf = moov.getAudioTracks().get(0).getMdia().getMinf(); SampleToChunkBox stsc = NodeBox.findFirstPath(minf, SampleToChunkBox.class, Box.path("stbl.stsc")); assertEquals(2, getSamplesInChunk(1, stsc)); assertEquals(2, getSamplesInChunk(2, stsc)); assertEquals(1, getSamplesInChunk(4, stsc)); assertEquals(4, getSamplesInChunk(12, stsc)); } }