package org.jcodec.containers.mp4.boxes;
import static org.jcodec.common.JCodecUtil2.asciiString;
import java.nio.ByteBuffer;
import org.jcodec.platform.Platform;
/**
* This class is part of JCodec ( www.jcodec.org ) This software is distributed
* under FreeBSD License
*
* Default box factory
*
* @author The JCodec project
*
*/
public class ColorExtension extends Box {
private short primariesIndex;
private short transferFunctionIndex;
private short matrixIndex;
private String type = "nclc";
final static byte RANGE_UNSPECIFIED = 0;
final static byte AVCOL_RANGE_MPEG = 1; ///< the normal 219*2^(n-8) "MPEG" YUV ranges
final static byte AVCOL_RANGE_JPEG = 2; ///< the normal 2^n-1 "JPEG" YUV ranges
private Byte colorRange = null;
public ColorExtension(Header header) {
super(header);
}
public void setColorRange(Byte colorRange) {
this.colorRange = colorRange;
}
@Override
public void parse(ByteBuffer input) {
byte[] dst = new byte[4];
input.get(dst);
this.type = Platform.stringFromBytes(dst);
primariesIndex = input.getShort();
transferFunctionIndex = input.getShort();
matrixIndex = input.getShort();
if (input.hasRemaining()) {
colorRange = input.get();
}
}
@Override
public void doWrite(ByteBuffer out) {
out.put(asciiString(type));
out.putShort(primariesIndex);
out.putShort(transferFunctionIndex);
out.putShort(matrixIndex);
if (colorRange != null) {
out.put(colorRange);
}
}
public static String fourcc() {
return "colr";
}
public static ColorExtension createColorExtension(short primariesIndex, short transferFunctionIndex,
short matrixIndex) {
ColorExtension c = new ColorExtension(new Header(fourcc()));
c.primariesIndex = primariesIndex;
c.transferFunctionIndex = transferFunctionIndex;
c.matrixIndex = matrixIndex;
return c;
}
public static ColorExtension createColr() {
return new ColorExtension(new Header(fourcc()));
}
public short getPrimariesIndex() {
return primariesIndex;
}
public short getTransferFunctionIndex() {
return transferFunctionIndex;
}
public short getMatrixIndex() {
return matrixIndex;
}
}