package org.jcodec.containers.mp4.boxes;
import org.jcodec.common.io.NIOUtils;
import java.nio.ByteBuffer;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* Describes timecode payload sample
*
* @author The JCodec project
*
*/
public class TimecodeSampleEntry extends SampleEntry {
private static final String TMCD = "tmcd";
//@formatter:off
public static final int FLAG_DROPFRAME = 0x1;
public static final int FLAG_24HOURMAX = 0x2;
public static final int FLAG_NEGATIVETIMEOK = 0x4;
public static final int FLAG_COUNTER = 0x8;
//@formatter:on
public static TimecodeSampleEntry createTimecodeSampleEntry(int flags, int timescale, int frameDuration,
int numFrames) {
TimecodeSampleEntry tmcd = new TimecodeSampleEntry(new Header(TMCD));
tmcd.flags = flags;
tmcd.timescale = timescale;
tmcd.frameDuration = frameDuration;
tmcd.numFrames = (byte) numFrames;
return tmcd;
}
private int flags;
private int timescale;
private int frameDuration;
private byte numFrames;
public TimecodeSampleEntry(Header header) {
super(header);
}
public void parse(ByteBuffer input) {
super.parse(input);
NIOUtils.skip(input, 4);
flags = input.getInt();
timescale = input.getInt();
frameDuration = input.getInt();
numFrames = input.get();
NIOUtils.skip(input, 1);
}
protected void doWrite(ByteBuffer out) {
super.doWrite(out);
out.putInt(0);
out.putInt(flags);
out.putInt(timescale);
out.putInt(frameDuration);
out.put(numFrames);
out.put((byte) 207);
}
public int getFlags() {
return flags;
}
public int getTimescale() {
return timescale;
}
public int getFrameDuration() {
return frameDuration;
}
public byte getNumFrames() {
return numFrames;
}
public boolean isDropFrame() {
return (flags & FLAG_DROPFRAME) != 0;
}
}