• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012 Sebastian Annies, Hamburg
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.googlecode.mp4parser.boxes.apple;
17 
18 import com.coremedia.iso.IsoTypeReader;
19 import com.coremedia.iso.IsoTypeWriter;
20 import com.coremedia.iso.boxes.sampleentry.SampleEntry;
21 
22 import java.nio.ByteBuffer;
23 
24 /**
25  * Entry type for timed text samples defined in the timed text specification (ISO/IEC 14496-17).
26  */
27 public class QuicktimeTextSampleEntry extends SampleEntry {
28 
29     public static final String TYPE = "text";
30 
31     int displayFlags;
32     int textJustification;
33 
34     int backgroundR;
35     int backgroundG;
36     int backgroundB;
37 
38     long defaultTextBox;
39     long reserved1;
40 
41     short fontNumber;
42     short fontFace;
43     byte reserved2;
44     short reserved3;
45 
46     int foregroundR = 65535;
47     int foregroundG = 65535;
48     int foregroundB = 65535;
49 
50     String fontName = "";
51 
QuicktimeTextSampleEntry()52     public QuicktimeTextSampleEntry() {
53         super(TYPE);
54     }
55 
56     @Override
_parseDetails(ByteBuffer content)57     public void _parseDetails(ByteBuffer content) {
58         _parseReservedAndDataReferenceIndex(content);
59 
60         displayFlags = content.getInt();
61         textJustification = content.getInt();
62         backgroundR = IsoTypeReader.readUInt16(content);
63         backgroundG = IsoTypeReader.readUInt16(content);
64         backgroundB = IsoTypeReader.readUInt16(content);
65         defaultTextBox = IsoTypeReader.readUInt64(content);
66         reserved1 = IsoTypeReader.readUInt64(content);
67         fontNumber = content.getShort();
68         fontFace = content.getShort();
69         reserved2 = content.get();
70         reserved3 = content.getShort();
71         foregroundR = IsoTypeReader.readUInt16(content);
72         foregroundG = IsoTypeReader.readUInt16(content);
73         foregroundB = IsoTypeReader.readUInt16(content);
74 
75         if (content.remaining() > 0) {
76             int length = IsoTypeReader.readUInt8(content);
77             byte[] myFontName = new byte[length];
78             content.get(myFontName);
79             fontName = new String(myFontName);
80         } else {
81             fontName = null;
82         }
83     }
84 
85 
getContentSize()86     protected long getContentSize() {
87         return 52 + (fontName != null ? fontName.length() : 0);
88     }
89 
90 
getDisplayFlags()91     public int getDisplayFlags() {
92         return displayFlags;
93     }
94 
setDisplayFlags(int displayFlags)95     public void setDisplayFlags(int displayFlags) {
96         this.displayFlags = displayFlags;
97     }
98 
getTextJustification()99     public int getTextJustification() {
100         return textJustification;
101     }
102 
setTextJustification(int textJustification)103     public void setTextJustification(int textJustification) {
104         this.textJustification = textJustification;
105     }
106 
getBackgroundR()107     public int getBackgroundR() {
108         return backgroundR;
109     }
110 
setBackgroundR(int backgroundR)111     public void setBackgroundR(int backgroundR) {
112         this.backgroundR = backgroundR;
113     }
114 
getBackgroundG()115     public int getBackgroundG() {
116         return backgroundG;
117     }
118 
setBackgroundG(int backgroundG)119     public void setBackgroundG(int backgroundG) {
120         this.backgroundG = backgroundG;
121     }
122 
getBackgroundB()123     public int getBackgroundB() {
124         return backgroundB;
125     }
126 
setBackgroundB(int backgroundB)127     public void setBackgroundB(int backgroundB) {
128         this.backgroundB = backgroundB;
129     }
130 
getDefaultTextBox()131     public long getDefaultTextBox() {
132         return defaultTextBox;
133     }
134 
setDefaultTextBox(long defaultTextBox)135     public void setDefaultTextBox(long defaultTextBox) {
136         this.defaultTextBox = defaultTextBox;
137     }
138 
getReserved1()139     public long getReserved1() {
140         return reserved1;
141     }
142 
setReserved1(long reserved1)143     public void setReserved1(long reserved1) {
144         this.reserved1 = reserved1;
145     }
146 
getFontNumber()147     public short getFontNumber() {
148         return fontNumber;
149     }
150 
setFontNumber(short fontNumber)151     public void setFontNumber(short fontNumber) {
152         this.fontNumber = fontNumber;
153     }
154 
getFontFace()155     public short getFontFace() {
156         return fontFace;
157     }
158 
setFontFace(short fontFace)159     public void setFontFace(short fontFace) {
160         this.fontFace = fontFace;
161     }
162 
getReserved2()163     public byte getReserved2() {
164         return reserved2;
165     }
166 
setReserved2(byte reserved2)167     public void setReserved2(byte reserved2) {
168         this.reserved2 = reserved2;
169     }
170 
getReserved3()171     public short getReserved3() {
172         return reserved3;
173     }
174 
setReserved3(short reserved3)175     public void setReserved3(short reserved3) {
176         this.reserved3 = reserved3;
177     }
178 
getForegroundR()179     public int getForegroundR() {
180         return foregroundR;
181     }
182 
setForegroundR(int foregroundR)183     public void setForegroundR(int foregroundR) {
184         this.foregroundR = foregroundR;
185     }
186 
getForegroundG()187     public int getForegroundG() {
188         return foregroundG;
189     }
190 
setForegroundG(int foregroundG)191     public void setForegroundG(int foregroundG) {
192         this.foregroundG = foregroundG;
193     }
194 
getForegroundB()195     public int getForegroundB() {
196         return foregroundB;
197     }
198 
setForegroundB(int foregroundB)199     public void setForegroundB(int foregroundB) {
200         this.foregroundB = foregroundB;
201     }
202 
getFontName()203     public String getFontName() {
204         return fontName;
205     }
206 
setFontName(String fontName)207     public void setFontName(String fontName) {
208         this.fontName = fontName;
209     }
210 
211     @Override
getContent(ByteBuffer byteBuffer)212     protected void getContent(ByteBuffer byteBuffer) {
213         _writeReservedAndDataReferenceIndex(byteBuffer);
214         byteBuffer.putInt(displayFlags);
215         byteBuffer.putInt(textJustification);
216         IsoTypeWriter.writeUInt16(byteBuffer, backgroundR);
217         IsoTypeWriter.writeUInt16(byteBuffer, backgroundG);
218         IsoTypeWriter.writeUInt16(byteBuffer, backgroundB);
219         IsoTypeWriter.writeUInt64(byteBuffer, defaultTextBox);
220         IsoTypeWriter.writeUInt64(byteBuffer, reserved1);
221         byteBuffer.putShort(fontNumber);
222         byteBuffer.putShort(fontFace);
223         byteBuffer.put(reserved2);
224         byteBuffer.putShort(reserved3);
225 
226         IsoTypeWriter.writeUInt16(byteBuffer, foregroundR);
227         IsoTypeWriter.writeUInt16(byteBuffer, foregroundG);
228         IsoTypeWriter.writeUInt16(byteBuffer, foregroundB);
229         if (fontName != null) {
230             IsoTypeWriter.writeUInt8(byteBuffer, fontName.length());
231             byteBuffer.put(fontName.getBytes());
232         }
233 
234     }
235 
236 
237 }
238