package com.coremedia.iso.boxes.dece; import com.coremedia.iso.BoxParser; import com.coremedia.iso.IsoBufferWrapper; import com.coremedia.iso.IsoFile; import com.coremedia.iso.IsoOutputStream; import com.coremedia.iso.boxes.AbstractFullBox; import com.coremedia.iso.boxes.Box; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * aligned(8) class TrickPlayBox * extends FullBox(‘trik’, version=0, flags=0) * { * for (i=0; I < sample_count; i++) { * unsigned int(2) pic_type; * unsigned int(6) dependency_level; * } * } */ public class TrickPlayBox extends AbstractFullBox { public static final String TYPE = "trik"; private List<Entry> entries = new ArrayList<Entry>(); public TrickPlayBox() { super(IsoFile.fourCCtoBytes(TYPE)); } public static class Entry { public Entry(int value) { this.value = value; } private int value; public int getPicType() { return (value >> 6) & 0x03; } public void setPicType(int picType) { value = (picType & 0x03) << 6 | value; } public int getDependencyLevel() { return value & 0x3f; } public void setDependencyLevel(int dependencyLevel) { value = (dependencyLevel & 0x3f) | value; } } @Override protected long getContentSize() { return entries.size(); } @Override protected void getContent(IsoOutputStream os) throws IOException { for (Entry entry : entries) { os.write(entry.value); } } @Override public void parse(IsoBufferWrapper in, long size, BoxParser boxParser, Box lastMovieFragmentBox) throws IOException { super.parse(in, size, boxParser, lastMovieFragmentBox); long remainingBytes = size - 4; while (remainingBytes > 0) { entries.add(new Entry(in.readUInt8())); remainingBytes--; } } }