package com.coremedia.iso.boxes; import com.googlecode.mp4parser.AbstractFullBox; import java.nio.ByteBuffer; /** * The optional composition shift least greatest atom summarizes the calculated * minimum and maximum offsets between decode and composition time, as well as * the start and end times, for all samples. This allows a reader to determine * the minimum required time for decode to obtain proper presentation order without * needing to scan the sample table for the range of offsets. The type of the * composition shift least greatest atom is ‘cslg’. */ public class CompositionShiftLeastGreatestAtom extends AbstractFullBox { public CompositionShiftLeastGreatestAtom() { super("cslg"); } // A 32-bit unsigned integer that specifies the calculated value. int compositionOffsetToDisplayOffsetShift; // A 32-bit signed integer that specifies the calculated value. int leastDisplayOffset; // A 32-bit signed integer that specifies the calculated value. int greatestDisplayOffset; //A 32-bit signed integer that specifies the calculated value. int displayStartTime; //A 32-bit signed integer that specifies the calculated value. int displayEndTime; @Override protected long getContentSize() { return 24; } @Override public void _parseDetails(ByteBuffer content) { parseVersionAndFlags(content); compositionOffsetToDisplayOffsetShift = content.getInt(); leastDisplayOffset = content.getInt(); greatestDisplayOffset = content.getInt(); displayStartTime = content.getInt(); displayEndTime = content.getInt(); } @Override protected void getContent(ByteBuffer byteBuffer) { writeVersionAndFlags(byteBuffer); byteBuffer.putInt(compositionOffsetToDisplayOffsetShift); byteBuffer.putInt(leastDisplayOffset); byteBuffer.putInt(greatestDisplayOffset); byteBuffer.putInt(displayStartTime); byteBuffer.putInt(displayEndTime); } public int getCompositionOffsetToDisplayOffsetShift() { return compositionOffsetToDisplayOffsetShift; } public void setCompositionOffsetToDisplayOffsetShift(int compositionOffsetToDisplayOffsetShift) { this.compositionOffsetToDisplayOffsetShift = compositionOffsetToDisplayOffsetShift; } public int getLeastDisplayOffset() { return leastDisplayOffset; } public void setLeastDisplayOffset(int leastDisplayOffset) { this.leastDisplayOffset = leastDisplayOffset; } public int getGreatestDisplayOffset() { return greatestDisplayOffset; } public void setGreatestDisplayOffset(int greatestDisplayOffset) { this.greatestDisplayOffset = greatestDisplayOffset; } public int getDisplayStartTime() { return displayStartTime; } public void setDisplayStartTime(int displayStartTime) { this.displayStartTime = displayStartTime; } public int getDisplayEndTime() { return displayEndTime; } public void setDisplayEndTime(int displayEndTime) { this.displayEndTime = displayEndTime; } }