Home | History | Annotate | Download | only in threegpp26245
      1 package com.googlecode.mp4parser.boxes.threegpp26245;
      2 
      3 import com.coremedia.iso.IsoTypeReader;
      4 import com.coremedia.iso.IsoTypeWriter;
      5 import com.coremedia.iso.Utf8;
      6 import com.googlecode.mp4parser.AbstractBox;
      7 
      8 import java.io.IOException;
      9 import java.nio.ByteBuffer;
     10 import java.util.LinkedList;
     11 import java.util.List;
     12 
     13 /**
     14  *
     15  */
     16 public class FontTableBox extends AbstractBox {
     17     List<FontRecord> entries = new LinkedList<FontRecord>();
     18 
     19     public FontTableBox() {
     20         super("ftab");
     21     }
     22 
     23     @Override
     24     protected long getContentSize() {
     25         int size = 2;
     26         for (FontRecord fontRecord : entries) {
     27             size += fontRecord.getSize();
     28         }
     29         return size;
     30     }
     31 
     32 
     33     @Override
     34     public void _parseDetails(ByteBuffer content) {
     35         int numberOfRecords = IsoTypeReader.readUInt16(content);
     36         for (int i = 0; i < numberOfRecords; i++) {
     37             FontRecord fr = new FontRecord();
     38             fr.parse(content);
     39             entries.add(fr);
     40         }
     41     }
     42 
     43     @Override
     44     protected void getContent(ByteBuffer byteBuffer) {
     45         IsoTypeWriter.writeUInt16(byteBuffer, entries.size());
     46         for (FontRecord record : entries) {
     47             record.getContent(byteBuffer);
     48         }
     49     }
     50 
     51     public List<FontRecord> getEntries() {
     52         return entries;
     53     }
     54 
     55     public void setEntries(List<FontRecord> entries) {
     56         this.entries = entries;
     57     }
     58 
     59     public static class FontRecord {
     60         int fontId;
     61         String fontname;
     62 
     63         public FontRecord() {
     64         }
     65 
     66         public FontRecord(int fontId, String fontname) {
     67             this.fontId = fontId;
     68             this.fontname = fontname;
     69         }
     70 
     71         public void parse(ByteBuffer bb) {
     72             fontId = IsoTypeReader.readUInt16(bb);
     73             int length = IsoTypeReader.readUInt8(bb);
     74             fontname = IsoTypeReader.readString(bb, length);
     75         }
     76 
     77         public void getContent(ByteBuffer bb) {
     78             IsoTypeWriter.writeUInt16(bb, fontId);
     79             IsoTypeWriter.writeUInt8(bb, fontname.length());
     80             bb.put(Utf8.convert(fontname));
     81         }
     82 
     83         public int getSize() {
     84             return Utf8.utf8StringLengthInBytes(fontname) + 3;
     85         }
     86 
     87         @Override
     88         public String toString() {
     89             return "FontRecord{" +
     90                     "fontId=" + fontId +
     91                     ", fontname='" + fontname + '\'' +
     92                     '}';
     93         }
     94     }
     95 }
     96