public static long getSampleOffset(int sample, SampleToChunkBox stsc, ChunkOffsetsBox stco, SampleSizesBox stsz) { int chunkBySample = getChunkBySample(sample, stco, stsc); int firstSampleAtChunk = getFirstSampleAtChunk(chunkBySample, stsc, stco); long offset = stco.getChunkOffsets()[chunkBySample - 1]; int[] sizes = stsz.getSizes(); for (int i = firstSampleAtChunk; i < sample; i++) { offset += sizes[i]; } return offset; }
public int getFrameCount() { SampleSizesBox stsz = findFirst(this, SampleSizesBox.class, "mdia", "minf", "stbl", "stsz"); return stsz.getDefaultSize() != 0 ? stsz.getCount() : stsz.getSizes().length; }
public int getFrameCount() { SampleSizesBox stsz = findFirst(this, SampleSizesBox.class, "mdia", "minf", "stbl", "stsz"); return stsz.getDefaultSize() != 0 ? stsz.getCount() : stsz.getSizes().length; }
public int getFrameCount() { SampleSizesBox stsz = NodeBox.findFirstPath(this, SampleSizesBox.class, Box.path("mdia.minf.stbl.stsz")); return stsz.getDefaultSize() != 0 ? stsz.getCount() : stsz.getSizes().length; }
private static void appendSampleSizes(TrakBox trakBox1, TrakBox trakBox2) { SampleSizesBox stsz1 = trakBox1.getStsz(); SampleSizesBox stsz2 = trakBox2.getStsz(); if (stsz1.getDefaultSize() != stsz2.getDefaultSize()) throw new IllegalArgumentException("Can't append to track that has different default sample size"); SampleSizesBox stszr; if (stsz1.getDefaultSize() > 0) { stszr = SampleSizesBox.createSampleSizesBox(stsz1.getDefaultSize(), stsz1.getCount() + stsz2.getCount()); } else { stszr = SampleSizesBox.createSampleSizesBox2(addAllInt(stsz1.getSizes(), stsz2.getSizes())); } NodeBox.findFirstPath(trakBox1, NodeBox.class, Box.path("mdia.minf.stbl")).replace("stsz", stszr); }
public FramesMP4DemuxerTrack(MovieBox mov, TrakBox trak, SeekableByteChannel input) { super(trak); this.input = input; this.movie = mov; SampleSizesBox stsz = findFirst(trak, SampleSizesBox.class, "mdia", "minf", "stbl", "stsz"); SyncSamplesBox stss = Box.findFirst(trak, SyncSamplesBox.class, "mdia", "minf", "stbl", "stss"); SyncSamplesBox stps = Box.findFirst(trak, SyncSamplesBox.class, "mdia", "minf", "stbl", "stps"); CompositionOffsetsBox ctts = Box.findFirst(trak, CompositionOffsetsBox.class, "mdia", "minf", "stbl", "ctts"); compOffsets = ctts == null ? null : ctts.getEntries(); if (stss != null) { syncSamples = stss.getSyncSamples(); } if(stps != null) { partialSync = stps.getSyncSamples(); } sizes = stsz.getSizes(); maxSize = stsz.getMaxSize(); }
public FramesMP4DemuxerTrack(MovieBox mov, TrakBox trak, SeekableByteChannel input) { super(trak); this.input = input; this.movie = mov; SampleSizesBox stsz = findFirst(trak, SampleSizesBox.class, "mdia", "minf", "stbl", "stsz"); SyncSamplesBox stss = Box.findFirst(trak, SyncSamplesBox.class, "mdia", "minf", "stbl", "stss"); SyncSamplesBox stps = Box.findFirst(trak, SyncSamplesBox.class, "mdia", "minf", "stbl", "stps"); CompositionOffsetsBox ctts = Box.findFirst(trak, CompositionOffsetsBox.class, "mdia", "minf", "stbl", "ctts"); compOffsets = ctts == null ? null : ctts.getEntries(); if (stss != null) { syncSamples = stss.getSyncSamples(); } if(stps != null) { partialSync = stps.getSyncSamples(); } sizes = stsz.getSizes(); maxSize = stsz.getMaxSize(); }
public static ByteBuffer getSampleData(int sample, File file) throws IOException { MovieBox moov = MP4Util.parseMovie(file); 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")); SampleSizesBox stsz = NodeBox.findFirstPath(minf, SampleSizesBox.class, Box.path("stbl.stsz")); long sampleOffset = getSampleOffset(sample, stsc, stco, stsz); MappedByteBuffer map = NIOUtils.mapFile(file); map.position((int) sampleOffset); map.limit(map.position() + stsz.getSizes()[sample]); return map; }
size = getFrameSize(); } else { sizes = copyOfRange(stsz.getSizes(), sampleNo, sampleNo + sampleCount);
size = getFrameSize(); } else { sizes = copyOfRange(stsz.getSizes(), sampleNo, sampleNo + sampleCount);
public MP4DemuxerTrack(MovieBox mov, TrakBox trak, SeekableByteChannel input) { super(trak); this.input = input; this.movie = mov; SampleSizesBox stsz = NodeBox.findFirstPath(trak, SampleSizesBox.class, Box.path("mdia.minf.stbl.stsz")); SyncSamplesBox stss = NodeBox.findFirstPath(trak, SyncSamplesBox.class, Box.path("mdia.minf.stbl.stss")); SyncSamplesBox stps = NodeBox.findFirstPath(trak, SyncSamplesBox.class, Box.path("mdia.minf.stbl.stps")); CompositionOffsetsBox ctts = NodeBox.findFirstPath(trak, CompositionOffsetsBox.class, Box.path("mdia.minf.stbl.ctts")); compOffsets = ctts == null ? null : ctts.getEntries(); if (stss != null) { syncSamples = stss.getSyncSamples(); } if (stps != null) { partialSync = stps.getSyncSamples(); } sizes = stsz.getSizes(); }
size = getFrameSize(); } else { sizes = Platform.copyOfRangeI(stsz.getSizes(), sampleNo, sampleNo + sampleCount);