1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.coremedia.iso.boxes; 2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeReader; 4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeWriter; 5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.AbstractFullBox; 6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer; 8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.Collections; 9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.LinkedList; 10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.List; 11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class ProgressiveDownloadInformationBox extends AbstractFullBox { 13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu List<Entry> entries = Collections.emptyList(); 16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public ProgressiveDownloadInformationBox() { 18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu super("pdin"); 19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected long getContentSize() { 23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return 4 + entries.size() * 8; 24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu protected void getContent(ByteBuffer byteBuffer) { 28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writeVersionAndFlags(byteBuffer); 29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (Entry entry : entries) { 30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, entry.getRate()); 31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu IsoTypeWriter.writeUInt32(byteBuffer, entry.getInitialDelay()); 32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public List<Entry> getEntries() { 36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return entries; 37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setEntries(List<Entry> entries) { 40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.entries = entries; 41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void _parseDetails(ByteBuffer content) { 45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu parseVersionAndFlags(content); 46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu entries = new LinkedList<Entry>(); 47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu while (content.remaining() >= 8) { 48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu Entry entry = new Entry(IsoTypeReader.readUInt32(content), IsoTypeReader.readUInt32(content)); 49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu entries.add(entry); 50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static class Entry { 55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu long rate; 56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu long initialDelay; 57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public Entry(long rate, long initialDelay) { 59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.rate = rate; 60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.initialDelay = initialDelay; 61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public long getRate() { 64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return rate; 65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setRate(long rate) { 68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.rate = rate; 69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public long getInitialDelay() { 72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return initialDelay; 73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void setInitialDelay(long initialDelay) { 76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu this.initialDelay = initialDelay; 77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String toString() { 81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return "Entry{" + 82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "rate=" + rate + 83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", initialDelay=" + initialDelay + 84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu '}'; 85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String toString() { 90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return "ProgressiveDownloadInfoBox{" + 91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "entries=" + entries + 92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu '}'; 93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}