summaryrefslogtreecommitdiff
path: root/isoparser/src/main/java/com/coremedia/iso/boxes/dece/TrickPlayBox.java
diff options
context:
space:
mode:
Diffstat (limited to 'isoparser/src/main/java/com/coremedia/iso/boxes/dece/TrickPlayBox.java')
-rw-r--r--isoparser/src/main/java/com/coremedia/iso/boxes/dece/TrickPlayBox.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/isoparser/src/main/java/com/coremedia/iso/boxes/dece/TrickPlayBox.java b/isoparser/src/main/java/com/coremedia/iso/boxes/dece/TrickPlayBox.java
new file mode 100644
index 0000000..24d5712
--- /dev/null
+++ b/isoparser/src/main/java/com/coremedia/iso/boxes/dece/TrickPlayBox.java
@@ -0,0 +1,108 @@
+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();
+ }
+}