32 #define MAX_TABLE_DEPTH(table_bits, max_bits) ((max_bits+table_bits-1)/table_bits)
38 #define DC_VLC_MTD MAX_TABLE_DEPTH(DC_VLC_BITS, MAX_DC_VLC_BITS)
39 #define AC_VLC_MTD MAX_TABLE_DEPTH(AC_VLC_BITS, MAX_AC_VLC_BITS)
40 #define OR_VLC_MTD MAX_TABLE_DEPTH(OR_VLC_BITS, MAX_OR_VLC_BITS)
50 static const uint16_t
sizes[8*4 + 8*2 + 2 + 4] = {
51 576, 548, 582, 618, 546, 616, 560, 642,
52 584, 582, 704, 664, 512, 544, 656, 640,
53 512, 648, 582, 566, 532, 614, 596, 648,
54 586, 552, 584, 590, 544, 578, 584, 624,
56 528, 528, 526, 528, 536, 528, 526, 544,
57 544, 512, 512, 528, 528, 544, 512, 544,
59 128, 128, 128, 128, 128, 128};
63 #define init_ac_vlc(dst,src) \
64 dst.table = &table[offset]; \
65 dst.table_allocated = sizes[sizeidx]; \
66 offset += sizes[sizeidx++]; \
71 INIT_VLC_USE_NEW_STATIC)
82 #define init_dc_vlc(dst,src) \
83 dst.table = &table[offset]; \
84 dst.table_allocated = sizes[sizeidx]; \
85 offset += sizes[sizeidx++]; \
90 INIT_VLC_USE_NEW_STATIC);
98 #define init_or_vlc(dst,src) \
99 dst.table = &table[offset]; \
100 dst.table_allocated = sizes[sizeidx]; \
101 offset += sizes[sizeidx++]; \
106 INIT_VLC_USE_NEW_STATIC);
113 if (offset !=
sizeof(table)/
sizeof(
VLC_TYPE)/2)
133 w->
j_ac_vlc[mode] = &j_ac_vlc[w->
quant<13][mode>>1][table_index];
151 #define extra_bits(eb) (eb)
152 #define extra_run (0xFF<<8)
153 #define extra_level (0x00<<8)
154 #define run_offset(r) ((r)<<16)
155 #define level_offset(l) ((l)<<24)
200 int *
const run,
int *
const level,
int *
const final){
215 (*final) = t = (i>22);
224 l=(0xE50000>>(i&(0x1E)))&3;
225 t=(0x01030F>>(l<<3));
239 (*run) =(sm&0xff) + (e&( mask));
240 (*level)=(sm>>8) + (e&(~mask));
243 static const uint8_t crazy_mix_runlevel[32]={
244 0x22,0x32,0x33,0x53,0x23,0x42,0x43,0x63,
245 0x24,0x52,0x34,0x73,0x25,0x62,0x44,0x83,
246 0x26,0x72,0x35,0x54,0x27,0x82,0x45,0x64,
247 0x28,0x92,0x36,0x74,0x29,0xa2,0x46,0x84};
251 (*run) =crazy_mix_runlevel[e]>>4;
252 (*level)=crazy_mix_runlevel[e]&0x0F;
262 static const uint8_t dc_index_offset[] ={ 0, 1,2, 3,4, 5,7, 9,13, 17,25, 33,49, 65,97, 129,193};
296 (*level)= (i ^ e) - e;
309 &range, &sum, w->
edges);
318 if(range < quant || range < 3){
330 if(range < 2*w->quant){
331 if( (w->
edges&3) == 0){
339 static const uint8_t prediction_table[3][12]={
340 {0,8,4, 10,11, 2,6,9,1,3,5,7},
341 {4,0,8, 11,10, 3,5,2,6,9,1,7},
342 {8,0,4, 10,11, 1,7,2,6,9,3,5}
419 i=( 0xFFEAF4C4>>(2*b+8*
a) )&3;
421 else w->
orient=( 0xFFEAD8>>(2*c+8*(w->
quant>12)) )&3;
442 #define B(x,y) s->block[0][s->dsp.idct_permutation[(x)+(y)*8]]
443 #define T(x) ((x) * dc_level + 0x8000) >> 16;
518 256, 256, 256, 256, 256, 256, 259, 262,
519 265, 269, 272, 275, 278, 282, 285, 288,
520 292, 295, 299, 303, 306, 310, 314, 317,
521 321, 325, 329, 333, 337, 341, 345, 349,
522 353, 358, 362, 366, 371, 375, 379, 384,
523 389, 393, 398, 403, 408, 413, 417, 422,
524 428, 433, 438, 443, 448, 454, 459, 465,
525 470, 476, 482, 488, 493, 499, 505, 511
533 int ac_mode,dc_mode,est_run,dc_level;
536 int use_quant_matrix;
558 use_quant_matrix = 0;
592 level= (level+1) * w->
dquant;
596 level = (level ^ sign) - sign;
598 if(use_quant_matrix){
607 if(w->
flat_dc && ((
unsigned)(dc_level+1)) < 3){
614 dc_level+= (w->
predicted_dc*divide_quant + (1<<12) )>>13;
621 zeros_only = (dc_level == 0);
630 if( (
unsigned int)(dc_level+1) >= 3 && (w->
edges&3) != 3 ){
634 direction= (0x6A017C>>(w->
orient*2))&3;
662 if(!( (w->
edges&2) || ( zeros_only && (w->
orient|4)==4 ) )){
665 if(!( (w->
edges&1) || ( zeros_only && (w->
orient|8)==8 ) )){
682 s->
dest[0] += s->
mb_y * linesize << 3;
683 s->
dest[1] += ( s->
mb_y&(~1) ) * uvlinesize << 2;
684 s->
dest[2] += ( s->
mb_y&(~1) ) * uvlinesize << 2;
734 w->
quant = dquant >> 1;
735 w->
qsum = quant_offset;