提交 5e424311 编写于 作者: A anonymous 提交者: Michael Niedermayer

- add another way to decode norm6 VLC; modify VLC_NORM6_METH0D define in

vc9data.h to select the behaviour
- modified decode_b_picture_primary_header so that
decode_bi_picture_header is no more required

Fixes:
- modifications for some more using of MpegEncContext
- fixed a bit frame type decoding
- switch from pointers to index for AC tables
- corrected P CBPCY decoding (p_cbpcy += 4)

patch by anonymous

Originally committed as revision 3906 to svn://svn.ffmpeg.org/ffmpeg/trunk
上级 0d33db8a
此差异已折叠。
......@@ -6,6 +6,9 @@
#ifndef VC9DATA_H
#define VC9DATA_H
/* Set a method for reading VLC in NORM6 bitplane decoding */
#define VLC_NORM6_METH0D 2
/* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
const int16_t vc9_bfraction_lut[23] = {
420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
......@@ -71,6 +74,7 @@ static const uint8_t vc9_norm2_bits[4] = {
1, 3, 3, 2
};
#if VLC_NORM6_METH0D == 1
static const uint16_t vc9_norm6_codes[64] = {
0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
......@@ -84,7 +88,6 @@ static const uint8_t vc9_norm6_bits[64] = {
4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6,
};
#if 0
/* Normal-6 imode */
static const uint8_t vc9_norm6_spec[64][5] = {
{ 0, 1, 1 },
......@@ -153,6 +156,54 @@ static const uint8_t vc9_norm6_spec[64][5] = {
{63, 3, 5, 1, 1 },
};
#endif
#if TILE_VLC_METHOD == 2 //Hyper-stupid way to handle sparse tables
static const uint8_t vc9_norm6_first[2][64] = {
{ 1, 1}, { 2, 4}, { 3, 4}, { 0, 8},
{ 4, 4}, { 5, 1}, { 2, 8}, { 2, 5},
{ 5, 4}, { 3, 8}, { 4, 8}, { 2, 5},
{ 5, 8}, { 2, 5}, { 2, 5}, { 3, 5},
{ 6, 4}, { 6, 8}, { 7, 8}, { 2, 5},
{ 8, 8}, { 2, 5}, { 2, 5}, { 3, 5},
{ 9, 8}, { 2, 5}, { 2, 5}, { 3, 5},
{ 2, 5}, { 3, 5}, { 3, 5}, { 3, 5},
{ 7, 4}, { 10, 8}, { 11, 8}, { 2, 5},
{ 12, 8}, { 2, 5}, { 2, 5}, { 3, 5},
{ 13, 8}, { 2, 5}, { 2, 5}, { 3, 5},
{ 2, 5}, { 3, 5}, { 3, 5}, { 3, 5},
{ 14, 8}, { 2, 5}, { 2, 5}, { 3, 5},
{ 2, 5}, { 3, 5}, { 3, 5}, { 3, 5},
{ 2, 5}, { 3, 5}, { 3, 5}, { 3, 5},
{ 3, 5}, { 3, 5}, { 3, 5}, { 3, 5}
};
/* 0=>simple VLC, 1=>VLCFLC, 2=>double VLC */
static const int vc9_norm6_mode[64] = {
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 2,
0, 0, 0, 1, 0, 1, 1, 2, 0, 1, 1, 2, 1, 2, 2, 2,
0, 0, 0, 1, 0, 1, 1, 2, 0, 1, 1, 2, 1, 2, 2, 2,
0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2
};
static const uint8_t vc9_norm6_second[22] = {
{ 14, 8}, { 13, 8}, { 12, 8}, { 11, 8},
{ 10, 8}, { 7, 4}, { 9, 8}, { 8, 8},
{ 7, 8}, { 6, 8}, { 6, 4}, { 5, 8},
{ 4, 8}, { 3, 8}, { 5, 4}, { 2, 8},
{ 1, 8}, { 4, 4}, { 0, 8}, { 3, 4},
{ 2, 4}, { 1, 1}
};
static const uint8_t vc9_norm6_flc_val[20] = {
7, 11, 13, 14, 19, 21, 22, 25,
26, 28, 35, 37, 38, 41, 42, 44,
49, 50, 52, 56
};
static const uint8_t vc9_norm6_second_val[22] = {
15, 23, 27, 29, 30, 31, 39, 43,
45, 46, 47, 51, 53, 54, 55, 57,
58, 59, 60, 61, 62, 63
};
#endif
/* 4MV Block pattern VLC tables */
static const uint8_t vc9_4mv_block_pattern_codes[4][16] = {
{ 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2},
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册