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
289 const int index8=
scan8[
n];
294 if(
i<64)
i= (
i+1)>>1;
305 for(suffix_length=0; suffix_length<7; suffix_length++){
310 int level_code = (prefix << suffix_length) +
311 (
i >> (
av_log2(
i) - suffix_length)) - (1 << suffix_length);
312 int mask = -(level_code&1);
313 level_code = (((2 + level_code) >> 1) ^
mask) -
mask;
441 const uint8_t *scantable,
const uint32_t *qmul,
444 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};
446 int zeros_left, coeff_token, total_coeff,
i, trailing_ones, run_before;
455 total_coeff= coeff_token>>2;
460 total_coeff= coeff_token>>2;
464 total_coeff= coeff_token>>2;
473 if(total_coeff > (
unsigned)max_coeff) {
478 trailing_ones= coeff_token&3;
479 ff_tlog(
h->avctx,
"trailing:%d, total:%d\n", trailing_ones, total_coeff);
488 if(trailing_ones<total_coeff) {
490 int suffix_length = total_coeff > 10 & trailing_ones < 3;
495 if(level_code >= 100){
496 prefix= level_code - 100;
506 }
else if(prefix==14){
510 level_code= prefix +
get_bits(gb, 4);
518 level_code += (1<<(prefix-3))-4096;
520 level_code +=
get_bits(gb, prefix-3);
523 if(trailing_ones < 3) level_code += 2;
526 mask= -(level_code&1);
529 level_code += ((level_code>>31)|1) & -(trailing_ones < 3);
531 suffix_length = 1 + (level_code + 3
U > 6
U);
532 level[trailing_ones]= level_code;
536 for(
i=trailing_ones+1;
i<total_coeff;
i++) {
537 static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
542 if(level_code >= 100){
543 prefix= level_code - 100;
548 level_code = (prefix<<suffix_length) +
get_bits(gb, suffix_length);
550 level_code = 15<<suffix_length;
556 level_code += (1<<(prefix-3))-4096;
558 level_code +=
get_bits(gb, prefix-3);
560 mask= -(level_code&1);
561 level_code= (((2+level_code)>>1) ^
mask) -
mask;
564 suffix_length+= suffix_limit[suffix_length] + level_code > 2
U*suffix_limit[suffix_length];
568 if(total_coeff == max_coeff)
571 if (max_coeff <= 8) {
583 #define STORE_BLOCK(type) \
584 scantable += zeros_left + total_coeff - 1; \
585 if(n >= LUMA_DC_BLOCK_INDEX){ \
586 ((type*)block)[*scantable] = level[0]; \
587 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
589 run_before= get_vlc2(gb, run_vlc[zeros_left].table, RUN_VLC_BITS, 1); \
591 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
592 zeros_left -= run_before; \
593 scantable -= 1 + run_before; \
594 ((type*)block)[*scantable]= level[i]; \
596 for(;i<total_coeff;i++) { \
598 ((type*)block)[*scantable]= level[i]; \
601 ((type*)block)[*scantable] = ((int)(level[0] * qmul[*scantable] + 32))>>6; \
602 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
604 run_before= get_vlc2(gb, run_vlc[zeros_left].table, RUN_VLC_BITS, 1); \
606 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
607 zeros_left -= run_before; \
608 scantable -= 1 + run_before; \
609 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
611 for(;i<total_coeff;i++) { \
613 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
617 if (
h->pixel_shift) {
634 const uint8_t *scan8x8,
int pixel_shift,
635 int mb_type,
int cbp,
int p)
651 for(i8x8=0; i8x8<4; i8x8++){
652 for(i4x4=0; i4x4<4; i4x4++){
653 const int index= i4x4 + 4*i8x8 + p*16;
655 index, scan + 1,
h->ps.pps->dequant4_coeff[p][qscale], 15) < 0 ){
666 int cqm = (
IS_INTRA( mb_type ) ? 0:3)+p;
669 for(i8x8=0; i8x8<4; i8x8++){
672 int16_t *
buf = &sl->
mb[64*i8x8+256*p << pixel_shift];
674 for(i4x4=0; i4x4<4; i4x4++){
675 const int index= i4x4 + 4*i8x8 + p*16;
677 h->ps.pps->dequant8_coeff[cqm][qscale], 16) < 0 )
681 nnz[0] += nnz[1] + nnz[8] + nnz[9];
682 new_cbp |= !!nnz[0] << i8x8;
684 for(i4x4=0; i4x4<4; i4x4++){
685 const int index= i4x4 + 4*i8x8 + p*16;
687 scan,
h->ps.pps->dequant4_coeff[cqm][qscale], 16) < 0 ){
695 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
706 unsigned int mb_type, cbp;
707 int dct8x8_allowed =
h->ps.pps->transform_8x8_mode;
708 const int decode_chroma =
h->ps.sps->chroma_format_idc == 1 ||
h->ps.sps->chroma_format_idc == 2;
709 const int pixel_shift =
h->pixel_shift;
719 if (mb_skip_run >
h->mb_num) {
736 if ((sl->
mb_y & 1) == 0)
749 goto decode_intra_mb;
757 goto decode_intra_mb;
781 h->ps.sps->bit_depth_luma;
792 h->cur_pic.qscale_table[mb_xy] = 0;
794 memset(
h->non_zero_count[mb_xy], 16, 48);
796 h->cur_pic.mb_type[mb_xy] = mb_type;
816 for(
i=0;
i<16;
i+=di){
821 mode = rem_mode + (rem_mode >=
mode);
848 }
else if(partition_count==4){
849 int i, j, sub_partition_count[4],
list,
ref[2][4];
889 }
else if(ref_count == 2){
921 for(j=0; j<sub_partition_count[
i]; j++){
923 const int index= 4*
i + block_width*j;
928 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
932 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
934 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
936 mv_cache[ 1 ][0]= mx;
937 mv_cache[ 1 ][1]= my;
939 mv_cache[ 8 ][0]= mx;
940 mv_cache[ 8 ][1]= my;
942 mv_cache[ 0 ][0]= mx;
943 mv_cache[ 0 ][1]= my;
954 dct8x8_allowed &=
h->ps.sps->direct_8x8_inference_flag;
965 }
else if (rc == 2) {
982 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
996 }
else if (rc == 2) {
1017 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
1034 }
else if (rc == 2) {
1055 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
1090 if (!decode_chroma && cbp>15) {
1096 if(dct8x8_allowed && (cbp&15) && !
IS_INTRA(mb_type)){
1100 h->cbp_table[mb_xy]= cbp;
1101 h->cur_pic.mb_type[mb_xy] = mb_type;
1104 int i4x4, i8x8, chroma_idx;
1108 const uint8_t *scan, *scan8x8;
1109 const int max_qp = 51 + 6 * (
h->ps.sps->bit_depth_luma - 8);
1113 sl->
qscale += (unsigned)dquant;
1115 if (((
unsigned)sl->
qscale) > max_qp){
1117 else sl->
qscale -= max_qp+1;
1118 if (((
unsigned)sl->
qscale) > max_qp){
1129 scan8x8 = sl->
qscale ?
h->field_scan8x8_cavlc :
h->field_scan8x8_cavlc_q0;
1130 scan = sl->
qscale ?
h->field_scan :
h->field_scan_q0;
1132 scan8x8 = sl->
qscale ?
h->zigzag_scan8x8_cavlc :
h->zigzag_scan8x8_cavlc_q0;
1133 scan = sl->
qscale ?
h->zigzag_scan :
h->zigzag_scan_q0;
1139 h->cbp_table[mb_xy] |=
ret << 12;
1148 const int num_c8x8 =
h->ps.sps->chroma_format_idc;
1151 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1155 NULL, 4 * num_c8x8) < 0) {
1161 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1162 const uint32_t *qmul =
h->ps.pps->dequant4_coeff[chroma_idx+1+(
IS_INTRA( mb_type ) ? 0:3)][sl->
chroma_qp[chroma_idx]];
1163 int16_t *
mb = sl->
mb + (16*(16 + 16*chroma_idx) << pixel_shift);
1164 for (i8x8 = 0; i8x8<num_c8x8; i8x8++) {
1165 for (i4x4 = 0; i4x4 < 4; i4x4++) {
1166 const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;
1169 mb += 16 << pixel_shift;
1183 h->cur_pic.qscale_table[mb_xy] = sl->
qscale;