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 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; }
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 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(); }
public static WebOptimizedMP4Muxer withOldHeader(SeekableByteChannel output, Brand brand, MovieBox oldHeader) throws IOException { int size = (int) oldHeader.getHeader().getSize(); TrakBox vt = oldHeader.getVideoTrack(); SampleToChunkBox stsc = vt.getStsc(); size -= stsc.getSampleToChunk().length * 12; size += 12; ChunkOffsetsBox stco = vt.getStco(); if (stco != null) { size -= stco.getChunkOffsets().length << 2; size += vt.getFrameCount() << 3; } else { ChunkOffsets64Box co64 = vt.getCo64(); size -= co64.getChunkOffsets().length << 3; size += vt.getFrameCount() << 3; } return new WebOptimizedMP4Muxer(output, brand, size + (size >> 1)); }