package com.googlecode.mp4parser.boxes.threegpp26245; import com.coremedia.iso.IsoTypeReader; import com.coremedia.iso.IsoTypeWriter; import com.coremedia.iso.Utf8; import com.googlecode.mp4parser.AbstractBox; import java.io.IOException; import java.nio.ByteBuffer; import java.util.LinkedList; import java.util.List; /** * */ public class FontTableBox extends AbstractBox { List<FontRecord> entries = new LinkedList<FontRecord>(); public FontTableBox() { super("ftab"); } @Override protected long getContentSize() { int size = 2; for (FontRecord fontRecord : entries) { size += fontRecord.getSize(); } return size; } @Override public void _parseDetails(ByteBuffer content) { int numberOfRecords = IsoTypeReader.readUInt16(content); for (int i = 0; i < numberOfRecords; i++) { FontRecord fr = new FontRecord(); fr.parse(content); entries.add(fr); } } @Override protected void getContent(ByteBuffer byteBuffer) { IsoTypeWriter.writeUInt16(byteBuffer, entries.size()); for (FontRecord record : entries) { record.getContent(byteBuffer); } } public List<FontRecord> getEntries() { return entries; } public void setEntries(List<FontRecord> entries) { this.entries = entries; } public static class FontRecord { int fontId; String fontname; public FontRecord() { } public FontRecord(int fontId, String fontname) { this.fontId = fontId; this.fontname = fontname; } public void parse(ByteBuffer bb) { fontId = IsoTypeReader.readUInt16(bb); int length = IsoTypeReader.readUInt8(bb); fontname = IsoTypeReader.readString(bb, length); } public void getContent(ByteBuffer bb) { IsoTypeWriter.writeUInt16(bb, fontId); IsoTypeWriter.writeUInt8(bb, fontname.length()); bb.put(Utf8.convert(fontname)); } public int getSize() { return Utf8.utf8StringLengthInBytes(fontname) + 3; } @Override public String toString() { return "FontRecord{" + "fontId=" + fontId + ", fontname='" + fontname + '\'' + '}'; } } }