package org.jcodec.codecs.mpeg12.bitstream; import java.io.IOException; import org.jcodec.common.io.BitReader; import org.jcodec.common.io.BitWriter; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * @author The JCodec project * */ public class QuantMatrixExtension { public int[] intra_quantiser_matrix; public int[] non_intra_quantiser_matrix; public int[] chroma_intra_quantiser_matrix; public int[] chroma_non_intra_quantiser_matrix; public static QuantMatrixExtension read(BitReader in) { QuantMatrixExtension qme = new QuantMatrixExtension(); if (in.read1Bit() != 0) qme.intra_quantiser_matrix = readQMat(in); if (in.read1Bit() != 0) qme.non_intra_quantiser_matrix = readQMat(in); if (in.read1Bit() != 0) qme.chroma_intra_quantiser_matrix = readQMat(in); if (in.read1Bit() != 0) qme.chroma_non_intra_quantiser_matrix = readQMat(in); return qme; } private static int[] readQMat(BitReader in) { int[] qmat = new int[64]; for (int i = 0; i < 64; i++) qmat[i] = in.readNBit(8); return qmat; } public void write(BitWriter ob) throws IOException { ob.write1Bit(intra_quantiser_matrix != null ? 1 : 0); if (intra_quantiser_matrix != null) writeQMat(intra_quantiser_matrix, ob); ob.write1Bit(non_intra_quantiser_matrix != null ? 1 : 0); if (non_intra_quantiser_matrix != null) writeQMat(non_intra_quantiser_matrix, ob); ob.write1Bit(chroma_intra_quantiser_matrix != null ? 1 : 0); if (chroma_intra_quantiser_matrix != null) writeQMat(chroma_intra_quantiser_matrix, ob); ob.write1Bit(chroma_non_intra_quantiser_matrix != null ? 1 : 0); if (chroma_non_intra_quantiser_matrix != null) writeQMat(chroma_non_intra_quantiser_matrix, ob); } private void writeQMat(int[] matrix, BitWriter ob) throws IOException { for (int i = 0; i < 64; i++) ob.writeNBit(matrix[i], 8); } }