diff options
Diffstat (limited to 'isoparser/src/main/java/com/coremedia/iso/boxes/sampleentry/.svn/text-base/TextSampleEntry.java.svn-base')
-rw-r--r-- | isoparser/src/main/java/com/coremedia/iso/boxes/sampleentry/.svn/text-base/TextSampleEntry.java.svn-base | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/isoparser/src/main/java/com/coremedia/iso/boxes/sampleentry/.svn/text-base/TextSampleEntry.java.svn-base b/isoparser/src/main/java/com/coremedia/iso/boxes/sampleentry/.svn/text-base/TextSampleEntry.java.svn-base new file mode 100644 index 0000000..3a0b83a --- /dev/null +++ b/isoparser/src/main/java/com/coremedia/iso/boxes/sampleentry/.svn/text-base/TextSampleEntry.java.svn-base @@ -0,0 +1,305 @@ +/* + * Copyright 2008 CoreMedia AG, 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.coremedia.iso.boxes.sampleentry; + +import com.coremedia.iso.IsoTypeReader; +import com.coremedia.iso.IsoTypeWriter; +import com.coremedia.iso.boxes.Box; + +import java.io.IOException; +import java.nio.ByteBuffer; + +/** + * Entry type for timed text samples defined in the timed text specification (ISO/IEC 14496-17). + */ +public class TextSampleEntry extends SampleEntry { + + public static final String TYPE1 = "tx3g"; + + public static final String TYPE_ENCRYPTED = "enct"; + +/* class TextSampleEntry() extends SampleEntry ('tx3g') { + unsigned int(32) displayFlags; + signed int(8) horizontal-justification; + signed int(8) vertical-justification; + unsigned int(8) background-color-rgba[4]; + BoxRecord default-text-box; + StyleRecord default-style; + FontTableBox font-table; + } + */ + + private long displayFlags; // 32 bits + private int horizontalJustification; // 8 bit + private int verticalJustification; // 8 bit + private int[] backgroundColorRgba = new int[4]; // 4 bytes + private BoxRecord boxRecord = new BoxRecord(); + private StyleRecord styleRecord = new StyleRecord(); + + public TextSampleEntry(String type) { + super(type); + } + + @Override + public void _parseDetails(ByteBuffer content) { + _parseReservedAndDataReferenceIndex(content); + displayFlags = IsoTypeReader.readUInt32(content); + horizontalJustification = IsoTypeReader.readUInt8(content); + verticalJustification = IsoTypeReader.readUInt8(content); + backgroundColorRgba = new int[4]; + backgroundColorRgba[0] = IsoTypeReader.readUInt8(content); + backgroundColorRgba[1] = IsoTypeReader.readUInt8(content); + backgroundColorRgba[2] = IsoTypeReader.readUInt8(content); + backgroundColorRgba[3] = IsoTypeReader.readUInt8(content); + boxRecord = new BoxRecord(); + boxRecord.parse(content); + + styleRecord = new StyleRecord(); + styleRecord.parse(content); + _parseChildBoxes(content); + } + + + protected long getContentSize() { + long contentSize = 18; + contentSize += boxRecord.getSize(); + contentSize += styleRecord.getSize(); + for (Box boxe : boxes) { + contentSize += boxe.getSize(); + } + return contentSize; + } + + public String toString() { + return "TextSampleEntry"; + } + + @Override + protected void getContent(ByteBuffer byteBuffer) { + _writeReservedAndDataReferenceIndex(byteBuffer); + IsoTypeWriter.writeUInt32(byteBuffer, displayFlags); + IsoTypeWriter.writeUInt8(byteBuffer, horizontalJustification); + IsoTypeWriter.writeUInt8(byteBuffer, verticalJustification); + IsoTypeWriter.writeUInt8(byteBuffer, backgroundColorRgba[0]); + IsoTypeWriter.writeUInt8(byteBuffer, backgroundColorRgba[1]); + IsoTypeWriter.writeUInt8(byteBuffer, backgroundColorRgba[2]); + IsoTypeWriter.writeUInt8(byteBuffer, backgroundColorRgba[3]); + boxRecord.getContent(byteBuffer); + styleRecord.getContent(byteBuffer); + + _writeChildBoxes(byteBuffer); + } + + public BoxRecord getBoxRecord() { + return boxRecord; + } + + public void setBoxRecord(BoxRecord boxRecord) { + this.boxRecord = boxRecord; + } + + public StyleRecord getStyleRecord() { + return styleRecord; + } + + public void setStyleRecord(StyleRecord styleRecord) { + this.styleRecord = styleRecord; + } + + public boolean isScrollIn() { + return (displayFlags & 0x00000020) == 0x00000020; + } + + public void setScrollIn(boolean scrollIn) { + if (scrollIn) { + displayFlags |= 0x00000020; + } else { + displayFlags &= ~0x00000020; + } + } + + public boolean isScrollOut() { + return (displayFlags & 0x00000040) == 0x00000040; + } + + public void setScrollOut(boolean scrollOutIn) { + if (scrollOutIn) { + displayFlags |= 0x00000040; + } else { + displayFlags &= ~0x00000040; + } + } + + public boolean isScrollDirection() { + return (displayFlags & 0x00000180) == 0x00000180; + } + + public void setScrollDirection(boolean scrollOutIn) { + if (scrollOutIn) { + displayFlags |= 0x00000180; + } else { + displayFlags &= ~0x00000180; + } + } + + public boolean isContinuousKaraoke() { + return (displayFlags & 0x00000800) == 0x00000800; + } + + public void setContinuousKaraoke(boolean continuousKaraoke) { + if (continuousKaraoke) { + displayFlags |= 0x00000800; + } else { + displayFlags &= ~0x00000800; + } + } + + public boolean isWriteTextVertically() { + return (displayFlags & 0x00020000) == 0x00020000; + } + + public void setWriteTextVertically(boolean writeTextVertically) { + if (writeTextVertically) { + displayFlags |= 0x00020000; + } else { + displayFlags &= ~0x00020000; + } + } + + + public boolean isFillTextRegion() { + return (displayFlags & 0x00040000) == 0x00040000; + } + + public void setFillTextRegion(boolean fillTextRegion) { + if (fillTextRegion) { + displayFlags |= 0x00040000; + } else { + displayFlags &= ~0x00040000; + } + } + + + public int getHorizontalJustification() { + return horizontalJustification; + } + + public void setHorizontalJustification(int horizontalJustification) { + this.horizontalJustification = horizontalJustification; + } + + public int getVerticalJustification() { + return verticalJustification; + } + + public void setVerticalJustification(int verticalJustification) { + this.verticalJustification = verticalJustification; + } + + public int[] getBackgroundColorRgba() { + return backgroundColorRgba; + } + + public void setBackgroundColorRgba(int[] backgroundColorRgba) { + this.backgroundColorRgba = backgroundColorRgba; + } + + public static class BoxRecord { + int top; + int left; + int bottom; + int right; + + public void parse(ByteBuffer in) { + top = IsoTypeReader.readUInt16(in); + left = IsoTypeReader.readUInt16(in); + bottom = IsoTypeReader.readUInt16(in); + right = IsoTypeReader.readUInt16(in); + } + + public void getContent(ByteBuffer bb) { + IsoTypeWriter.writeUInt16(bb, top); + IsoTypeWriter.writeUInt16(bb, left); + IsoTypeWriter.writeUInt16(bb, bottom); + IsoTypeWriter.writeUInt16(bb, right); + } + + public int getSize() { + return 8; + } + } + + /* + class FontRecord { + unsigned int(16) font-ID; + unsigned int(8) font-name-length; + unsigned int(8) font[font-name-length]; +} + */ + + + /* + aligned(8) class StyleRecord { + unsigned int(16) startChar; + unsigned int(16) endChar; + unsigned int(16) font-ID; + unsigned int(8) face-style-flags; + unsigned int(8) font-size; + unsigned int(8) text-color-rgba[4]; +} + */ + public static class StyleRecord { + int startChar; + int endChar; + int fontId; + int faceStyleFlags; + int fontSize; + int[] textColor = new int[]{0xff, 0xff, 0xff, 0xff}; + + public void parse(ByteBuffer in) { + startChar = IsoTypeReader.readUInt16(in); + endChar = IsoTypeReader.readUInt16(in); + fontId = IsoTypeReader.readUInt16(in); + faceStyleFlags = IsoTypeReader.readUInt8(in); + fontSize = IsoTypeReader.readUInt8(in); + textColor = new int[4]; + textColor[0] = IsoTypeReader.readUInt8(in); + textColor[1] = IsoTypeReader.readUInt8(in); + textColor[2] = IsoTypeReader.readUInt8(in); + textColor[3] = IsoTypeReader.readUInt8(in); + } + + + public void getContent(ByteBuffer bb) { + IsoTypeWriter.writeUInt16(bb, startChar); + IsoTypeWriter.writeUInt16(bb, endChar); + IsoTypeWriter.writeUInt16(bb, fontId); + IsoTypeWriter.writeUInt8(bb, faceStyleFlags); + IsoTypeWriter.writeUInt8(bb, fontSize); + IsoTypeWriter.writeUInt8(bb, textColor[0]); + IsoTypeWriter.writeUInt8(bb, textColor[1]); + IsoTypeWriter.writeUInt8(bb, textColor[2]); + IsoTypeWriter.writeUInt8(bb, textColor[3]); + } + + public int getSize() { + return 12; + } + } + + +} |