package org.jcodec.codecs.h264;
import static org.jcodec.codecs.h264.H264Const.PartPred.Bi;
import static org.jcodec.codecs.h264.H264Const.PartPred.Direct;
import static org.jcodec.codecs.h264.H264Const.PartPred.L0;
import static org.jcodec.codecs.h264.H264Const.PartPred.L1;
import static org.jcodec.codecs.h264.io.CAVLC.coeffToken;
import org.jcodec.codecs.h264.io.model.MBType;
import org.jcodec.common.io.VLC;
import org.jcodec.common.io.VLCBuilder;
import org.jcodec.common.model.Picture;
public class H264Const {
public static VLC[] coeffToken = new VLC[10];
public static VLC coeffTokenChromaDCY420;
public static VLC coeffTokenChromaDCY422;
public static VLC[] run;
static {
VLCBuilder vbl = new VLCBuilder();
vbl.set((0 << 4) | 0, "1");
vbl.set(coeffToken(1, 0), "000101");
vbl.set(coeffToken(1, 1), "01");
vbl.set(coeffToken(2, 0), "00000111");
vbl.set(coeffToken(2, 1), "000100");
vbl.set(coeffToken(2, 2), "001");
vbl.set(coeffToken(3, 0), "000000111");
vbl.set(coeffToken(3, 1), "00000110");
vbl.set(coeffToken(3, 2), "0000101");
vbl.set(coeffToken(3, 3), "00011");
vbl.set(coeffToken(4, 0), "0000000111");
vbl.set(coeffToken(4, 1), "000000110");
vbl.set(coeffToken(4, 2), "00000101");
vbl.set(coeffToken(4, 3), "000011");
vbl.set(coeffToken(5, 0), "00000000111");
vbl.set(coeffToken(5, 1), "0000000110");
vbl.set(coeffToken(5, 2), "000000101");
vbl.set(coeffToken(5, 3), "0000100");
vbl.set(coeffToken(6, 0), "0000000001111");
vbl.set(coeffToken(6, 1), "00000000110");
vbl.set(coeffToken(6, 2), "0000000101");
vbl.set(coeffToken(6, 3), "00000100");
vbl.set(coeffToken(7, 0), "0000000001011");
vbl.set(coeffToken(7, 1), "0000000001110");
vbl.set(coeffToken(7, 2), "00000000101");
vbl.set(coeffToken(7, 3), "000000100");
vbl.set(coeffToken(8, 0), "0000000001000");
vbl.set(coeffToken(8, 1), "0000000001010");
vbl.set(coeffToken(8, 2), "0000000001101");
vbl.set(coeffToken(8, 3), "0000000100");
vbl.set(coeffToken(9, 0), "00000000001111");
vbl.set(coeffToken(9, 1), "00000000001110");
vbl.set(coeffToken(9, 2), "0000000001001");
vbl.set(coeffToken(9, 3), "00000000100");
vbl.set(coeffToken(10, 0), "00000000001011");
vbl.set(coeffToken(10, 1), "00000000001010");
vbl.set(coeffToken(10, 2), "00000000001101");
vbl.set(coeffToken(10, 3), "0000000001100");
vbl.set(coeffToken(11, 0), "000000000001111");
vbl.set(coeffToken(11, 1), "000000000001110");
vbl.set(coeffToken(11, 2), "00000000001001");
vbl.set(coeffToken(11, 3), "00000000001100");
vbl.set(coeffToken(12, 0), "000000000001011");
vbl.set(coeffToken(12, 1), "000000000001010");
vbl.set(coeffToken(12, 2), "000000000001101");
vbl.set(coeffToken(12, 3), "00000000001000");
vbl.set(coeffToken(13, 0), "0000000000001111");
vbl.set(coeffToken(13, 1), "000000000000001");
vbl.set(coeffToken(13, 2), "000000000001001");
vbl.set(coeffToken(13, 3), "000000000001100");
vbl.set(coeffToken(14, 0), "0000000000001011");
vbl.set(coeffToken(14, 1), "0000000000001110");
vbl.set(coeffToken(14, 2), "0000000000001101");
vbl.set(coeffToken(14, 3), "000000000001000");
vbl.set(coeffToken(15, 0), "0000000000000111");
vbl.set(coeffToken(15, 1), "0000000000001010");
vbl.set(coeffToken(15, 2), "0000000000001001");
vbl.set(coeffToken(15, 3), "0000000000001100");
vbl.set(coeffToken(16, 0), "0000000000000100");
vbl.set(coeffToken(16, 1), "0000000000000110");
vbl.set(coeffToken(16, 2), "0000000000000101");
vbl.set(coeffToken(16, 3), "0000000000001000");
coeffToken[0] = coeffToken[1] = vbl.getVLC();
}
static {
VLCBuilder vbl = new VLCBuilder();
vbl.set(coeffToken(0, 0), "11");
vbl.set(coeffToken(1, 0), "001011");
vbl.set(coeffToken(1, 1), "10");
vbl.set(coeffToken(2, 0), "000111");
vbl.set(coeffToken(2, 1), "00111");
vbl.set(coeffToken(2, 2), "011");
vbl.set(coeffToken(3, 0), "0000111");
vbl.set(coeffToken(3, 1), "001010");
vbl.set(coeffToken(3, 2), "001001");
vbl.set(coeffToken(3, 3), "0101");
vbl.set(coeffToken(4, 0), "00000111");
vbl.set(coeffToken(4, 1), "000110");
vbl.set(coeffToken(4, 2), "000101");
vbl.set(coeffToken(4, 3), "0100");
vbl.set(coeffToken(5, 0), "00000100");
vbl.set(coeffToken(5, 1), "0000110");
vbl.set(coeffToken(5, 2), "0000101");
vbl.set(coeffToken(5, 3), "00110");
vbl.set(coeffToken(6, 0), "000000111");
vbl.set(coeffToken(6, 1), "00000110");
vbl.set(coeffToken(6, 2), "00000101");
vbl.set(coeffToken(6, 3), "001000");
vbl.set(coeffToken(7, 0), "00000001111");
vbl.set(coeffToken(7, 1), "000000110");
vbl.set(coeffToken(7, 2), "000000101");
vbl.set(coeffToken(7, 3), "000100");
vbl.set(coeffToken(8, 0), "00000001011");
vbl.set(coeffToken(8, 1), "00000001110");
vbl.set(coeffToken(8, 2), "00000001101");
vbl.set(coeffToken(8, 3), "0000100");
vbl.set(coeffToken(9, 0), "000000001111");
vbl.set(coeffToken(9, 1), "00000001010");
vbl.set(coeffToken(9, 2), "00000001001");
vbl.set(coeffToken(9, 3), "000000100");
vbl.set(coeffToken(10, 0), "000000001011");
vbl.set(coeffToken(10, 1), "000000001110");
vbl.set(coeffToken(10, 2), "000000001101");
vbl.set(coeffToken(10, 3), "00000001100");
vbl.set(coeffToken(11, 0), "000000001000");
vbl.set(coeffToken(11, 1), "000000001010");
vbl.set(coeffToken(11, 2), "000000001001");
vbl.set(coeffToken(11, 3), "00000001000");
vbl.set(coeffToken(12, 0), "0000000001111");
vbl.set(coeffToken(12, 1), "0000000001110");
vbl.set(coeffToken(12, 2), "0000000001101");
vbl.set(coeffToken(12, 3), "000000001100");
vbl.set(coeffToken(13, 0), "0000000001011");
vbl.set(coeffToken(13, 1), "0000000001010");
vbl.set(coeffToken(13, 2), "0000000001001");
vbl.set(coeffToken(13, 3), "0000000001100");
vbl.set(coeffToken(14, 0), "0000000000111");
vbl.set(coeffToken(14, 1), "00000000001011");
vbl.set(coeffToken(14, 2), "0000000000110");
vbl.set(coeffToken(14, 3), "0000000001000");
vbl.set(coeffToken(15, 0), "00000000001001");
vbl.set(coeffToken(15, 1), "00000000001000");
vbl.set(coeffToken(15, 2), "00000000001010");
vbl.set(coeffToken(15, 3), "0000000000001");
vbl.set(coeffToken(16, 0), "00000000000111");
vbl.set(coeffToken(16, 1), "00000000000110");
vbl.set(coeffToken(16, 2), "00000000000101");
vbl.set(coeffToken(16, 3), "00000000000100");
coeffToken[2] = coeffToken[3] = vbl.getVLC();
}
static {
VLCBuilder vbl = new VLCBuilder();
vbl.set(coeffToken(0, 0), "1111");
vbl.set(coeffToken(1, 0), "001111");
vbl.set(coeffToken(1, 1), "1110");
vbl.set(coeffToken(2, 0), "001011");
vbl.set(coeffToken(2, 1), "01111");
vbl.set(coeffToken(2, 2), "1101");
vbl.set(coeffToken(3, 0), "001000");
vbl.set(coeffToken(3, 1), "01100");
vbl.set(coeffToken(3, 2), "01110");
vbl.set(coeffToken(3, 3), "1100");
vbl.set(coeffToken(4, 0), "0001111");
vbl.set(coeffToken(4, 1), "01010");
vbl.set(coeffToken(4, 2), "01011");
vbl.set(coeffToken(4, 3), "1011");
vbl.set(coeffToken(5, 0), "0001011");
vbl.set(coeffToken(5, 1), "01000");
vbl.set(coeffToken(5, 2), "01001");
vbl.set(coeffToken(5, 3), "1010");
vbl.set(coeffToken(6, 0), "0001001");
vbl.set(coeffToken(6, 1), "001110");
vbl.set(coeffToken(6, 2), "001101");
vbl.set(coeffToken(6, 3), "1001");
vbl.set(coeffToken(7, 0), "0001000");
vbl.set(coeffToken(7, 1), "001010");
vbl.set(coeffToken(7, 2), "001001");
vbl.set(coeffToken(7, 3), "1000");
vbl.set(coeffToken(8, 0), "00001111");
vbl.set(coeffToken(8, 1), "0001110");
vbl.set(coeffToken(8, 2), "0001101");
vbl.set(coeffToken(8, 3), "01101");
vbl.set(coeffToken(9, 0), "00001011");
vbl.set(coeffToken(9, 1), "00001110");
vbl.set(coeffToken(9, 2), "0001010");
vbl.set(coeffToken(9, 3), "001100");
vbl.set(coeffToken(10, 0), "000001111");
vbl.set(coeffToken(10, 1), "00001010");
vbl.set(coeffToken(10, 2), "00001101");
vbl.set(coeffToken(10, 3), "0001100");
vbl.set(coeffToken(11, 0), "000001011");
vbl.set(coeffToken(11, 1), "000001110");
vbl.set(coeffToken(11, 2), "00001001");
vbl.set(coeffToken(11, 3), "00001100");
vbl.set(coeffToken(12, 0), "000001000");
vbl.set(coeffToken(12, 1), "000001010");
vbl.set(coeffToken(12, 2), "000001101");
vbl.set(coeffToken(12, 3), "00001000");
vbl.set(coeffToken(13, 0), "0000001101");
vbl.set(coeffToken(13, 1), "000000111");
vbl.set(coeffToken(13, 2), "000001001");
vbl.set(coeffToken(13, 3), "000001100");
vbl.set(coeffToken(14, 0), "0000001001");
vbl.set(coeffToken(14, 1), "0000001100");
vbl.set(coeffToken(14, 2), "0000001011");
vbl.set(coeffToken(14, 3), "0000001010");
vbl.set(coeffToken(15, 0), "0000000101");
vbl.set(coeffToken(15, 1), "0000001000");
vbl.set(coeffToken(15, 2), "0000000111");
vbl.set(coeffToken(15, 3), "0000000110");
vbl.set(coeffToken(16, 0), "0000000001");
vbl.set(coeffToken(16, 1), "0000000100");
vbl.set(coeffToken(16, 2), "0000000011");
vbl.set(coeffToken(16, 3), "0000000010");
coeffToken[4] = coeffToken[5] = coeffToken[6] = coeffToken[7] = vbl.getVLC();
}
static {
VLCBuilder vbl = new VLCBuilder();
vbl.set(coeffToken(0, 0), "000011");
vbl.set(coeffToken(1, 0), "000000");
vbl.set(coeffToken(1, 1), "000001");
vbl.set(coeffToken(2, 0), "000100");
vbl.set(coeffToken(2, 1), "000101");
vbl.set(coeffToken(2, 2), "000110");
vbl.set(coeffToken(3, 0), "001000");
vbl.set(coeffToken(3, 1), "001001");
vbl.set(coeffToken(3, 2), "001010");
vbl.set(coeffToken(3, 3), "001011");
vbl.set(coeffToken(4, 0), "001100");
vbl.set(coeffToken(4, 1), "001101");
vbl.set(coeffToken(4, 2), "001110");
vbl.set(coeffToken(4, 3), "001111");
vbl.set(coeffToken(5, 0), "010000");
vbl.set(coeffToken(5, 1), "010001");
vbl.set(coeffToken(5, 2), "010010");
vbl.set(coeffToken(5, 3), "010011");
vbl.set(coeffToken(6, 0), "010100");
vbl.set(coeffToken(6, 1), "010101");
vbl.set(coeffToken(6, 2), "010110");
vbl.set(coeffToken(6, 3), "010111");
vbl.set(coeffToken(7, 0), "011000");
vbl.set(coeffToken(7, 1), "011001");
vbl.set(coeffToken(7, 2), "011010");
vbl.set(coeffToken(7, 3), "011011");
vbl.set(coeffToken(8, 0), "011100");
vbl.set(coeffToken(8, 1), "011101");
vbl.set(coeffToken(8, 2), "011110");
vbl.set(coeffToken(8, 3), "011111");
vbl.set(coeffToken(9, 0), "100000");
vbl.set(coeffToken(9, 1), "100001");
vbl.set(coeffToken(9, 2), "100010");
vbl.set(coeffToken(9, 3), "100011");
vbl.set(coeffToken(10, 0), "100100");
vbl.set(coeffToken(10, 1), "100101");
vbl.set(coeffToken(10, 2), "100110");
vbl.set(coeffToken(10, 3), "100111");
vbl.set(coeffToken(11, 0), "101000");
vbl.set(coeffToken(11, 1), "101001");
vbl.set(coeffToken(11, 2), "101010");
vbl.set(coeffToken(11, 3), "101011");
vbl.set(coeffToken(12, 0), "101100");
vbl.set(coeffToken(12, 1), "101101");
vbl.set(coeffToken(12, 2), "101110");
vbl.set(coeffToken(12, 3), "101111");
vbl.set(coeffToken(13, 0), "110000");
vbl.set(coeffToken(13, 1), "110001");
vbl.set(coeffToken(13, 2), "110010");
vbl.set(coeffToken(13, 3), "110011");
vbl.set(coeffToken(14, 0), "110100");
vbl.set(coeffToken(14, 1), "110101");
vbl.set(coeffToken(14, 2), "110110");
vbl.set(coeffToken(14, 3), "110111");
vbl.set(coeffToken(15, 0), "111000");
vbl.set(coeffToken(15, 1), "111001");
vbl.set(coeffToken(15, 2), "111010");
vbl.set(coeffToken(15, 3), "111011");
vbl.set(coeffToken(16, 0), "111100");
vbl.set(coeffToken(16, 1), "111101");
vbl.set(coeffToken(16, 2), "111110");
vbl.set(coeffToken(16, 3), "111111");
coeffToken[8] = vbl.getVLC();
}
static {
VLCBuilder vbl = new VLCBuilder();
vbl.set(coeffToken(0, 0), "01");
vbl.set(coeffToken(1, 0), "000111");
vbl.set(coeffToken(1, 1), "1");
vbl.set(coeffToken(2, 0), "000100");
vbl.set(coeffToken(2, 1), "000110");
vbl.set(coeffToken(2, 2), "001");
vbl.set(coeffToken(3, 0), "000011");
vbl.set(coeffToken(3, 1), "0000011");
vbl.set(coeffToken(3, 2), "0000010");
vbl.set(coeffToken(3, 3), "000101");
vbl.set(coeffToken(4, 0), "000010");
vbl.set(coeffToken(4, 1), "00000011");
vbl.set(coeffToken(4, 2), "00000010");
vbl.set(coeffToken(4, 3), "0000000");
coeffTokenChromaDCY420 = vbl.getVLC();
}
static {
VLCBuilder vbl = new VLCBuilder();
vbl.set(coeffToken(0, 0), "1");
vbl.set(coeffToken(1, 0), "0001111");
vbl.set(coeffToken(1, 1), "01");
vbl.set(coeffToken(2, 0), "0001110");
vbl.set(coeffToken(2, 1), "0001101");
vbl.set(coeffToken(2, 2), "001");
vbl.set(coeffToken(3, 0), "000000111");
vbl.set(coeffToken(3, 1), "0001100");
vbl.set(coeffToken(3, 2), "0001011");
vbl.set(coeffToken(3, 3), "00001");
vbl.set(coeffToken(4, 0), "000000110");
vbl.set(coeffToken(4, 1), "000000101");
vbl.set(coeffToken(4, 2), "0001010");
vbl.set(coeffToken(4, 3), "000001");
vbl.set(coeffToken(5, 0), "0000000111");
vbl.set(coeffToken(5, 1), "0000000110");
vbl.set(coeffToken(5, 2), "000000100");
vbl.set(coeffToken(5, 3), "0001001");
vbl.set(coeffToken(6, 0), "00000000111");
vbl.set(coeffToken(6, 1), "00000000110");
vbl.set(coeffToken(6, 2), "0000000101");
vbl.set(coeffToken(6, 3), "0001000");
vbl.set(coeffToken(7, 0), "000000000111");
vbl.set(coeffToken(7, 1), "000000000110");
vbl.set(coeffToken(7, 2), "00000000101");
vbl.set(coeffToken(7, 3), "0000000100");
vbl.set(coeffToken(8, 0), "0000000000111");
vbl.set(coeffToken(8, 1), "000000000101");
vbl.set(coeffToken(8, 2), "000000000100");
vbl.set(coeffToken(8, 3), "00000000100");
coeffTokenChromaDCY422 = vbl.getVLC();
}
static {
run = new VLC[] {
new VLCBuilder().set(0, "1").set(1, "0").getVLC(),
new VLCBuilder().set(0, "1").set(1, "01").set(2, "00").getVLC(),
new VLCBuilder().set(0, "11").set(1, "10").set(2, "01").set(3, "00").getVLC(),
new VLCBuilder().set(0, "11").set(1, "10").set(2, "01").set(3, "001").set(4, "000").getVLC(),
new VLCBuilder().set(0, "11").set(1, "10").set(2, "011").set(3, "010").set(4, "001").set(5, "000")
.getVLC(),
new VLCBuilder().set(0, "11").set(1, "000").set(2, "001").set(3, "011").set(4, "010").set(5, "101")
.set(6, "100").getVLC(),
new VLCBuilder().set(0, "111").set(1, "110").set(2, "101").set(3, "100").set(4, "011").set(5, "010")
.set(6, "001").set(7, "0001").set(8, "00001").set(9, "000001").set(10, "0000001")
.set(11, "00000001").set(12, "000000001").set(13, "0000000001").set(14, "00000000001").getVLC() };
}
public static VLC[] totalZeros16 = {
new VLCBuilder().set(0, "1").set(1, "011").set(2, "010").set(3, "0011").set(4, "0010").set(5, "00011")
.set(6, "00010").set(7, "000011").set(8, "000010").set(9, "0000011").set(10, "0000010")
.set(11, "00000011").set(12, "00000010").set(13, "000000011").set(14, "000000010")
.set(15, "000000001").getVLC(),
new VLCBuilder().set(0, "111").set(1, "110").set(2, "101").set(3, "100").set(4, "011").set(5, "0101")
.set(6, "0100").set(7, "0011").set(8, "0010").set(9, "00011").set(10, "00010").set(11, "000011")
.set(12, "000010").set(13, "000001").set(14, "000000").getVLC(),
new VLCBuilder().set(0, "0101").set(1, "111").set(2, "110").set(3, "101").set(4, "0100").set(5, "0011")
.set(6, "100").set(7, "011").set(8, "0010").set(9, "00011").set(10, "00010").set(11, "000001")
.set(12, "00001").set(13, "000000").getVLC(),
new VLCBuilder().set(0, "00011").set(1, "111").set(2, "0101").set(3, "0100").set(4, "110").set(5, "101")
.set(6, "100").set(7, "0011").set(8, "011").set(9, "0010").set(10, "00010").set(11, "00001")
.set(12, "00000").getVLC(),
new VLCBuilder().set(0, "0101").set(1, "0100").set(2, "0011").set(3, "111").set(4, "110").set(5, "101")
.set(6, "100").set(7, "011").set(8, "0010").set(9, "00001").set(10, "0001").set(11, "00000")
.getVLC(),
new VLCBuilder().set(0, "000001").set(1, "00001").set(2, "111").set(3, "110").set(4, "101").set(5, "100")
.set(6, "011").set(7, "010").set(8, "0001").set(9, "001").set(10, "000000").getVLC(),
new VLCBuilder().set(0, "000001").set(1, "00001").set(2, "101").set(3, "100").set(4, "011").set(5, "11")
.set(6, "010").set(7, "0001").set(8, "001").set(9, "000000").getVLC(),
new VLCBuilder().set(0, "000001").set(1, "0001").set(2, "00001").set(3, "011").set(4, "11").set(5, "10")
.set(6, "010").set(7, "001").set(8, "000000").getVLC(),
new VLCBuilder().set(0, "000001").set(1, "000000").set(2, "0001").set(3, "11").set(4, "10").set(5, "001")
.set(6, "01").set(7, "00001").getVLC(),
new VLCBuilder().set(0, "00001").set(1, "00000").set(2, "001").set(3, "11").set(4, "10").set(5, "01")
.set(6, "0001").getVLC(),
new VLCBuilder().set(0, "0000").set(1, "0001").set(2, "001").set(3, "010").set(4, "1").set(5, "011")
.getVLC(),
new VLCBuilder().set(0, "0000").set(1, "0001").set(2, "01").set(3, "1").set(4, "001").getVLC(),
new VLCBuilder().set(0, "000").set(1, "001").set(2, "1").set(3, "01").getVLC(),
new VLCBuilder().set(0, "00").set(1, "01").set(2, "1").getVLC(),
new VLCBuilder().set(0, "0").set(1, "1").getVLC() };
public static VLC[] totalZeros4 = { new VLCBuilder().set(0, "1").set(1, "01").set(2, "001").set(3, "000").getVLC(),
new VLCBuilder().set(0, "1").set(1, "01").set(2, "00").getVLC(),
new VLCBuilder().set(0, "1").set(1, "0").getVLC() };
public static VLC[] totalZeros8 = {
new VLCBuilder().set(0, "1").set(1, "010").set(2, "011").set(3, "0010").set(4, "0011").set(5, "0001")
.set(6, "00001").set(7, "00000").getVLC(),
new VLCBuilder().set(0, "000").set(1, "01").set(2, "001").set(3, "100").set(4, "101").set(5, "110")
.set(6, "111").getVLC(),
new VLCBuilder().set(0, "000").set(1, "001").set(2, "01").set(3, "10").set(4, "110").set(5, "111").getVLC(),
new VLCBuilder().set(0, "110").set(1, "00").set(2, "01").set(3, "10").set(4, "111").getVLC(),
new VLCBuilder().set(0, "00").set(1, "01").set(2, "10").set(3, "11").getVLC(),
new VLCBuilder().set(0, "00").set(1, "01").set(2, "1").getVLC(),
new VLCBuilder().set(0, "0").set(1, "1").getVLC() };
public static enum PartPred {
L0, L1, Bi, Direct;
public boolean usesList(int l) {
return this == Bi ? true : (this == L0 && l == 0 || this == L1 && l == 1);
}
}
public static PartPred[][] bPredModes = { null, { PartPred.L0 }, { PartPred.L1 }, { PartPred.Bi },
{ PartPred.L0, PartPred.L0 }, { PartPred.L0, PartPred.L0 }, { PartPred.L1, PartPred.L1 },
{ PartPred.L1, PartPred.L1 }, { PartPred.L0, PartPred.L1 }, { PartPred.L0, PartPred.L1 },
{ PartPred.L1, PartPred.L0 }, { PartPred.L1, PartPred.L0 }, { PartPred.L0, PartPred.Bi },
{ PartPred.L0, PartPred.Bi }, { PartPred.L1, PartPred.Bi }, { PartPred.L1, PartPred.Bi },
{ PartPred.Bi, PartPred.L0 }, { PartPred.Bi, PartPred.L0 }, { PartPred.Bi, PartPred.L1 },
{ PartPred.Bi, PartPred.L1 }, { PartPred.Bi, PartPred.Bi }, { PartPred.Bi, PartPred.Bi } };
public static MBType[] bMbTypes = { MBType.B_Direct_16x16, MBType.B_L0_16x16, MBType.B_L1_16x16, MBType.B_Bi_16x16,
MBType.B_L0_L0_16x8, MBType.B_L0_L0_8x16, MBType.B_L1_L1_16x8, MBType.B_L1_L1_8x16, MBType.B_L0_L1_16x8,
MBType.B_L0_L1_8x16, MBType.B_L1_L0_16x8, MBType.B_L1_L0_8x16, MBType.B_L0_Bi_16x8, MBType.B_L0_Bi_8x16,
MBType.B_L1_Bi_16x8, MBType.B_L1_Bi_8x16, MBType.B_Bi_L0_16x8, MBType.B_Bi_L0_8x16, MBType.B_Bi_L1_16x8,
MBType.B_Bi_L1_8x16, MBType.B_Bi_Bi_16x8, MBType.B_Bi_Bi_8x16, MBType.B_8x8 };
public static int[] bPartW = { 0, 16, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8 };
public static int[] bPartH = { 0, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16 };
public static int[] BLK_X = new int[] { 0, 4, 0, 4, 8, 12, 8, 12, 0, 4, 0, 4, 8, 12, 8, 12 };
public static int[] BLK_Y = new int[] { 0, 0, 4, 4, 0, 0, 4, 4, 8, 8, 12, 12, 8, 8, 12, 12 };
public static int[] BLK_INV_MAP = { 0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15 };
public static int[] MB_BLK_OFF_LEFT = new int[] { 0, 1, 0, 1, 2, 3, 2, 3, 0, 1, 0, 1, 2, 3, 2, 3 };
public static int[] MB_BLK_OFF_TOP = new int[] { 0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3 };
public static final int[] QP_SCALE_CR = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 34, 35, 35, 36, 36, 37, 37, 37, 38, 38, 38,
39, 39, 39, 39 };
public static final Picture NO_PIC = new Picture(0, 0, null, null);
public static final int[] BLK_8x8_MB_OFF_LUMA = {0, 8, 128, 136};
public static final int[] BLK_8x8_MB_OFF_CHROMA = {0, 4, 32, 36};
public static final int[] BLK_4x4_MB_OFF_LUMA = {0, 4, 8, 12, 64, 68, 72, 76, 128, 132, 136, 140, 192, 196, 200, 204};
public static final int[] BLK_8x8_IND = {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3};
public static final int[][] BLK8x8_BLOCKS = {
{0, 1, 4, 5},
{2, 3, 6, 7},
{8, 9, 12, 13},
{10, 11, 14, 15}
};
public static final int[][] ARRAY = {{0}, {1}, {2}, {3}};
public static int[] CODED_BLOCK_PATTERN_INTRA_COLOR = new int[] { 47, 31, 15, 0, 23, 27, 29, 30, 7, 11, 13, 14, 39,
43, 45, 46, 16, 3, 5, 10, 12, 19, 21, 26, 28, 35, 37, 42, 44, 1, 2, 4, 8, 17, 18, 20, 24, 6, 9, 22, 25, 32,
33, 34, 36, 40, 38, 41 };
public static int[] coded_block_pattern_intra_monochrome = new int[] { 15, 0, 7, 11, 13, 14, 3, 5, 10, 12, 1, 2, 4,
8, 6, 9 };
public static int[] CODED_BLOCK_PATTERN_INTER_COLOR = new int[] { 0, 16, 1, 2, 4, 8, 32, 3, 5, 10, 12, 15, 47, 7,
11, 13, 14, 6, 9, 31, 35, 37, 42, 44, 33, 34, 36, 40, 39, 43, 45, 46, 17, 18, 20, 24, 19, 21, 26, 28, 23,
27, 29, 30, 22, 25, 38, 41 };
public static int[] coded_block_pattern_inter_monochrome = new int[] { 0, 1, 2, 4, 8, 3, 5, 10, 12, 15, 7, 11, 13,
14, 6, 9 };
public static int[] sig_coeff_map_8x8 = { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5, 4, 4, 4, 4, 3, 3, 6, 7,
7, 7, 8, 9, 10, 9, 8, 7, 7, 6, 11, 12, 13, 11, 6, 7, 8, 9, 14, 10, 9, 8, 6, 11, 12, 13, 11, 6, 9, 14, 10,
9, 11, 12, 13, 11, 14, 10, 12 };
public static int[] sig_coeff_map_8x8_mbaff = { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5, 6, 9, 10, 10, 8,
11, 12, 11, 9, 9, 10, 10, 8, 11, 12, 11, 9, 9, 10, 10, 8, 11, 12, 11, 9, 9, 10, 10, 8, 13, 13, 9, 9, 10,
10, 8, 13, 13, 9, 9, 10, 10, 14, 14, 14, 14, 14 };
public static int[] last_sig_coeff_map_8x8 = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7,
7, 8, 8, 8 };
public static int[] identityMapping16 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
public static int[] identityMapping4 = { 0, 1, 2, 3 };
public static PartPred[] bPartPredModes = { Direct, L0, L1, Bi, L0, L0, L1, L1, Bi, Bi, L0, L1, Bi };
public static int[] bSubMbTypes = { 0, 0, 0, 0, 1, 2, 1, 2, 1, 2, 3, 3, 3 };
}