29 #define UNCHECKED_BITSTREAM_READER 1
42 0, 1, 2, 4, 8, 3, 5,10,12,15, 7,11,13,14, 6, 9,
46 15, 0, 7,11,13,14, 3, 5,10,12, 1, 2, 4, 8, 6, 9,
92 6, 2, 0, 0, 8, 6, 3, 0, 9, 8, 7, 5, 10, 9, 8, 6,
93 11,10, 9, 7, 13,11,10, 8, 13,13,11, 9, 13,13,13,10,
94 14,14,13,11, 14,14,14,13, 15,15,14,14, 15,15,15,14,
95 16,15,15,15, 16,16,16,15, 16,16,16,16, 16,16,16,16,
99 6, 2, 0, 0, 6, 5, 3, 0, 7, 6, 6, 4, 8, 6, 6, 4,
100 8, 7, 7, 5, 9, 8, 8, 6, 11, 9, 9, 6, 11,11,11, 7,
101 12,11,11, 9, 12,12,12,11, 12,12,12,11, 13,13,13,12,
102 13,13,13,13, 13,14,13,13, 14,14,14,13, 14,14,14,14,
106 6, 4, 0, 0, 6, 5, 4, 0, 6, 5, 5, 4, 7, 5, 5, 4,
107 7, 5, 5, 4, 7, 6, 6, 4, 7, 6, 6, 4, 8, 7, 7, 5,
108 8, 8, 7, 6, 9, 8, 8, 7, 9, 9, 8, 8, 9, 9, 9, 8,
109 10, 9, 9, 9, 10,10,10,10, 10,10,10,10, 10,10,10,10,
113 6, 6, 0, 0, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6,
114 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
115 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
116 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
123 5, 1, 0, 0, 7, 4, 1, 0, 7, 6, 5, 3, 7, 6, 5, 3,
124 7, 6, 5, 4, 15, 6, 5, 4, 11,14, 5, 4, 8,10,13, 4,
125 15,14, 9, 4, 11,10,13,12, 15,14, 9,12, 11,10,13, 8,
126 15, 1, 9,12, 11,14,13, 8, 7,10, 9,12, 4, 6, 5, 8,
130 11, 2, 0, 0, 7, 7, 3, 0, 7,10, 9, 5, 7, 6, 5, 4,
131 4, 6, 5, 6, 7, 6, 5, 8, 15, 6, 5, 4, 11,14,13, 4,
132 15,10, 9, 4, 11,14,13,12, 8,10, 9, 8, 15,14,13,12,
133 11,10, 9,12, 7,11, 6, 8, 9, 8,10, 1, 7, 6, 5, 4,
137 15,14, 0, 0, 11,15,13, 0, 8,12,14,12, 15,10,11,11,
138 11, 8, 9,10, 9,14,13, 9, 8,10, 9, 8, 15,14,13,13,
139 11,14,10,12, 15,10,13,12, 11,14, 9,12, 8,10,13, 8,
140 13, 7, 9,12, 9,12,11,10, 5, 8, 7, 6, 1, 4, 3, 2,
144 0, 1, 0, 0, 4, 5, 6, 0, 8, 9,10,11, 12,13,14,15,
145 16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31,
146 32,33,34,35, 36,37,38,39, 40,41,42,43, 44,45,46,47,
147 48,49,50,51, 52,53,54,55, 56,57,58,59, 60,61,62,63,
152 {1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},
153 {3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},
154 {4,3,3,3,4,4,3,3,4,5,5,6,5,6},
155 {5,3,4,4,3,3,3,4,3,4,5,5,5},
156 {4,4,4,3,3,3,3,3,4,5,4,5},
157 {6,5,3,3,3,3,3,3,4,3,6},
158 {6,5,3,3,3,2,3,4,3,6},
170 {1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},
171 {7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},
172 {5,7,6,5,4,3,4,3,2,3,2,1,1,0},
173 {3,7,5,4,6,5,4,3,3,2,2,1,0},
174 {5,4,3,7,6,5,4,3,2,1,1,0},
175 {1,1,7,6,5,4,3,2,1,1,0},
176 {1,1,5,4,3,3,2,1,1,0},
200 { 1, 3, 3, 4, 4, 4, 5, 5 },
201 { 3, 2, 3, 3, 3, 3, 3 },
202 { 3, 3, 2, 2, 3, 3 },
210 { 1, 2, 3, 2, 3, 1, 1, 0 },
211 { 0, 1, 1, 4, 5, 6, 7 },
212 { 0, 1, 1, 2, 6, 7 },
226 {3,3,3,3,3,3,3,4,5,6,7,8,9,10,11},
236 {7,6,5,4,3,2,1,1,1,1,1,1,1,1,1},
271 #define LEVEL_TAB_BITS 8
274 #define CHROMA_DC_COEFF_TOKEN_VLC_BITS 8
275 #define CHROMA422_DC_COEFF_TOKEN_VLC_BITS 13
276 #define COEFF_TOKEN_VLC_BITS 8
277 #define TOTAL_ZEROS_VLC_BITS 9
278 #define CHROMA_DC_TOTAL_ZEROS_VLC_BITS 3
279 #define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS 5
280 #define RUN_VLC_BITS 3
281 #define RUN7_VLC_BITS 6
288 const int index8=
scan8[n];
293 if(i<64) i= (i+1)>>1;
304 for(suffix_length=0; suffix_length<7; suffix_length++){
309 int level_code = (prefix << suffix_length) +
310 (i >> (
av_log2(i) - suffix_length)) - (1 << suffix_length);
311 int mask = -(level_code&1);
312 level_code = (((2 + level_code) >> 1) ^
mask) - mask;
368 init_vlc(&chroma_dc_total_zeros_vlc[i],
378 init_vlc(&chroma422_dc_total_zeros_vlc[i],
428 print_bin(buf>>(32-log), log);
447 static const int coeff_token_table_index[17]= {0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3};
449 int zeros_left, coeff_token, total_coeff, i, trailing_ones, run_before;
458 total_coeff= coeff_token>>2;
463 total_coeff= coeff_token>>2;
467 total_coeff= coeff_token>>2;
476 if(total_coeff > (
unsigned)max_coeff) {
481 trailing_ones= coeff_token&3;
482 tprintf(h->
s.
avctx,
"trailing:%d, total:%d\n", trailing_ones, total_coeff);
487 level[0] = 1-((i&4)>>1);
488 level[1] = 1-((i&2) );
489 level[2] = 1-((i&1)<<1);
491 if(trailing_ones<total_coeff) {
493 int suffix_length = total_coeff > 10 & trailing_ones < 3;
498 if(level_code >= 100){
499 prefix= level_code - 100;
509 }
else if(prefix==14){
513 level_code= prefix +
get_bits(gb, 4);
521 level_code += (1<<(prefix-3))-4096;
523 level_code +=
get_bits(gb, prefix-3);
526 if(trailing_ones < 3) level_code += 2;
529 mask= -(level_code&1);
530 level[trailing_ones]= (((2+level_code)>>1) ^
mask) - mask;
532 level_code += ((level_code>>31)|1) & -(trailing_ones < 3);
534 suffix_length = 1 + (level_code + 3
U > 6
U);
535 level[trailing_ones]= level_code;
539 for(i=trailing_ones+1;i<total_coeff;i++) {
540 static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
545 if(level_code >= 100){
546 prefix= level_code - 100;
551 level_code = (prefix<<suffix_length) +
get_bits(gb, suffix_length);
553 level_code = (15<<suffix_length) +
get_bits(gb, prefix-3);
555 level_code += (1<<(prefix-3))-4096;
557 mask= -(level_code&1);
558 level_code= (((2+level_code)>>1) ^
mask) - mask;
560 level[i]= level_code;
561 suffix_length+= suffix_limit[suffix_length] + level_code > 2
U*suffix_limit[suffix_length];
565 if(total_coeff == max_coeff)
568 if (max_coeff <= 8) {
570 zeros_left =
get_vlc2(gb, (chroma_dc_total_zeros_vlc-1)[total_coeff].
table,
573 zeros_left =
get_vlc2(gb, (chroma422_dc_total_zeros_vlc-1)[total_coeff].table,
580 #define STORE_BLOCK(type) \
581 scantable += zeros_left + total_coeff - 1; \
582 if(n >= LUMA_DC_BLOCK_INDEX){ \
583 ((type*)block)[*scantable] = level[0]; \
584 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
586 run_before= get_vlc2(gb, (run_vlc-1)[zeros_left].table, RUN_VLC_BITS, 1); \
588 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
589 zeros_left -= run_before; \
590 scantable -= 1 + run_before; \
591 ((type*)block)[*scantable]= level[i]; \
593 for(;i<total_coeff;i++) { \
595 ((type*)block)[*scantable]= level[i]; \
598 ((type*)block)[*scantable] = ((int)(level[0] * qmul[*scantable] + 32))>>6; \
599 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
601 run_before= get_vlc2(gb, (run_vlc-1)[zeros_left].table, RUN_VLC_BITS, 1); \
603 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
604 zeros_left -= run_before; \
605 scantable -= 1 + run_before; \
606 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
608 for(;i<total_coeff;i++) { \
610 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
644 for(i8x8=0; i8x8<4; i8x8++){
645 for(i4x4=0; i4x4<4; i4x4++){
646 const int index= i4x4 + 4*i8x8 + p*16;
659 int cqm = (
IS_INTRA( mb_type ) ? 0:3)+p;
662 for(i8x8=0; i8x8<4; i8x8++){
667 for(i4x4=0; i4x4<4; i4x4++){
668 const int index= i4x4 + 4*i8x8 + p*16;
674 nnz[0] += nnz[1] + nnz[8] + nnz[9];
675 new_cbp |= !!nnz[0] << i8x8;
677 for(i4x4=0; i4x4<4; i4x4++){
678 const int index= i4x4 + 4*i8x8 + p*16;
688 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
699 unsigned int mb_type,
cbp;
703 unsigned local_ref_count[2];
724 if( (s->
mb_y&1) == 0 )
737 goto decode_intra_mb;
745 goto decode_intra_mb;
776 for(x=0; x < mb_size; x++){
808 for(i=0; i<16; i+=di){
813 mode = rem_mode + (rem_mode >=
mode);
837 }
else if(partition_count==4){
838 int i, j, sub_partition_count[4], list, ref[2][4];
878 }
else if(ref_count == 2){
910 for(j=0; j<sub_partition_count[i]; j++){
912 const int index= 4*i + block_width*j;
935 uint32_t *p= (uint32_t *)&h->
mv_cache[list][
scan8[4*i] ][0];
950 if(
IS_DIR(mb_type, 0, list)){
951 if(local_ref_count[list]==1){
953 }
else if(local_ref_count[list]==2){
957 if(val >= local_ref_count[list]){
966 if(
IS_DIR(mb_type, 0, list)){
980 if(
IS_DIR(mb_type, i, list)){
981 if(local_ref_count[list] == 1){
983 }
else if(local_ref_count[list] == 2){
987 if(val >= local_ref_count[list]){
1000 if(
IS_DIR(mb_type, i, list)){
1017 if(
IS_DIR(mb_type, i, list)){
1018 if(local_ref_count[list]==1){
1020 }
else if(local_ref_count[list]==2){
1024 if(val >= local_ref_count[list]){
1037 if(
IS_DIR(mb_type, i, list)){
1074 if (!decode_chroma && cbp>15) {
1080 if(dct8x8_allowed && (cbp&15) && !
IS_INTRA(mb_type)){
1088 int i4x4, i8x8, chroma_idx;
1092 const uint8_t *scan, *scan8x8;
1107 if(((
unsigned)s->
qscale) > max_qp){
1109 else s->
qscale-= max_qp+1;
1110 if(((
unsigned)s->
qscale) > max_qp){
1134 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1138 NULL, 4*num_c8x8) < 0) {
1144 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1147 for (i8x8=0; i8x8<num_c8x8; i8x8++) {
1148 for (i4x4=0; i4x4<4; i4x4++) {
1149 const int index= 16 + 16*chroma_idx + 8*i8x8 + i4x4;