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;
295 tprintf(h->
avctx,
"pred_nnz L%X T%X n%d s%d P%X\n", left, top, n,
scan8[n], i&31);
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);
446 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};
448 int zeros_left, coeff_token, total_coeff, i, trailing_ones, run_before;
457 total_coeff= coeff_token>>2;
462 total_coeff= coeff_token>>2;
466 total_coeff= coeff_token>>2;
475 if(total_coeff > (
unsigned)max_coeff) {
480 trailing_ones= coeff_token&3;
481 tprintf(h->
avctx,
"trailing:%d, total:%d\n", trailing_ones, total_coeff);
486 level[0] = 1-((i&4)>>1);
487 level[1] = 1-((i&2) );
488 level[2] = 1-((i&1)<<1);
490 if(trailing_ones<total_coeff) {
492 int suffix_length = total_coeff > 10 & trailing_ones < 3;
497 if(level_code >= 100){
498 prefix= level_code - 100;
508 }
else if(prefix==14){
512 level_code= prefix +
get_bits(gb, 4);
520 level_code += (1<<(prefix-3))-4096;
522 level_code +=
get_bits(gb, prefix-3);
525 if(trailing_ones < 3) level_code += 2;
528 mask= -(level_code&1);
529 level[trailing_ones]= (((2+level_code)>>1) ^
mask) - mask;
531 level_code += ((level_code>>31)|1) & -(trailing_ones < 3);
533 suffix_length = 1 + (level_code + 3
U > 6
U);
534 level[trailing_ones]= level_code;
538 for(i=trailing_ones+1;i<total_coeff;i++) {
539 static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
544 if(level_code >= 100){
545 prefix= level_code - 100;
550 level_code = (prefix<<suffix_length) +
get_bits(gb, suffix_length);
552 level_code = 15<<suffix_length;
558 level_code += (1<<(prefix-3))-4096;
560 level_code +=
get_bits(gb, prefix-3);
562 mask= -(level_code&1);
563 level_code= (((2+level_code)>>1) ^
mask) - mask;
565 level[i]= level_code;
566 suffix_length+= suffix_limit[suffix_length] + level_code > 2
U*suffix_limit[suffix_length];
570 if(total_coeff == max_coeff)
573 if (max_coeff <= 8) {
575 zeros_left =
get_vlc2(gb, (chroma_dc_total_zeros_vlc-1)[total_coeff].
table,
578 zeros_left =
get_vlc2(gb, (chroma422_dc_total_zeros_vlc-1)[total_coeff].table,
585 #define STORE_BLOCK(type) \
586 scantable += zeros_left + total_coeff - 1; \
587 if(n >= LUMA_DC_BLOCK_INDEX){ \
588 ((type*)block)[*scantable] = level[0]; \
589 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
591 run_before= get_vlc2(gb, (run_vlc-1)[zeros_left].table, RUN_VLC_BITS, 1); \
593 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
594 zeros_left -= run_before; \
595 scantable -= 1 + run_before; \
596 ((type*)block)[*scantable]= level[i]; \
598 for(;i<total_coeff;i++) { \
600 ((type*)block)[*scantable]= level[i]; \
603 ((type*)block)[*scantable] = ((int)(level[0] * qmul[*scantable] + 32))>>6; \
604 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
606 run_before= get_vlc2(gb, (run_vlc-1)[zeros_left].table, RUN_VLC_BITS, 1); \
608 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
609 zeros_left -= run_before; \
610 scantable -= 1 + run_before; \
611 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
613 for(;i<total_coeff;i++) { \
615 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
648 for(i8x8=0; i8x8<4; i8x8++){
649 for(i4x4=0; i4x4<4; i4x4++){
650 const int index= i4x4 + 4*i8x8 + p*16;
663 int cqm = (
IS_INTRA( mb_type ) ? 0:3)+p;
666 for(i8x8=0; i8x8<4; i8x8++){
671 for(i4x4=0; i4x4<4; i4x4++){
672 const int index= i4x4 + 4*i8x8 + p*16;
678 nnz[0] += nnz[1] + nnz[8] + nnz[9];
679 new_cbp |= !!nnz[0] << i8x8;
681 for(i4x4=0; i4x4<4; i4x4++){
682 const int index= i4x4 + 4*i8x8 + p*16;
692 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
702 unsigned int mb_type,
cbp;
706 unsigned local_ref_count[2];
727 if( (h->
mb_y&1) == 0 )
740 goto decode_intra_mb;
748 goto decode_intra_mb;
810 for(i=0; i<16; i+=di){
815 mode = rem_mode + (rem_mode >=
mode);
839 }
else if(partition_count==4){
840 int i, j, sub_partition_count[4], list, ref[2][4];
880 }
else if(ref_count == 2){
912 for(j=0; j<sub_partition_count[i]; j++){
914 const int index= 4*i + block_width*j;
937 uint32_t *p= (uint32_t *)&h->
mv_cache[list][
scan8[4*i] ][0];
952 if(
IS_DIR(mb_type, 0, list)){
953 if(local_ref_count[list]==1){
955 }
else if(local_ref_count[list]==2){
959 if (val >= local_ref_count[list]){
968 if(
IS_DIR(mb_type, 0, list)){
982 if(
IS_DIR(mb_type, i, list)){
983 if(local_ref_count[list] == 1) {
985 }
else if(local_ref_count[list] == 2) {
989 if (val >= local_ref_count[list]){
1002 if(
IS_DIR(mb_type, i, list)){
1019 if(
IS_DIR(mb_type, i, list)){
1020 if(local_ref_count[list]==1){
1022 }
else if(local_ref_count[list]==2){
1026 if (val >= local_ref_count[list]){
1039 if(
IS_DIR(mb_type, i, list)){
1076 if (!decode_chroma && cbp>15) {
1082 if(dct8x8_allowed && (cbp&15) && !
IS_INTRA(mb_type)){
1090 int i4x4, i8x8, chroma_idx;
1094 const uint8_t *scan, *scan8x8;
1109 if(((
unsigned)h->
qscale) > max_qp){
1111 else h->
qscale-= max_qp+1;
1112 if(((
unsigned)h->
qscale) > max_qp){
1136 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1140 NULL, 4*num_c8x8) < 0) {
1146 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1149 for (i8x8 = 0; i8x8<num_c8x8; i8x8++) {
1150 for (i4x4 = 0; i4x4 < 4; i4x4++) {
1151 const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;