package org.jcodec.containers.mxf.model;
import java.nio.ByteBuffer;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* @author The JCodec project
*
*/
public class MXFPartition {
private MXFPartitionPack pack;
private long essenceFilePos;
private boolean closed;
private boolean complete;
private long essenceLength;
public MXFPartition(MXFPartitionPack pack, long essenceFilePos, boolean closed, boolean complete, long essenceLength) {
this.pack = pack;
this.essenceFilePos = essenceFilePos;
this.closed = closed;
this.complete = complete;
this.essenceLength = essenceLength;
}
public static MXFPartition read(UL ul, ByteBuffer bb, long packSize, long nextPartition) {
boolean closed = (ul.get(14) & 1) == 0;
boolean complete = ul.get(14) > 2;
MXFPartitionPack pp = new MXFPartitionPack(ul);
pp.readBuf(bb);
long essenceFilePos = roundToKag(pp.getThisPartition() + packSize, pp.getKagSize())
+ roundToKag(pp.getHeaderByteCount(), pp.getKagSize())
+ roundToKag(pp.getIndexByteCount(), pp.getKagSize());
return new MXFPartition(pp, essenceFilePos, closed, complete, nextPartition - essenceFilePos);
}
static long roundToKag(long position, int kag_size) {
long ret = (position / kag_size) * kag_size;
return ret == position ? ret : ret + kag_size;
}
public MXFPartitionPack getPack() {
return pack;
}
public long getEssenceFilePos() {
return essenceFilePos;
}
public boolean isClosed() {
return closed;
}
public boolean isComplete() {
return complete;
}
public long getEssenceLength() {
return essenceLength;
}
}