mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
replace get_superblock_run_length() with a VLC table
Originally committed as revision 4267 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
0ad72bdd5c
commit
d8278bab79
@ -1182,7 +1182,14 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
|
|||||||
while (current_superblock < s->superblock_count) {
|
while (current_superblock < s->superblock_count) {
|
||||||
if (current_run == 0) {
|
if (current_run == 0) {
|
||||||
bit ^= 1;
|
bit ^= 1;
|
||||||
|
#if 1
|
||||||
|
current_run = get_vlc2(gb,
|
||||||
|
s->superblock_run_length_vlc.table, 6, 2) + 1;
|
||||||
|
if (current_run == 34)
|
||||||
|
current_run += get_bits(gb, 12);
|
||||||
|
#else
|
||||||
current_run = get_superblock_run_length(gb);
|
current_run = get_superblock_run_length(gb);
|
||||||
|
#endif
|
||||||
debug_block_coding(" setting superblocks %d..%d to %s\n",
|
debug_block_coding(" setting superblocks %d..%d to %s\n",
|
||||||
current_superblock,
|
current_superblock,
|
||||||
current_superblock + current_run - 1,
|
current_superblock + current_run - 1,
|
||||||
@ -1221,7 +1228,14 @@ static int unpack_superblocks(Vp3DecodeContext *s, GetBitContext *gb)
|
|||||||
|
|
||||||
if (current_run == 0) {
|
if (current_run == 0) {
|
||||||
bit ^= 1;
|
bit ^= 1;
|
||||||
|
#if 1
|
||||||
|
current_run = get_vlc2(gb,
|
||||||
|
s->superblock_run_length_vlc.table, 6, 2) + 1;
|
||||||
|
if (current_run == 34)
|
||||||
|
current_run += get_bits(gb, 12);
|
||||||
|
#else
|
||||||
current_run = get_superblock_run_length(gb);
|
current_run = get_superblock_run_length(gb);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_block_coding(" setting superblock %d to %s\n",
|
debug_block_coding(" setting superblock %d to %s\n",
|
||||||
@ -2630,6 +2644,10 @@ static int vp3_decode_init(AVCodecContext *avctx)
|
|||||||
&ac_bias_3[i][0][0], 4, 2, 0);
|
&ac_bias_3[i][0][0], 4, 2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init_vlc(&s->superblock_run_length_vlc, 6, 34,
|
||||||
|
&superblock_run_length_vlc_table[0][1], 4, 2,
|
||||||
|
&superblock_run_length_vlc_table[0][0], 4, 2, 0);
|
||||||
|
|
||||||
init_vlc(&s->fragment_run_length_vlc, 5, 31,
|
init_vlc(&s->fragment_run_length_vlc, 5, 31,
|
||||||
&fragment_run_length_vlc_table[0][1], 4, 2,
|
&fragment_run_length_vlc_table[0][1], 4, 2,
|
||||||
&fragment_run_length_vlc_table[0][0], 4, 2, 0);
|
&fragment_run_length_vlc_table[0][0], 4, 2, 0);
|
||||||
|
@ -72,6 +72,27 @@ static const uint32_t vp31_filter_limit_values[64] =
|
|||||||
0, 0, 0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const uint16_t superblock_run_length_vlc_table[34][2] = {
|
||||||
|
{ 0, 1 },
|
||||||
|
|
||||||
|
{ 4, 3 }, { 5, 3 },
|
||||||
|
|
||||||
|
{ 0xC, 4 }, { 0xD, 4 },
|
||||||
|
|
||||||
|
{ 0x38, 6 }, { 0x39, 6 }, { 0x3A, 6 }, { 0x3B, 6 },
|
||||||
|
|
||||||
|
{ 0xF0, 8 }, { 0xF1, 8 }, { 0xF2, 8 }, { 0xF3, 8 },
|
||||||
|
{ 0xF4, 8 }, { 0xF5, 8 }, { 0xF6, 8 }, { 0xF7, 8 },
|
||||||
|
|
||||||
|
{ 0x3E0, 10 }, { 0x3E1, 10 }, { 0x3E2, 10 }, { 0x3E3, 10 },
|
||||||
|
{ 0x3E4, 10 }, { 0x3E5, 10 }, { 0x3E6, 10 }, { 0x3E7, 10 },
|
||||||
|
{ 0x3E8, 10 }, { 0x3E9, 10 }, { 0x3EA, 10 }, { 0x3EB, 10 },
|
||||||
|
{ 0x3EC, 10 }, { 0x3ED, 10 }, { 0x3EE, 10 }, { 0x3EF, 10 },
|
||||||
|
|
||||||
|
{ 0x3F, 6 } /* this last VLC is a special case for reading 12 more
|
||||||
|
bits from stream and adding the value 34 */
|
||||||
|
};
|
||||||
|
|
||||||
static const uint16_t fragment_run_length_vlc_table[30][2] = {
|
static const uint16_t fragment_run_length_vlc_table[30][2] = {
|
||||||
/* 1 -> 2 */
|
/* 1 -> 2 */
|
||||||
{ 0x0, 2 }, { 0x1, 2 },
|
{ 0x0, 2 }, { 0x1, 2 },
|
||||||
|
Loading…
Reference in New Issue
Block a user