package com.coremedia.iso.boxes.sampleentry; import com.coremedia.iso.BoxParser; import com.coremedia.iso.IsoTypeReader; import com.coremedia.iso.IsoTypeWriter; import java.io.IOException; import java.nio.ByteBuffer; import com.googlecode.mp4parser.DataSource; import java.nio.channels.WritableByteChannel; import java.util.Arrays; public class MpegSampleEntry extends AbstractSampleEntry { public MpegSampleEntry() { super("mp4s"); } public MpegSampleEntry(String type) { super(type); } @Override public void parse(DataSource dataSource, ByteBuffer header, long contentSize, BoxParser boxParser) throws IOException { ByteBuffer bb = ByteBuffer.allocate(8); dataSource.read(bb); bb.position(6);// ignore 6 reserved bytes; dataReferenceIndex = IsoTypeReader.readUInt16(bb); parseContainer(dataSource, contentSize - 8, boxParser); } @Override public void getBox(WritableByteChannel writableByteChannel) throws IOException { writableByteChannel.write(getHeader()); ByteBuffer bb = ByteBuffer.allocate(8); bb.position(6); IsoTypeWriter.writeUInt16(bb, dataReferenceIndex); writableByteChannel.write((ByteBuffer) bb.rewind()); writeContainer(writableByteChannel); } public String toString() { return "MpegSampleEntry" + Arrays.asList(getBoxes()); } @Override public long getSize() { long s = getContainerSize(); long t = 8; // bytes to container start return s + t + ((largeBox || (s + t) >= (1L << 32)) ? 16 : 8); } }