package org.mp4parser.streaming.input;
import org.mp4parser.streaming.SampleExtension;
import org.mp4parser.streaming.StreamingSample;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.List;
public class StreamingSampleImpl implements StreamingSample {
private ByteBuffer s;
private long duration;
private HashMap<Class<? extends SampleExtension>, SampleExtension> sampleExtensions = new HashMap<Class<? extends SampleExtension>, SampleExtension>();
public StreamingSampleImpl(ByteBuffer s, long duration) {
this.s = s.duplicate();
this.duration = duration;
}
public StreamingSampleImpl(byte[] sample, long duration) {
this.duration = duration;
s = ByteBuffer.wrap(sample);
}
public StreamingSampleImpl(List<ByteBuffer> nals, long duration) {
this.duration = duration;
int size = 0;
for (ByteBuffer nal : nals) {
size += 4;
size += nal.limit();
}
s = ByteBuffer.allocate(size);
for (ByteBuffer nal : nals) {
s.put((byte) ((nal.limit() & 0xff000000) >> 24));
s.put((byte) ((nal.limit() & 0xff0000) >> 16));
s.put((byte) ((nal.limit() & 0xff00) >> 8));
s.put((byte) ((nal.limit() & 0xff)));
s.put((ByteBuffer) nal.rewind());
}
}
public ByteBuffer getContent() {
return s;
}
public long getDuration() {
return duration;
}
public <T extends SampleExtension> T getSampleExtension(Class<T> clazz) {
return (T) sampleExtensions.get(clazz);
}
public void addSampleExtension(SampleExtension sampleExtension) {
sampleExtensions.put(sampleExtension.getClass(), sampleExtension);
}
public <T extends SampleExtension> T removeSampleExtension(Class<T> clazz) {
return (T) sampleExtensions.remove(clazz);
}
}