⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vlc.java

📁 J2ME MPEG4 解码代码。 以及使用方法。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		{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 + -