1package com.coremedia.iso.boxes.dece;
2
3import com.coremedia.iso.IsoTypeReader;
4import com.coremedia.iso.IsoTypeWriter;
5import com.googlecode.mp4parser.AbstractFullBox;
6
7import java.nio.ByteBuffer;
8import java.util.ArrayList;
9import java.util.List;
10
11/**
12 * aligned(8) class TrickPlayBox
13 * extends FullBox(âtrikâ, version=0, flags=0)
14 * {
15 * for (i=0; I < sample_count; i++) {
16 * unsigned int(2) pic_type;
17 * unsigned int(6) dependency_level;
18 * }
19 * }
20 */
21public class TrickPlayBox extends AbstractFullBox {
22    public static final String TYPE = "trik";
23
24    private List<Entry> entries = new ArrayList<Entry>();
25
26    public TrickPlayBox() {
27        super(TYPE);
28    }
29
30    public void setEntries(List<Entry> entries) {
31        this.entries = entries;
32    }
33
34    public List<Entry> getEntries() {
35        return entries;
36    }
37
38    public static class Entry {
39
40        public Entry() {
41        }
42
43        public Entry(int value) {
44            this.value = value;
45        }
46
47
48        private int value;
49
50        public int getPicType() {
51            return (value >> 6) & 0x03;
52        }
53
54        public void setPicType(int picType) {
55            value = value & (0xff >> 3);
56            value = (picType & 0x03) << 6 | value;
57        }
58
59        public int getDependencyLevel() {
60            return value & 0x3f;
61        }
62
63        public void setDependencyLevel(int dependencyLevel) {
64            value = (dependencyLevel & 0x3f) | value;
65        }
66
67
68        @Override
69        public String toString() {
70            final StringBuilder sb = new StringBuilder();
71            sb.append("Entry");
72            sb.append("{picType=").append(getPicType());
73            sb.append(",dependencyLevel=").append(getDependencyLevel());
74            sb.append('}');
75            return sb.toString();
76        }
77    }
78
79    @Override
80    protected long getContentSize() {
81        return 4 + entries.size();
82    }
83
84    @Override
85    public void _parseDetails(ByteBuffer content) {
86        parseVersionAndFlags(content);
87        while (content.remaining() > 0) {
88            entries.add(new Entry(IsoTypeReader.readUInt8(content)));
89        }
90    }
91
92    @Override
93    protected void getContent(ByteBuffer byteBuffer) {
94        writeVersionAndFlags(byteBuffer);
95        for (Entry entry : entries) {
96            IsoTypeWriter.writeUInt8(byteBuffer, entry.value);
97        }
98    }
99
100    @Override
101    public String toString() {
102        final StringBuilder sb = new StringBuilder();
103        sb.append("TrickPlayBox");
104        sb.append("{entries=").append(entries);
105        sb.append('}');
106        return sb.toString();
107    }
108}
109