package com.coremedia.iso.boxes.dece; import com.coremedia.iso.IsoTypeReader; import com.coremedia.iso.IsoTypeWriter; import com.googlecode.mp4parser.AbstractFullBox; import java.nio.ByteBuffer; 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(TYPE); } public void setEntries(List<Entry> entries) { this.entries = entries; } public List<Entry> getEntries() { return entries; } public static class Entry { public Entry() { } public Entry(int value) { this.value = value; } private int value; public int getPicType() { return (value >> 6) & 0x03; } public void setPicType(int picType) { value = value & (0xff >> 3); value = (picType & 0x03) << 6 | value; } public int getDependencyLevel() { return value & 0x3f; } public void setDependencyLevel(int dependencyLevel) { value = (dependencyLevel & 0x3f) | value; } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("Entry"); sb.append("{picType=").append(getPicType()); sb.append(",dependencyLevel=").append(getDependencyLevel()); sb.append('}'); return sb.toString(); } } @Override protected long getContentSize() { return 4 + entries.size(); } @Override public void _parseDetails(ByteBuffer content) { parseVersionAndFlags(content); while (content.remaining() > 0) { entries.add(new Entry(IsoTypeReader.readUInt8(content))); } } @Override protected void getContent(ByteBuffer byteBuffer) { writeVersionAndFlags(byteBuffer); for (Entry entry : entries) { IsoTypeWriter.writeUInt8(byteBuffer, entry.value); } } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("TrickPlayBox"); sb.append("{entries=").append(entries); sb.append('}'); return sb.toString(); } }