1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.coremedia.iso.boxes; 2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.AbstractFullBox; 4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer; 6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/** 8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * The optional composition shift least greatest atom summarizes the calculated 9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * minimum and maximum offsets between decode and composition time, as well as 10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * the start and end times, for all samples. This allows a reader to determine 11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * the minimum required time for decode to obtain proper presentation order without 12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * needing to scan the sample table for the range of offsets. The type of the 13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * composition shift least greatest atom is ‘cslg’. 14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class CompositionShiftLeastGreatestAtom extends AbstractFullBox { 16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public CompositionShiftLeastGreatestAtom() { 17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu super("cslg"); 18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu // A 32-bit unsigned integer that specifies the calculated value. 21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int compositionOffsetToDisplayOffsetShift; 22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu // A 32-bit signed integer that specifies the calculated value. 24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int leastDisplayOffset; 25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu // A 32-bit signed integer that specifies the calculated value. 27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int greatestDisplayOffset; 28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //A 32-bit signed integer that specifies the calculated value. 30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int displayStartTime; 31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu //A 32-bit signed integer that specifies the calculated value. 33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int displayEndTime; 34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected long getContentSize() { 38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return 24; 39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void _parseDetails(ByteBuffer content) { 43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseVersionAndFlags(content); 44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu compositionOffsetToDisplayOffsetShift = content.getInt(); 45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu leastDisplayOffset = content.getInt(); 46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu greatestDisplayOffset = content.getInt(); 47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu displayStartTime = content.getInt(); 48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu displayEndTime = content.getInt(); 49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected void getContent(ByteBuffer byteBuffer) { 53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writeVersionAndFlags(byteBuffer); 54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.putInt(compositionOffsetToDisplayOffsetShift); 55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.putInt(leastDisplayOffset); 56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.putInt(greatestDisplayOffset); 57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.putInt(displayStartTime); 58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu byteBuffer.putInt(displayEndTime); 59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getCompositionOffsetToDisplayOffsetShift() { 63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return compositionOffsetToDisplayOffsetShift; 64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setCompositionOffsetToDisplayOffsetShift(int compositionOffsetToDisplayOffsetShift) { 67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.compositionOffsetToDisplayOffsetShift = compositionOffsetToDisplayOffsetShift; 68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getLeastDisplayOffset() { 71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return leastDisplayOffset; 72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setLeastDisplayOffset(int leastDisplayOffset) { 75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.leastDisplayOffset = leastDisplayOffset; 76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getGreatestDisplayOffset() { 79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return greatestDisplayOffset; 80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setGreatestDisplayOffset(int greatestDisplayOffset) { 83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.greatestDisplayOffset = greatestDisplayOffset; 84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getDisplayStartTime() { 87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return displayStartTime; 88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setDisplayStartTime(int displayStartTime) { 91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.displayStartTime = displayStartTime; 92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int getDisplayEndTime() { 95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return displayEndTime; 96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setDisplayEndTime(int displayEndTime) { 99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.displayEndTime = displayEndTime; 100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu} 102