1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/*
2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Copyright 2008 CoreMedia AG, Hamburg
3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the License);
5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * you may not use this file except in compliance with the License.
6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * You may obtain a copy of the License at
7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *     http://www.apache.org/licenses/LICENSE-2.0
9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Unless required by applicable law or agreed to in writing, software
11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * distributed under the License is distributed on an AS IS BASIS,
12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * See the License for the specific language governing permissions and
14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * limitations under the License.
15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.coremedia.iso.boxes;
18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeReader;
20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.coremedia.iso.IsoTypeWriter;
21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.AbstractFullBox;
22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.nio.ByteBuffer;
24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/**
26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * <code>
27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Box Type: 'mvhd'<br>
28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Container: {@link MovieBox} ('moov')<br>
29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Mandatory: Yes<br>
30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Quantity: Exactly one<br><br>
31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * </code>
32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * This box defines overall information which is media-independent, and relevant to the entire presentation
33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * considered as a whole.
34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class MovieHeaderBox extends AbstractFullBox {
36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private long creationTime;
37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private long modificationTime;
38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private long timescale;
39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private long duration;
40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private double rate = 1.0;
41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private float volume = 1.0f;
42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private long[] matrix = new long[]{0x00010000, 0, 0, 0, 0x00010000, 0, 0, 0, 0x40000000};
43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private long nextTrackId;
44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int previewTime;
46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int previewDuration;
47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int posterTime;
48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int selectionTime;
49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int selectionDuration;
50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int currentTime;
51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public static final String TYPE = "mvhd";
54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public MovieHeaderBox() {
56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        super(TYPE);
57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getCreationTime() {
60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return creationTime;
61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getModificationTime() {
64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return modificationTime;
65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getTimescale() {
68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return timescale;
69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getDuration() {
72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return duration;
73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public double getRate() {
76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return rate;
77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public float getVolume() {
80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return volume;
81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long[] getMatrix() {
84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return matrix;
85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public long getNextTrackId() {
88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return nextTrackId;
89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected long getContentSize() {
92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        long contentSize = 4;
93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (getVersion() == 1) {
94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            contentSize += 28;
95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            contentSize += 16;
97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        contentSize += 80;
99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return contentSize;
100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void _parseDetails(ByteBuffer content) {
104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        parseVersionAndFlags(content);
105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (getVersion() == 1) {
106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            creationTime = IsoTypeReader.readUInt64(content);
107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            modificationTime = IsoTypeReader.readUInt64(content);
108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            timescale = IsoTypeReader.readUInt32(content);
109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            duration = IsoTypeReader.readUInt64(content);
110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            creationTime = IsoTypeReader.readUInt32(content);
112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            modificationTime = IsoTypeReader.readUInt32(content);
113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            timescale = IsoTypeReader.readUInt32(content);
114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            duration = IsoTypeReader.readUInt32(content);
115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        rate = IsoTypeReader.readFixedPoint1616(content);
117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        volume = IsoTypeReader.readFixedPoint88(content);
118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeReader.readUInt16(content);
119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeReader.readUInt32(content);
120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeReader.readUInt32(content);
121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        matrix = new long[9];
122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        for (int i = 0; i < 9; i++) {
123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            matrix[i] = IsoTypeReader.readUInt32(content);
124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        previewTime = content.getInt();
127dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        previewDuration = content.getInt();
128dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        posterTime = content.getInt();
129dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        selectionTime = content.getInt();
130dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        selectionDuration = content.getInt();
131dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        currentTime = content.getInt();
132dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
133dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        nextTrackId = IsoTypeReader.readUInt32(content);
134dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
135dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
136dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
137dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public String toString() {
138dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        StringBuilder result = new StringBuilder();
139dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("MovieHeaderBox[");
140dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("creationTime=").append(getCreationTime());
141dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append(";");
142dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("modificationTime=").append(getModificationTime());
143dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append(";");
144dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("timescale=").append(getTimescale());
145dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append(";");
146dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("duration=").append(getDuration());
147dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append(";");
148dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("rate=").append(getRate());
149dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append(";");
150dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("volume=").append(getVolume());
151dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        for (int i = 0; i < matrix.length; i++) {
152dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            result.append(";");
153dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            result.append("matrix").append(i).append("=").append(matrix[i]);
154dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
155dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append(";");
156dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("nextTrackId=").append(getNextTrackId());
157dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        result.append("]");
158dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return result.toString();
159dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
160dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
161dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
162dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    @Override
163dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    protected void getContent(ByteBuffer byteBuffer) {
164dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        writeVersionAndFlags(byteBuffer);
165dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (getVersion() == 1) {
166dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt64(byteBuffer, creationTime);
167dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt64(byteBuffer, modificationTime);
168dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, timescale);
169dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt64(byteBuffer, duration);
170dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        } else {
171dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, creationTime);
172dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, modificationTime);
173dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, timescale);
174dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, duration);
175dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
176dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeFixedPont1616(byteBuffer, rate);
177dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeFixedPont88(byteBuffer, volume);
178dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt16(byteBuffer, 0);
179dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt32(byteBuffer, 0);
180dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt32(byteBuffer, 0);
181dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
182dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
183dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        for (int i = 0; i < 9; i++) {
184dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            IsoTypeWriter.writeUInt32(byteBuffer, matrix[i]);
185dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
186dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
187dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
188dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.putInt(previewTime);
189dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.putInt(previewDuration);
190dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.putInt(posterTime);
191dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.putInt(selectionTime);
192dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.putInt(selectionDuration);
193dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        byteBuffer.putInt(currentTime);
194dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
195dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        IsoTypeWriter.writeUInt32(byteBuffer, nextTrackId);
196dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
197dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
198dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
199dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setCreationTime(long creationTime) {
200dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.creationTime = creationTime;
201dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
202dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
203dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setModificationTime(long modificationTime) {
204dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.modificationTime = modificationTime;
205dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
206dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
207dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setTimescale(long timescale) {
208dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.timescale = timescale;
209dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
210dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
211dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setDuration(long duration) {
212dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.duration = duration;
213dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
214dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
215dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setRate(double rate) {
216dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.rate = rate;
217dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
218dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
219dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setVolume(float volume) {
220dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.volume = volume;
221dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
222dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
223dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setMatrix(long[] matrix) {
224dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.matrix = matrix;
225dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
226dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
227dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setNextTrackId(long nextTrackId) {
228dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.nextTrackId = nextTrackId;
229dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
230dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
231dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getPreviewTime() {
232dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return previewTime;
233dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
234dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
235dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setPreviewTime(int previewTime) {
236dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.previewTime = previewTime;
237dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
238dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
239dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getPreviewDuration() {
240dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return previewDuration;
241dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
242dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
243dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setPreviewDuration(int previewDuration) {
244dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.previewDuration = previewDuration;
245dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
246dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
247dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getPosterTime() {
248dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return posterTime;
249dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
250dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
251dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setPosterTime(int posterTime) {
252dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.posterTime = posterTime;
253dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
254dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
255dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getSelectionTime() {
256dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return selectionTime;
257dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
258dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
259dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setSelectionTime(int selectionTime) {
260dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.selectionTime = selectionTime;
261dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
262dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
263dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getSelectionDuration() {
264dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return selectionDuration;
265dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
266dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
267dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setSelectionDuration(int selectionDuration) {
268dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.selectionDuration = selectionDuration;
269dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
270dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
271dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int getCurrentTime() {
272dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return currentTime;
273dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
274dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
275dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void setCurrentTime(int currentTime) {
276dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        this.currentTime = currentTime;
277dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
278dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}
279