All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jcodec.containers.mp4.boxes.TimecodeSampleEntry Maven / Gradle / Ivy

There is a newer version: 0.2.5
Show newest version
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;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy