📄 vlc.java
字号:
{30, 1, 17}, {30, -1, 17}, {29, 1, 17}, {29, -1, 17},
{28, 1, 17}, {28, -1, 17}, {27, 1, 17}, {27, -1, 17},
// 0000 0000 0010 xxxs x
{0, 40, 16}, {0, 40, 16}, {0, -40, 16}, {0, -40, 16},
{0, 39, 16}, {0, 39, 16}, {0, -39, 16}, {0, -39, 16},
{0, 38, 16}, {0, 38, 16}, {0, -38, 16}, {0, -38, 16},
{0, 37, 16}, {0, 37, 16}, {0, -37, 16}, {0, -37, 16},
{0, 36, 16}, {0, 36, 16}, {0, -36, 16}, {0, -36, 16},
{0, 35, 16}, {0, 35, 16}, {0, -35, 16}, {0, -35, 16},
{0, 34, 16}, {0, 34, 16}, {0, -34, 16}, {0, -34, 16},
{0, 33, 16}, {0, 33, 16}, {0, -33, 16}, {0, -33, 16},
// 0000 0000 0011 xxxs x
{0, 32, 16}, {0, 32, 16}, {0, -32, 16}, {0, -32, 16},
{1, 14, 16}, {1, 14, 16}, {1, -14, 16}, {1, -14, 16},
{1, 13, 16}, {1, 13, 16}, {1, -13, 16}, {1, -13, 16},
{1, 12, 16}, {1, 12, 16}, {1, -12, 16}, {1, -12, 16},
{1, 11, 16}, {1, 11, 16}, {1, -11, 16}, {1, -11, 16},
{1, 10, 16}, {1, 10, 16}, {1, -10, 16}, {1, -10, 16},
{1, 9, 16}, {1, 9, 16}, {1, -9, 16}, {1, -9, 16},
{1, 8, 16}, {1, 8, 16}, {1, -8, 16}, {1, -8, 16},
// 0000 0000 0100 xxsx x
{0, 31, 15}, {0, 31, 15}, {0, 31, 15}, {0, 31, 15},
{0, -31, 15}, {0, -31, 15}, {0, -31, 15}, {0, -31, 15},
{0, 30, 15}, {0, 30, 15}, {0, 30, 15}, {0, 30, 15},
{0, -30, 15}, {0, -30, 15}, {0, -30, 15}, {0, -30, 15},
{0, 29, 15}, {0, 29, 15}, {0, 29, 15}, {0, 29, 15},
{0, -29, 15}, {0, -29, 15}, {0, -29, 15}, {0, -29, 15},
{0, 28, 15}, {0, 28, 15}, {0, 28, 15}, {0, 28, 15},
{0, -28, 15}, {0, -28, 15}, {0, -28, 15}, {0, -28, 15},
// 0000 0000 0101 xxsx x
{0, 27, 15}, {0, 27, 15}, {0, 27, 15}, {0, 27, 15},
{0, -27, 15}, {0, -27, 15}, {0, -27, 15}, {0, -27, 15},
{0, 26, 15}, {0, 26, 15}, {0, 26, 15}, {0, 26, 15},
{0, -26, 15}, {0, -26, 15}, {0, -26, 15}, {0, -26, 15},
{0, 25, 15}, {0, 25, 15}, {0, 25, 15}, {0, 25, 15},
{0, -25, 15}, {0, -25, 15}, {0, -25, 15}, {0, -25, 15},
{0, 24, 15}, {0, 24, 15}, {0, 24, 15}, {0, 24, 15},
{0, -24, 15}, {0, -24, 15}, {0, -24, 15}, {0, -24, 15},
// 0000 0000 0110 xxsx x
{0, 23, 15}, {0, 23, 15}, {0, 23, 15}, {0, 23, 15},
{0, -23, 15}, {0, -23, 15}, {0, -23, 15}, {0, -23, 15},
{0, 22, 15}, {0, 22, 15}, {0, 22, 15}, {0, 22, 15},
{0, -22, 15}, {0, -22, 15}, {0, -22, 15}, {0, -22, 15},
{0, 21, 15}, {0, 21, 15}, {0, 21, 15}, {0, 21, 15},
{0, -21, 15}, {0, -21, 15}, {0, -21, 15}, {0, -21, 15},
{0, 20, 15}, {0, 20, 15}, {0, 20, 15}, {0, 20, 15},
{0, -20, 15}, {0, -20, 15}, {0, -20, 15}, {0, -20, 15},
// 0000 0000 0111 xxsx x
{0, 19, 15}, {0, 19, 15}, {0, 19, 15}, {0, 19, 15},
{0, -19, 15}, {0, -19, 15}, {0, -19, 15}, {0, -19, 15},
{0, 18, 15}, {0, 18, 15}, {0, 18, 15}, {0, 18, 15},
{0, -18, 15}, {0, -18, 15}, {0, -18, 15}, {0, -18, 15},
{0, 17, 15}, {0, 17, 15}, {0, 17, 15}, {0, 17, 15},
{0, -17, 15}, {0, -17, 15}, {0, -17, 15}, {0, -17, 15},
{0, 16, 15}, {0, 16, 15}, {0, 16, 15}, {0, 16, 15},
{0, -16, 15}, {0, -16, 15}, {0, -16, 15}, {0, -16, 15},
// 0000 0000 1000 xsxx x
{10, 2, 14}, {10, 2, 14}, {10, 2, 14}, {10, 2, 14},
{10, 2, 14}, {10, 2, 14}, {10, 2, 14}, {10, 2, 14},
{10, -2, 14}, {10, -2, 14}, {10, -2, 14}, {10, -2, 14},
{10, -2, 14}, {10, -2, 14}, {10, -2, 14}, {10, -2, 14},
{ 9, 2, 14}, { 9, 2, 14}, { 9, 2, 14}, { 9, 2, 14},
{ 9, 2, 14}, { 9, 2, 14}, { 9, 2, 14}, { 9, 2, 14},
{ 9, -2, 14}, { 9, -2, 14}, { 9, -2, 14}, { 9, -2, 14},
{ 9, -2, 14}, { 9, -2, 14}, { 9, -2, 14}, { 9, -2, 14},
// 0000 0000 1001 xsxx x
{5, 3, 14}, {5, 3, 14}, {5, 3, 14}, {5, 3, 14},
{5, 3, 14}, {5, 3, 14}, {5, 3, 14}, {5, 3, 14},
{5, -3, 14}, {5, -3, 14}, {5, -3, 14}, {5, -3, 14},
{5, -3, 14}, {5, -3, 14}, {5, -3, 14}, {5, -3, 14},
{3, 4, 14}, {3, 4, 14}, {3, 4, 14}, {3, 4, 14},
{3, 4, 14}, {3, 4, 14}, {3, 4, 14}, {3, 4, 14},
{3, -4, 14}, {3, -4, 14}, {3, -4, 14}, {3, -4, 14},
{3, -4, 14}, {3, -4, 14}, {3, -4, 14}, {3, -4, 14},
// 0000 0000 1010 xsxx x
{2, 5, 14}, {2, 5, 14}, {2, 5, 14}, {2, 5, 14},
{2, 5, 14}, {2, 5, 14}, {2, 5, 14}, {2, 5, 14},
{2, -5, 14}, {2, -5, 14}, {2, -5, 14}, {2, -5, 14},
{2, -5, 14}, {2, -5, 14}, {2, -5, 14}, {2, -5, 14},
{1, 7, 14}, {1, 7, 14}, {1, 7, 14}, {1, 7, 14},
{1, 7, 14}, {1, 7, 14}, {1, 7, 14}, {1, 7, 14},
{1, -7, 14}, {1, -7, 14}, {1, -7, 14}, {1, -7, 14},
{1, -7, 14}, {1, -7, 14}, {1, -7, 14}, {1, -7, 14},
// 0000 0000 1011 xsxx x
{1, 6, 14}, {1, 6, 14}, {1, 6, 14}, {1, 6, 14},
{1, 6, 14}, {1, 6, 14}, {1, 6, 14}, {1, 6, 14},
{1, -6, 14}, {1, -6, 14}, {1, -6, 14}, {1, -6, 14},
{1, -6, 14}, {1, -6, 14}, {1, -6, 14}, {1, -6, 14},
{0, 15, 14}, {0, 15, 14}, {0, 15, 14}, {0, 15, 14},
{0, 15, 14}, {0, 15, 14}, {0, 15, 14}, {0, 15, 14},
{0, -15, 14}, {0, -15, 14}, {0, -15, 14}, {0, -15, 14},
{0, -15, 14}, {0, -15, 14}, {0, -15, 14}, {0, -15, 14},
// 0000 0000 1100 xsxx x
{0, 14, 14}, {0, 14, 14}, {0, 14, 14}, {0, 14, 14},
{0, 14, 14}, {0, 14, 14}, {0, 14, 14}, {0, 14, 14},
{0, -14, 14}, {0, -14, 14}, {0, -14, 14}, {0, -14, 14},
{0, -14, 14}, {0, -14, 14}, {0, -14, 14}, {0, -14, 14},
{0, 13, 14}, {0, 13, 14}, {0, 13, 14}, {0, 13, 14},
{0, 13, 14}, {0, 13, 14}, {0, 13, 14}, {0, 13, 14},
{0, -13, 14}, {0, -13, 14}, {0, -13, 14}, {0, -13, 14},
{0, -13, 14}, {0, -13, 14}, {0, -13, 14}, {0, -13, 14},
// 0000 0000 1101 xsxx x
{0, 12, 14}, {0, 12, 14}, {0, 12, 14}, {0, 12, 14},
{0, 12, 14}, {0, 12, 14}, {0, 12, 14}, {0, 12, 14},
{0, -12, 14}, {0, -12, 14}, {0, -12, 14}, {0, -12, 14},
{0, -12, 14}, {0, -12, 14}, {0, -12, 14}, {0, -12, 14},
{26, 1, 14}, {26, 1, 14}, {26, 1, 14}, {26, 1, 14},
{26, 1, 14}, {26, 1, 14}, {26, 1, 14}, {26, 1, 14},
{26, -1, 14}, {26, -1, 14}, {26, -1, 14}, {26, -1, 14},
{26, -1, 14}, {26, -1, 14}, {26, -1, 14}, {26, -1, 14},
// 0000 0000 1110 xsxx x
{25, 1, 14}, {25, 1, 14}, {25, 1, 14}, {25, 1, 14},
{25, 1, 14}, {25, 1, 14}, {25, 1, 14}, {25, 1, 14},
{25, -1, 14}, {25, -1, 14}, {25, -1, 14}, {25, -1, 14},
{25, -1, 14}, {25, -1, 14}, {25, -1, 14}, {25, -1, 14},
{24, 1, 14}, {24, 1, 14}, {24, 1, 14}, {24, 1, 14},
{24, 1, 14}, {24, 1, 14}, {24, 1, 14}, {24, 1, 14},
{24, -1, 14}, {24, -1, 14}, {24, -1, 14}, {24, -1, 14},
{24, -1, 14}, {24, -1, 14}, {24, -1, 14}, {24, -1, 14},
// 0000 0000 1111 xsxx x
{23, 1, 14}, {23, 1, 14}, {23, 1, 14}, {23, 1, 14},
{23, 1, 14}, {23, 1, 14}, {23, 1, 14}, {23, 1, 14},
{23, -1, 14}, {23, -1, 14}, {23, -1, 14}, {23, -1, 14},
{23, -1, 14}, {23, -1, 14}, {23, -1, 14}, {23, -1, 14},
{22, 1, 14}, {22, 1, 14}, {22, 1, 14}, {22, 1, 14},
{22, 1, 14}, {22, 1, 14}, {22, 1, 14}, {22, 1, 14},
{22, -1, 14}, {22, -1, 14}, {22, -1, 14}, {22, -1, 14},
{22, -1, 14}, {22, -1, 14}, {22, -1, 14}, {22, -1, 14}
};
// 0000 0001 xxxx s??? ?
private static final byte[][] dct_coeff1 = {
{0, 11, 13}, {0, -11, 13}, {8, 2, 13}, {8, -2, 13},
{4, 3, 13}, {4, -3, 13}, {0, 10, 13}, {0, -10, 13},
{2, 4, 13}, {2, -4, 13}, {7, 2, 13}, {7, -2, 13},
{21, 1, 13}, {21, -1, 13}, {20, 1, 13}, {20, -1, 13},
{0, 9, 13}, {0, -9, 13}, {19, 1, 13}, {19, -1, 13},
{18, 1, 13}, {18, -1, 13}, {1, 5, 13}, {1, -5, 13},
{3, 3, 13}, {3, -3, 13}, {0, 8, 13}, {0, -8, 13},
{6, 2, 13}, {6, -2, 13}, {17, 1, 13}, {17, -1, 13}
};
// 0000 0010 xxs? ???? ?
private static final byte[][] dct_coeff2 = {
{16, 1, 11}, {16, -1, 11}, {5, 2, 11}, {5, -2, 11},
{ 0, 7, 11}, { 0, -7, 11}, {2, 3, 11}, {2, -3, 11}
};
// 0000 0011 xxs? ???? ?
private static final byte[][] dct_coeff3 = {
{1 , 4, 11}, {1 , -4, 11}, {15, 1, 11}, {15, -1, 11},
{14, 1, 11}, {14, -1, 11}, {4 , 2, 11}, {4 , -2, 11}
};
// 0000 xxxs ???? ???? ?
private static final byte[][] dct_coeff4 = {
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
{0, 0, 6}, {0, 0, 6}, {0, 0, 6}, {0, 0, 6}, // ESCAPE
{2, 2, 8}, {2, -2, 8}, {9, 1, 8}, {9, -1, 8},
{0, 4, 8}, {0, -4, 8}, {8, 1, 8}, {8, -1, 8}
};
public class RunLevel {
int run;
int level;
};
public boolean decodeDCTCoeff(InputBitStream input, boolean first, RunLevel runLevel) throws IOException {
int value = input.nextBits(17);
int index = (value >> 5) & 0xfff;
int run = 0;
int level = 0;
int discard = 0;
boolean escape = false;
if (index >= 0x1 && index <= 0xf) {
int offset = (index << 5); // Multiply by 32, the size of each original array
offset += (value & 0x1f); // Get 5 least significant bits, which determine the offset within each array
run = dct_coeff[offset][0];
level = dct_coeff[offset][1];
discard = dct_coeff[offset][2];
}
else if (index >= 0x10 && index <= 0x1f) {
// Discard 4 least significant bits
int offset = (value >> 4) & 0x1f;
run = dct_coeff1[offset][0];
level = dct_coeff1[offset][1];
discard = dct_coeff1[offset][2];
}
else if (index >= 0x20 && index <= 0x2f) {
// Discard 6 least significant bits
int offset = (value >> 6) & 0x7;
run = dct_coeff2[offset][0];
level = dct_coeff2[offset][1];
discard = dct_coeff2[offset][2];
}
else if (index >= 0x30 && index <= 0x3f) {
// Discard 6 least significant bits
int offset = (value >> 6) & 0x7;
run = dct_coeff3[offset][0];
level = dct_coeff3[offset][1];
discard = dct_coeff3[offset][2];
}
else if (index >= 0x40 && index <= 0xff) {
// Discard 9 least significant bits
int offset = (value >> 9) & 0xf;
if (offset >= 4 && offset <= 7)
escape = true;
run = dct_coeff4[offset][0];
level = dct_coeff4[offset][1];
discard = dct_coeff4[offset][2];
}
else {
index = (value >> 13) & 0xf;
if (index == 0x1) {
final byte[][] dct_coeff = {
{7, 1, 7}, {7, -1, 7}, {6, 1, 7}, {6, -1, 7},
{1, 2, 7}, {1, -2, 7}, {5, 1, 7}, {5, -1, 7}
};
int offset = (value >> 10) & 0x7;
run = dct_coeff[offset][0];
level = dct_coeff[offset][1];
discard = dct_coeff[offset][2];
}
else if (index == 0x2) {
final byte[][] dct_coeff = {
{13, 1, 9}, {13, -1, 9}, {0, 6, 9}, {0, -6, 9}, {12, 1, 9}, {12, -1, 9}, {11, 1, 9}, {11, -1, 9},
{ 3, 2, 9}, { 3, -2, 9}, {1, 3, 9}, {1, -3, 9}, { 0, 5, 9}, { 0, -5, 9}, {10, 1, 9}, {10, -1, 9},
{ 0, 3, 6}, { 0, 3, 6}, {0, 3, 6}, {0, 3, 6}, { 0, 3, 6}, { 0, 3, 6}, { 0, 3, 6}, { 0, 3, 6},
{ 0, -3, 6}, { 0, -3, 6}, {0, -3, 6}, {0, -3, 6}, { 0, -3, 6}, { 0, -3, 6}, { 0, -3, 6}, { 0, -3, 6},
};
int offset = (value >> 8) & 0x1f;
run = dct_coeff[offset][0];
level = dct_coeff[offset][1];
discard = dct_coeff[offset][2];
}
else if (index == 0x3) {
final byte[][] dct_coeff = {
{4, 1, 6}, {4, -1, 6}, {3, 1, 6}, {3, -1, 6}
};
int offset = (value >> 11) & 0x3;
run = dct_coeff[offset][0];
level = dct_coeff[offset][1];
discard = dct_coeff[offset][2];
}
else if (index == 0x4) {
run = 0;
level = ((value & 0x1000) != 0? -2 : 2);
discard = 5;
}
else if (index == 0x5) {
run = 2;
level = ((value & 0x1000) != 0? -1 : 1);
discard = 5;
}
else if (index == 0x6) {
run = 1;
level = 1;
discard = 4;
}
else if (index == 0x7) {
run = 1;
level = -1;
discard = 4;
}
// Only for CoeffFirst
else if (first && index >= 0x8 && index <= 0xb) {
run = 0;
level = 1;
discard = 2;
}
else if (first && index >= 0xc && index <= 0xf) {
run = 0;
level = -1;
discard = 2;
}
// Only for CoeffNext
else if (index >= 0xc && index <= 0xd) {
run = 0;
level = 1;
discard = 3;
}
else if (index >= 0xe && index <= 0xf) {
run = 0;
level = -1;
discard = 3;
}
else {
return false;
}
}
input.getBits(discard);
if (escape) {
int r = input.getBits(6);
run = r;
int l = input.nextBits(8);
if (l == 0 || l == 0x80) {
l = input.getSignedBits(16);
}
else {
l = input.getSignedBits(8);
}
level = l;
}
runLevel.run = run;
runLevel.level = level;
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -