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}