public ChunkOffsetsBox(long[] chunkOffsets) { super(new Header(fourcc())); this.chunkOffsets = chunkOffsets; }
public static int getFirstSampleAtChunk(int chunk, SampleToChunkBox stsc, ChunkOffsetsBox stco) { int chunks = stco.getChunkOffsets().length; int samples = 0; for (int i = 1; i <= chunks; i++) { if (i == chunk) { break; } int samplesInChunk = getSamplesInChunk(i, stsc); samples += samplesInChunk; } return samples; }
public static ChunkOffsetsBox createChunkOffsetsBox(long[] chunkOffsets) { ChunkOffsetsBox stco = new ChunkOffsetsBox(new Header(fourcc())); stco.chunkOffsets = chunkOffsets; return stco; }
private static void appendChunkOffsets(TrakBox trakBox1, TrakBox trakBox2) { ChunkOffsetsBox stco1 = trakBox1.getStco(); ChunkOffsets64Box co641 = trakBox1.getCo64(); ChunkOffsetsBox stco2 = trakBox2.getStco(); ChunkOffsets64Box co642 = trakBox2.getCo64(); long[] off1 = stco1 == null ? co641.getChunkOffsets() : stco1.getChunkOffsets(); long[] off2 = stco2 == null ? co642.getChunkOffsets() : stco2.getChunkOffsets(); NodeBox stbl1 = NodeBox.findFirstPath(trakBox1, NodeBox.class, Box.path("mdia.minf.stbl")); stbl1.removeChildren("stco", "co64"); stbl1.add(co641 == null && co642 == null ? ChunkOffsetsBox.createChunkOffsetsBox(ArrayUtil.addAllLong(off1, off2)) : ChunkOffsets64Box.createChunkOffsets64Box(ArrayUtil.addAllLong(off1, off2))); }
public Box getChunkOffsets(List<Chunk> chunks) { long[] result = new long[chunks.size()]; boolean longBox = false; int i = 0; for (Chunk chunk : chunks) { if (chunk.getOffset() >= 0x100000000L) longBox = true; result[i++] = chunk.getOffset(); } return longBox ? ChunkOffsets64Box.createChunkOffsets64Box(result) : ChunkOffsetsBox.createChunkOffsetsBox(result); }
public static int getChunkBySample(int sampleOfInterest, ChunkOffsetsBox stco, SampleToChunkBox stsc) { int chunks = stco.getChunkOffsets().length; int startSample = 0; int endSample = 0; for (int i = 1; i <= chunks; i++) { int samplesInChunk = getSamplesInChunk(i, stsc); endSample = startSample + samplesInChunk; if (sampleOfInterest >= startSample && sampleOfInterest < endSample) { return i; } startSample = endSample; } return -1; }
public ChunkOffsetsBox(long[] chunkOffsets) { super(new Header(fourcc())); this.chunkOffsets = chunkOffsets; }
private int calcSpaceReq(MovieBox movie) { int sum = 0; TrakBox[] tracks = movie.getTracks(); for (int i = 0; i < tracks.length; i++) { TrakBox trakBox = tracks[i]; ChunkOffsetsBox stco = trakBox.getStco(); if (stco != null) sum += stco.getChunkOffsets().length * 4; } return sum; }
public ChunkOffsetsBox() { super(new Header(fourcc())); }
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 ChunkOffsetsBox() { super(new Header(fourcc())); }
public ChunkWriter(TrakBox trak, SeekableByteChannel[] inputs, SeekableByteChannel out) { entries = NodeBox.findAll(trak, SampleEntry.class, "mdia", "minf", "stbl", "stsd", null); ChunkOffsetsBox stco = NodeBox.findFirst(trak, ChunkOffsetsBox.class, "mdia", "minf", "stbl", "stco"); ChunkOffsets64Box co64 = NodeBox.findFirst(trak, ChunkOffsets64Box.class, "mdia", "minf", "stbl", "co64"); int size; if (stco != null) size = stco.getChunkOffsets().length; else size = co64.getChunkOffsets().length; this.inputs = inputs; offsets = new long[size]; this.out = out; this.trak = trak; }
mappings.put(SampleToChunkBox.fourcc(), SampleToChunkBox.class); mappings.put(SampleSizesBox.fourcc(), SampleSizesBox.class); mappings.put(ChunkOffsetsBox.fourcc(), ChunkOffsetsBox.class); mappings.put("mvex", NodeBox.class); mappings.put("moof", NodeBox.class);
public ChunkWriter(TrakBox trak, SeekableByteChannel[] inputs, SeekableByteChannel out) { entries = NodeBox.findAll(trak, SampleEntry.class, "mdia", "minf", "stbl", "stsd", null); ChunkOffsetsBox stco = NodeBox.findFirst(trak, ChunkOffsetsBox.class, "mdia", "minf", "stbl", "stco"); ChunkOffsets64Box co64 = NodeBox.findFirst(trak, ChunkOffsets64Box.class, "mdia", "minf", "stbl", "co64"); int size; if (stco != null) size = stco.getChunkOffsets().length; else size = co64.getChunkOffsets().length; this.inputs = inputs; offsets = new long[size]; this.out = out; this.trak = trak; }
mappings.put(SampleToChunkBox.fourcc(), SampleToChunkBox.class); mappings.put(SampleSizesBox.fourcc(), SampleSizesBox.class); mappings.put(ChunkOffsetsBox.fourcc(), ChunkOffsetsBox.class); mappings.put("keys", KeysBox.class); mappings.put(IListBox.fourcc(), IListBox.class);
public ChunkWriter(TrakBox trak, SeekableByteChannel[] inputs, SeekableByteChannel out) { this.buf = new byte[8092]; entries = trak.getSampleEntries(); ChunkOffsetsBox stco = trak.getStco(); ChunkOffsets64Box co64 = trak.getCo64(); int size; if (stco != null) size = stco.getChunkOffsets().length; else size = co64.getChunkOffsets().length; this.inputs = inputs; offsets = new long[size]; this.out = out; this.trak = trak; }
mappings.put(SampleToChunkBox.fourcc(), SampleToChunkBox.class); mappings.put(SampleSizesBox.fourcc(), SampleSizesBox.class); mappings.put(ChunkOffsetsBox.fourcc(), ChunkOffsetsBox.class); mappings.put("mvex", NodeBox.class); mappings.put("moof", NodeBox.class);
public ChunkReader(TrakBox trakBox) { TimeToSampleBox stts = NodeBox.findFirst(trakBox, TimeToSampleBox.class, "mdia", "minf", "stbl", "stts"); tts = stts.getEntries(); ChunkOffsetsBox stco = NodeBox.findFirst(trakBox, ChunkOffsetsBox.class, "mdia", "minf", "stbl", "stco"); ChunkOffsets64Box co64 = NodeBox.findFirst(trakBox, ChunkOffsets64Box.class, "mdia", "minf", "stbl", "co64"); stsz = NodeBox.findFirst(trakBox, SampleSizesBox.class, "mdia", "minf", "stbl", "stsz"); SampleToChunkBox stsc = NodeBox.findFirst(trakBox, SampleToChunkBox.class, "mdia", "minf", "stbl", "stsc"); if (stco != null) chunkOffsets = stco.getChunkOffsets(); else chunkOffsets = co64.getChunkOffsets(); sampleToChunk = stsc.getSampleToChunk(); stsd = NodeBox.findFirst(trakBox, SampleDescriptionBox.class, "mdia", "minf", "stbl", "stsd"); }
public ChunkReader(TrakBox trakBox) { TimeToSampleBox stts = NodeBox.findFirst(trakBox, TimeToSampleBox.class, "mdia", "minf", "stbl", "stts"); tts = stts.getEntries(); ChunkOffsetsBox stco = NodeBox.findFirst(trakBox, ChunkOffsetsBox.class, "mdia", "minf", "stbl", "stco"); ChunkOffsets64Box co64 = NodeBox.findFirst(trakBox, ChunkOffsets64Box.class, "mdia", "minf", "stbl", "co64"); stsz = NodeBox.findFirst(trakBox, SampleSizesBox.class, "mdia", "minf", "stbl", "stsz"); SampleToChunkBox stsc = NodeBox.findFirst(trakBox, SampleToChunkBox.class, "mdia", "minf", "stbl", "stsc"); if (stco != null) chunkOffsets = stco.getChunkOffsets(); else chunkOffsets = co64.getChunkOffsets(); sampleToChunk = stsc.getSampleToChunk(); stsd = NodeBox.findFirst(trakBox, SampleDescriptionBox.class, "mdia", "minf", "stbl", "stsd"); }
public ChunkReader(TrakBox trakBox) { TimeToSampleBox stts = trakBox.getStts(); tts = stts.getEntries(); ChunkOffsetsBox stco = trakBox.getStco(); ChunkOffsets64Box co64 = trakBox.getCo64(); stsz = trakBox.getStsz(); SampleToChunkBox stsc = trakBox.getStsc(); if (stco != null) chunkOffsets = stco.getChunkOffsets(); else chunkOffsets = co64.getChunkOffsets(); sampleToChunk = stsc.getSampleToChunk(); stsd = trakBox.getStsd(); }