package org.jcodec.codecs.mpeg12.bitstream;
import org.jcodec.common.io.BitReader;
import org.jcodec.common.io.BitWriter;
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 SequenceDisplayExtension implements MPEGHeader {
public int video_format;
public int display_horizontal_size;
public int display_vertical_size;
public ColorDescription colorDescription;
public static final int Sequence_Display_Extension = 0x2;
public static class ColorDescription {
int colour_primaries;
int transfer_characteristics;
int matrix_coefficients;
public static ColorDescription read(BitReader _in) {
ColorDescription cd = new ColorDescription();
cd.colour_primaries = _in.readNBit(8);
cd.transfer_characteristics = _in.readNBit(8);
cd.matrix_coefficients = _in.readNBit(8);
return cd;
}
public void write(BitWriter out) {
out.writeNBit(colour_primaries, 8);
out.writeNBit(transfer_characteristics, 8);
out.writeNBit(matrix_coefficients, 8);
}
}
public static SequenceDisplayExtension read(BitReader _in) {
SequenceDisplayExtension sde = new SequenceDisplayExtension();
sde.video_format = _in.readNBit(3);
if (_in.read1Bit() == 1) {
sde.colorDescription = ColorDescription.read(_in);
}
sde.display_horizontal_size = _in.readNBit(14);
_in.read1Bit();
sde.display_vertical_size = _in.readNBit(14);
return sde;
}
@Override
public void write(ByteBuffer bb) {
BitWriter bw = new BitWriter(bb);
bw.writeNBit(SequenceDisplayExtension.Sequence_Display_Extension, 4);
bw.writeNBit(video_format, 3);
bw.write1Bit(colorDescription != null ? 1 : 0);
if (colorDescription != null)
colorDescription.write(bw);
bw.writeNBit(display_horizontal_size, 14);
bw.write1Bit(1); // verify this
bw.writeNBit(display_vertical_size, 14);
bw.flush();
}
}