public boolean isDataOffsetPresent() { return (getFlags() & 0x1) == 1; }
public boolean isFirstSampleFlagsPresent() { return (getFlags() & 0x4) == 0x4; }
public boolean isSampleSizePresent() { return (getFlags() & 0x200) == 0x200; }
public boolean isSampleDurationPresent() { return (getFlags() & 0x100) == 0x100; }
public boolean isSampleFlagsPresent() { return (getFlags() & 0x400) == 0x400; }
public boolean isSampleCompositionTimeOffsetPresent() { return (getFlags() & 0x800) == 0x800; }
protected long getContentSize() { long size = 8; int flags = getFlags(); if ((flags & 0x1) == 0x1) { //dataOffsetPresent size += 4; } if ((flags & 0x4) == 0x4) { //firstSampleFlagsPresent size += 4; } long entrySize = 0; if ((flags & 0x100) == 0x100) { //sampleDurationPresent entrySize += 4; } if ((flags & 0x200) == 0x200) { //sampleSizePresent entrySize += 4; } if ((flags & 0x400) == 0x400) { //sampleFlagsPresent entrySize += 4; } if ((flags & 0x800) == 0x800) { //sampleCompositionTimeOffsetPresent entrySize += 4; } size += entrySize * entries.size(); return size; }
@Override public void _parseDetails(ByteBuffer content) { parseVersionAndFlags(content); long sampleCount = IsoTypeReader.readUInt32(content); if ((getFlags() & 0x1) == 1) { //dataOffsetPresent dataOffset = CastUtils.l2i(IsoTypeReader.readUInt32(content)); } else { dataOffset = -1; } if ((getFlags() & 0x4) == 0x4) { //firstSampleFlagsPresent firstSampleFlags = new SampleFlags(content); } for (int i = 0; i < sampleCount; i++) { Entry entry = new Entry(); if ((getFlags() & 0x100) == 0x100) { //sampleDurationPresent entry.sampleDuration = IsoTypeReader.readUInt32(content); } if ((getFlags() & 0x200) == 0x200) { //sampleSizePresent entry.sampleSize = IsoTypeReader.readUInt32(content); } if ((getFlags() & 0x400) == 0x400) { //sampleFlagsPresent entry.sampleFlags = new SampleFlags(content); } if ((getFlags() & 0x800) == 0x800) { //sampleCompositionTimeOffsetPresent entry.sampleCompositionTimeOffset = content.getInt(); } entries.add(entry); } }
protected void getContent(ByteBuffer byteBuffer) { writeVersionAndFlags(byteBuffer); IsoTypeWriter.writeUInt32(byteBuffer, entries.size()); int flags = getFlags(); if ((flags & 0x1) == 1) { //dataOffsetPresent IsoTypeWriter.writeUInt32(byteBuffer, dataOffset); } if ((flags & 0x4) == 0x4) { //firstSampleFlagsPresent firstSampleFlags.getContent(byteBuffer); } for (Entry entry : entries) { if ((flags & 0x100) == 0x100) { //sampleDurationPresent IsoTypeWriter.writeUInt32(byteBuffer, entry.sampleDuration); } if ((flags & 0x200) == 0x200) { //sampleSizePresent IsoTypeWriter.writeUInt32(byteBuffer, entry.sampleSize); } if ((flags & 0x400) == 0x400) { //sampleFlagsPresent entry.sampleFlags.getContent(byteBuffer); } if ((flags & 0x800) == 0x800) { //sampleCompositionTimeOffsetPresent if (getVersion() == 0) { IsoTypeWriter.writeUInt32(byteBuffer, entry.sampleCompositionTimeOffset); } else { byteBuffer.putInt((int) entry.sampleCompositionTimeOffset); } } } }