diff options
Diffstat (limited to 'isoparser/src/main/java/com/googlecode/mp4parser/boxes/apple/QuicktimeTextSampleEntry.java')
-rw-r--r-- | isoparser/src/main/java/com/googlecode/mp4parser/boxes/apple/QuicktimeTextSampleEntry.java | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/isoparser/src/main/java/com/googlecode/mp4parser/boxes/apple/QuicktimeTextSampleEntry.java b/isoparser/src/main/java/com/googlecode/mp4parser/boxes/apple/QuicktimeTextSampleEntry.java new file mode 100644 index 0000000..8784fc6 --- /dev/null +++ b/isoparser/src/main/java/com/googlecode/mp4parser/boxes/apple/QuicktimeTextSampleEntry.java @@ -0,0 +1,237 @@ +/* + * Copyright 2012 Sebastian Annies, Hamburg + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.googlecode.mp4parser.boxes.apple; + +import com.coremedia.iso.IsoTypeReader; +import com.coremedia.iso.IsoTypeWriter; +import com.coremedia.iso.boxes.sampleentry.SampleEntry; + +import java.nio.ByteBuffer; + +/** + * Entry type for timed text samples defined in the timed text specification (ISO/IEC 14496-17). + */ +public class QuicktimeTextSampleEntry extends SampleEntry { + + public static final String TYPE = "text"; + + int displayFlags; + int textJustification; + + int backgroundR; + int backgroundG; + int backgroundB; + + long defaultTextBox; + long reserved1; + + short fontNumber; + short fontFace; + byte reserved2; + short reserved3; + + int foregroundR = 65535; + int foregroundG = 65535; + int foregroundB = 65535; + + String fontName = ""; + + public QuicktimeTextSampleEntry() { + super(TYPE); + } + + @Override + public void _parseDetails(ByteBuffer content) { + _parseReservedAndDataReferenceIndex(content); + + displayFlags = content.getInt(); + textJustification = content.getInt(); + backgroundR = IsoTypeReader.readUInt16(content); + backgroundG = IsoTypeReader.readUInt16(content); + backgroundB = IsoTypeReader.readUInt16(content); + defaultTextBox = IsoTypeReader.readUInt64(content); + reserved1 = IsoTypeReader.readUInt64(content); + fontNumber = content.getShort(); + fontFace = content.getShort(); + reserved2 = content.get(); + reserved3 = content.getShort(); + foregroundR = IsoTypeReader.readUInt16(content); + foregroundG = IsoTypeReader.readUInt16(content); + foregroundB = IsoTypeReader.readUInt16(content); + + if (content.remaining() > 0) { + int length = IsoTypeReader.readUInt8(content); + byte[] myFontName = new byte[length]; + content.get(myFontName); + fontName = new String(myFontName); + } else { + fontName = null; + } + } + + + protected long getContentSize() { + return 52 + (fontName != null ? fontName.length() : 0); + } + + + public int getDisplayFlags() { + return displayFlags; + } + + public void setDisplayFlags(int displayFlags) { + this.displayFlags = displayFlags; + } + + public int getTextJustification() { + return textJustification; + } + + public void setTextJustification(int textJustification) { + this.textJustification = textJustification; + } + + public int getBackgroundR() { + return backgroundR; + } + + public void setBackgroundR(int backgroundR) { + this.backgroundR = backgroundR; + } + + public int getBackgroundG() { + return backgroundG; + } + + public void setBackgroundG(int backgroundG) { + this.backgroundG = backgroundG; + } + + public int getBackgroundB() { + return backgroundB; + } + + public void setBackgroundB(int backgroundB) { + this.backgroundB = backgroundB; + } + + public long getDefaultTextBox() { + return defaultTextBox; + } + + public void setDefaultTextBox(long defaultTextBox) { + this.defaultTextBox = defaultTextBox; + } + + public long getReserved1() { + return reserved1; + } + + public void setReserved1(long reserved1) { + this.reserved1 = reserved1; + } + + public short getFontNumber() { + return fontNumber; + } + + public void setFontNumber(short fontNumber) { + this.fontNumber = fontNumber; + } + + public short getFontFace() { + return fontFace; + } + + public void setFontFace(short fontFace) { + this.fontFace = fontFace; + } + + public byte getReserved2() { + return reserved2; + } + + public void setReserved2(byte reserved2) { + this.reserved2 = reserved2; + } + + public short getReserved3() { + return reserved3; + } + + public void setReserved3(short reserved3) { + this.reserved3 = reserved3; + } + + public int getForegroundR() { + return foregroundR; + } + + public void setForegroundR(int foregroundR) { + this.foregroundR = foregroundR; + } + + public int getForegroundG() { + return foregroundG; + } + + public void setForegroundG(int foregroundG) { + this.foregroundG = foregroundG; + } + + public int getForegroundB() { + return foregroundB; + } + + public void setForegroundB(int foregroundB) { + this.foregroundB = foregroundB; + } + + public String getFontName() { + return fontName; + } + + public void setFontName(String fontName) { + this.fontName = fontName; + } + + @Override + protected void getContent(ByteBuffer byteBuffer) { + _writeReservedAndDataReferenceIndex(byteBuffer); + byteBuffer.putInt(displayFlags); + byteBuffer.putInt(textJustification); + IsoTypeWriter.writeUInt16(byteBuffer, backgroundR); + IsoTypeWriter.writeUInt16(byteBuffer, backgroundG); + IsoTypeWriter.writeUInt16(byteBuffer, backgroundB); + IsoTypeWriter.writeUInt64(byteBuffer, defaultTextBox); + IsoTypeWriter.writeUInt64(byteBuffer, reserved1); + byteBuffer.putShort(fontNumber); + byteBuffer.putShort(fontFace); + byteBuffer.put(reserved2); + byteBuffer.putShort(reserved3); + + IsoTypeWriter.writeUInt16(byteBuffer, foregroundR); + IsoTypeWriter.writeUInt16(byteBuffer, foregroundG); + IsoTypeWriter.writeUInt16(byteBuffer, foregroundB); + if (fontName != null) { + IsoTypeWriter.writeUInt8(byteBuffer, fontName.length()); + byteBuffer.put(fontName.getBytes()); + } + + } + + +} |