1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.googlecode.mp4parser.boxes.threegpp26244;
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 Zhuimport com.googlecode.mp4parser.boxes.mp4.objectdescriptors.BitReaderBuffer;
7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.boxes.mp4.objectdescriptors.BitWriterBuffer;
8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer;
10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.ArrayList;
11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.List;
12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/**
14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * <pre>
15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * aligned(8) class SegmentIndexBox extends FullBox(‘sidx’, version, 0) {
16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  unsigned int(32) reference_ID;
17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  unsigned int(32) timescale;
18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  if (version==0)
19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  {
20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   unsigned int(32) earliest_presentation_time;
21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   unsigned int(32) first_offset;
22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  }
23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  else
24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  {
25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   unsigned int(64) earliest_presentation_time;
26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   unsigned int(64) first_offset;
27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  }
28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  unsigned int(16) reserved = 0;
29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  unsigned int(16) reference_count;
30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  for(i=1; i <= reference_count; i++)
31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  {
32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   bit (1)            reference_type;
33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   unsigned int(31)   referenced_size;
34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   unsigned int(32)   subsegment_duration;
35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   bit(1)             starts_with_SAP;
36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   unsigned int(3)    SAP_type;
37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *   unsigned int(28)   SAP_delta_time;
38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *  }
39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * }
40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * </pre>
41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class SegmentIndexBox extends AbstractFullBox {
43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public static final String TYPE = "sidx";
44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    List<Entry> entries = new ArrayList<Entry>();
45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    long referenceId;
47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    long timeScale;
48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    long earliestPresentationTime;
49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    long firstOffset;
50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    int reserved;
51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public SegmentIndexBox() {
54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        super(TYPE);
55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected long getContentSize() {
59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        long size = 4;
60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        size += 4;
61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        size += 4;
62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        size += getVersion() == 0 ? 8 : 16;
63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        size += 2; // reserved
64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        size += 2; // reference count
65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        size += entries.size() * 12;
67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return size;
69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected void getContent(ByteBuffer byteBuffer) {
73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        writeVersionAndFlags(byteBuffer);
74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt32(byteBuffer, referenceId);
75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt32(byteBuffer, timeScale);
76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (getVersion() == 0) {
77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, earliestPresentationTime);
78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, firstOffset);
79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt64(byteBuffer, earliestPresentationTime);
81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt64(byteBuffer, firstOffset);
82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt16(byteBuffer, reserved);
84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt16(byteBuffer, entries.size());
85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        for (Entry entry : entries) {
86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            BitWriterBuffer b = new BitWriterBuffer(byteBuffer);
87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            b.writeBits(entry.getReferenceType(), 1);
88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            b.writeBits(entry.getReferencedSize(), 31);
89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, entry.getSubsegmentDuration());
90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            b = new BitWriterBuffer(byteBuffer);
91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            b.writeBits(entry.getStartsWithSap(), 1);
92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            b.writeBits(entry.getSapType(), 3);
93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            b.writeBits(entry.getSapDeltaTime(), 28);
94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected void _parseDetails(ByteBuffer content) {
100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        parseVersionAndFlags(content);
101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        referenceId = IsoTypeReader.readUInt32(content);
102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        timeScale = IsoTypeReader.readUInt32(content);
103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (getVersion() == 0) {
104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            earliestPresentationTime = IsoTypeReader.readUInt32(content);
105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            firstOffset = IsoTypeReader.readUInt32(content);
106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            earliestPresentationTime = IsoTypeReader.readUInt64(content);
108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            firstOffset = IsoTypeReader.readUInt64(content);
109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        reserved = IsoTypeReader.readUInt16(content);
111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int numEntries = IsoTypeReader.readUInt16(content);
112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        for (int i = 0; i < numEntries; i++) {
113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            BitReaderBuffer b = new BitReaderBuffer(content);
114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            Entry e = new Entry();
115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            e.setReferenceType((byte) b.readBits(1));
116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            e.setReferencedSize(b.readBits(31));
117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            e.setSubsegmentDuration(IsoTypeReader.readUInt32(content));
118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            b = new BitReaderBuffer(content);
119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            e.setStartsWithSap((byte) b.readBits(1));
120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            e.setSapType((byte) b.readBits(3));
121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            e.setSapDeltaTime(b.readBits(28));
122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            entries.add(e);
123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
127dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public List<Entry> getEntries() {
128dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return entries;
129dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
130dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
131dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setEntries(List<Entry> entries) {
132dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.entries = entries;
133dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
134dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
135dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getReferenceId() {
136dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return referenceId;
137dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
138dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
139dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setReferenceId(long referenceId) {
140dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.referenceId = referenceId;
141dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
142dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
143dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getTimeScale() {
144dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return timeScale;
145dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
146dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
147dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setTimeScale(long timeScale) {
148dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.timeScale = timeScale;
149dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
150dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
151dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getEarliestPresentationTime() {
152dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return earliestPresentationTime;
153dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
154dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
155dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setEarliestPresentationTime(long earliestPresentationTime) {
156dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.earliestPresentationTime = earliestPresentationTime;
157dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
158dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
159dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getFirstOffset() {
160dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return firstOffset;
161dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
162dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
163dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setFirstOffset(long firstOffset) {
164dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.firstOffset = firstOffset;
165dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
166dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
167dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getReserved() {
168dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return reserved;
169dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
170dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
171dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setReserved(int reserved) {
172dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.reserved = reserved;
173dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
174dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
175dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public static class Entry {
176dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byte referenceType;
177dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int referencedSize;
178dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        long subsegmentDuration;
179dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byte startsWithSap;
180dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byte sapType;
181dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int sapDeltaTime;
182dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
183dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public Entry() {
184dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
185dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
186dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public Entry(byte referenceType, int referencedSize, long subsegmentDuration, byte startsWithSap, byte sapType, int sapDeltaTime) {
187dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.referenceType = referenceType;
188dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.referencedSize = referencedSize;
189dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.subsegmentDuration = subsegmentDuration;
190dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.startsWithSap = startsWithSap;
191dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.sapType = sapType;
192dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.sapDeltaTime = sapDeltaTime;
193dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
194dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
195dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public byte getReferenceType() {
196dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return referenceType;
197dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
198dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
199dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void setReferenceType(byte referenceType) {
200dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.referenceType = referenceType;
201dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
202dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
203dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public int getReferencedSize() {
204dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return referencedSize;
205dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
206dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
207dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void setReferencedSize(int referencedSize) {
208dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.referencedSize = referencedSize;
209dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
210dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
211dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public long getSubsegmentDuration() {
212dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return subsegmentDuration;
213dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
214dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
215dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void setSubsegmentDuration(long subsegmentDuration) {
216dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.subsegmentDuration = subsegmentDuration;
217dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
218dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
219dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public byte getStartsWithSap() {
220dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return startsWithSap;
221dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
222dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
223dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void setStartsWithSap(byte startsWithSap) {
224dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.startsWithSap = startsWithSap;
225dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
226dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
227dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public byte getSapType() {
228dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return sapType;
229dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
230dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
231dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void setSapType(byte sapType) {
232dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.sapType = sapType;
233dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
234dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
235dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public int getSapDeltaTime() {
236dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return sapDeltaTime;
237dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
238dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
239dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public void setSapDeltaTime(int sapDeltaTime) {
240dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            this.sapDeltaTime = sapDeltaTime;
241dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
242dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
243dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        @Override
244dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public String toString() {
245dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return "Entry{" +
246dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                    "referenceType=" + referenceType +
247dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                    ", referencedSize=" + referencedSize +
248dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                    ", subsegmentDuration=" + subsegmentDuration +
249dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                    ", startsWithSap=" + startsWithSap +
250dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                    ", sapType=" + sapType +
251dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                    ", sapDeltaTime=" + sapDeltaTime +
252dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                    '}';
253dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
254dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
255dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        @Override
256dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public boolean equals(Object o) {
257dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            if (this == o) return true;
258dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            if (o == null || getClass() != o.getClass()) return false;
259dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
260dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            Entry entry = (Entry) o;
261dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
262dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            if (referenceType != entry.referenceType) return false;
263dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            if (referencedSize != entry.referencedSize) return false;
264dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            if (sapDeltaTime != entry.sapDeltaTime) return false;
265dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            if (sapType != entry.sapType) return false;
266dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            if (startsWithSap != entry.startsWithSap) return false;
267dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            if (subsegmentDuration != entry.subsegmentDuration) return false;
268dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
269dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return true;
270dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
271dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
272dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        @Override
273dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        public int hashCode() {
274dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            int result = (int) referenceType;
275dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            result = 31 * result + referencedSize;
276dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            result = 31 * result + (int) (subsegmentDuration ^ (subsegmentDuration >>> 32));
277dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            result = 31 * result + (int) startsWithSap;
278dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            result = 31 * result + (int) sapType;
279dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            result = 31 * result + sapDeltaTime;
280dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            return result;
281dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
282dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
283dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}
284