35 #define MAX_TABLE_DEPTH(table_bits, max_bits) ((max_bits+table_bits-1)/table_bits)
41 #define DC_VLC_MTD MAX_TABLE_DEPTH(DC_VLC_BITS, MAX_DC_VLC_BITS)
42 #define AC_VLC_MTD MAX_TABLE_DEPTH(AC_VLC_BITS, MAX_AC_VLC_BITS)
43 #define OR_VLC_MTD MAX_TABLE_DEPTH(OR_VLC_BITS, MAX_OR_VLC_BITS)
53 static const uint16_t
sizes[8*4 + 8*2 + 2 + 4] = {
54 576, 548, 582, 618, 546, 616, 560, 642,
55 584, 582, 704, 664, 512, 544, 656, 640,
56 512, 648, 582, 566, 532, 614, 596, 648,
57 586, 552, 584, 590, 544, 578, 584, 624,
59 528, 528, 526, 528, 536, 528, 526, 544,
60 544, 512, 512, 528, 528, 544, 512, 544,
62 128, 128, 128, 128, 128, 128};
66 #define init_ac_vlc(dst,src) \
67 dst.table = &table[offset]; \
68 dst.table_allocated = sizes[sizeidx]; \
69 offset += sizes[sizeidx++]; \
74 INIT_VLC_USE_NEW_STATIC)
85 #define init_dc_vlc(dst,src) \
86 dst.table = &table[offset]; \
87 dst.table_allocated = sizes[sizeidx]; \
88 offset += sizes[sizeidx++]; \
93 INIT_VLC_USE_NEW_STATIC);
101 #define init_or_vlc(dst,src) \
102 dst.table = &table[offset]; \
103 dst.table_allocated = sizes[sizeidx]; \
104 offset += sizes[sizeidx++]; \
109 INIT_VLC_USE_NEW_STATIC);
116 if (offset !=
sizeof(table)/
sizeof(
VLC_TYPE)/2)
152 #define extra_bits(eb) (eb)
153 #define extra_run (0xFF<<8)
154 #define extra_level (0x00<<8)
155 #define run_offset(r) ((r)<<16)
156 #define level_offset(l) ((l)<<24)
201 int *
const run,
int *
const level,
int *
const final){
216 (*final) = t = (i>22);
225 l=(0xE50000>>(i&(0x1E)))&3;
226 t=(0x01030F>>(l<<3));
240 (*run) =(sm&0xff) + (e&( mask));
241 (*level)=(sm>>8) + (e&(~mask));
244 static const uint8_t crazy_mix_runlevel[32]={
245 0x22,0x32,0x33,0x53,0x23,0x42,0x43,0x63,
246 0x24,0x52,0x34,0x73,0x25,0x62,0x44,0x83,
247 0x26,0x72,0x35,0x54,0x27,0x82,0x45,0x64,
248 0x28,0x92,0x36,0x74,0x29,0xa2,0x46,0x84};
252 (*run) =crazy_mix_runlevel[e]>>4;
253 (*level)=crazy_mix_runlevel[e]&0x0F;
263 static const uint8_t dc_index_offset[] ={ 0, 1,2, 3,4, 5,7, 9,13, 17,25, 33,49, 65,97, 129,193};
295 (*level)= (i ^ e) - e;
308 &range, &sum, w->
edges);
317 if(range < quant || range < 3){
329 if(range < 2*w->quant){
330 if( (w->
edges&3) == 0){
338 static const uint8_t prediction_table[3][12]={
339 {0,8,4, 10,11, 2,6,9,1,3,5,7},
340 {4,0,8, 11,10, 3,5,2,6,9,1,7},
341 {8,0,4, 10,11, 1,7,2,6,9,3,5}
418 i=( 0xFFEAF4C4>>(2*b+8*
a) )&3;
420 else w->
orient=( 0xFFEAD8>>(2*c+8*(w->
quant>12)) )&3;
441 #define B(x,y) s->block[0][w->idct_permutation[(x)+(y)*8]]
442 #define T(x) ((x) * dc_level + 0x8000) >> 16;
517 256, 256, 256, 256, 256, 256, 259, 262,
518 265, 269, 272, 275, 278, 282, 285, 288,
519 292, 295, 299, 303, 306, 310, 314, 317,
520 321, 325, 329, 333, 337, 341, 345, 349,
521 353, 358, 362, 366, 371, 375, 379, 384,
522 389, 393, 398, 403, 408, 413, 417, 422,
523 428, 433, 438, 443, 448, 454, 459, 465,
524 470, 476, 482, 488, 493, 499, 505, 511
532 int ac_mode,dc_mode,est_run,dc_level;
535 int use_quant_matrix;
557 use_quant_matrix = 0;
591 level= (level+1) * w->
dquant;
595 level = (level ^ sign) - sign;
597 if(use_quant_matrix){
606 if(w->
flat_dc && ((
unsigned)(dc_level+1)) < 3){
613 dc_level+= (w->
predicted_dc*divide_quant + (1<<12) )>>13;
620 zeros_only = (dc_level == 0);
629 if( (
unsigned int)(dc_level+1) >= 3 && (w->
edges&3) != 3 ){
633 direction= (0x6A017C>>(w->
orient*2))&3;
661 if(!( (w->
edges&2) || ( zeros_only && (w->
orient|4)==4 ) )){
664 if(!( (w->
edges&1) || ( zeros_only && (w->
orient|8)==8 ) )){
681 s->
dest[0] += s->
mb_y * linesize << 3;
682 s->
dest[1] += ( s->
mb_y&(~1) ) * uvlinesize << 2;
683 s->
dest[2] += ( s->
mb_y&(~1) ) * uvlinesize << 2;
736 w->
quant = dquant >> 1;
737 w->
qsum = quant_offset;