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;
346 for (
int i = 0;
i < 4;
i++) {
362 for (
int i = 0;
i < 3;
i++) {
372 for (
int i = 0;
i < 7;
i++) {
382 for (
int i = 0;
i < 15;
i++) {
392 for (
int i = 0;
i < 6;
i++) {
436 const uint8_t *scantable,
const uint32_t *qmul,
439 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};
441 int zeros_left, coeff_token, total_coeff,
i, trailing_ones, run_before;
450 total_coeff= coeff_token>>2;
455 total_coeff= coeff_token>>2;
459 total_coeff= coeff_token>>2;
468 if(total_coeff > (
unsigned)max_coeff) {
473 trailing_ones= coeff_token&3;
474 ff_tlog(
h->avctx,
"trailing:%d, total:%d\n", trailing_ones, total_coeff);
483 if(trailing_ones<total_coeff) {
485 int suffix_length = total_coeff > 10 & trailing_ones < 3;
490 if(level_code >= 100){
491 prefix= level_code - 100;
501 }
else if(prefix==14){
505 level_code= prefix +
get_bits(gb, 4);
513 level_code += (1<<(prefix-3))-4096;
515 level_code +=
get_bits(gb, prefix-3);
518 if(trailing_ones < 3) level_code += 2;
521 mask= -(level_code&1);
524 level_code += ((level_code>>31)|1) & -(trailing_ones < 3);
526 suffix_length = 1 + (level_code + 3
U > 6
U);
527 level[trailing_ones]= level_code;
531 for(
i=trailing_ones+1;
i<total_coeff;
i++) {
532 static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
537 if(level_code >= 100){
538 prefix= level_code - 100;
543 level_code = (prefix<<suffix_length) +
get_bits(gb, suffix_length);
545 level_code = 15<<suffix_length;
551 level_code += (1<<(prefix-3))-4096;
553 level_code +=
get_bits(gb, prefix-3);
555 mask= -(level_code&1);
556 level_code= (((2+level_code)>>1) ^
mask) -
mask;
559 suffix_length+= suffix_limit[suffix_length] + level_code > 2
U*suffix_limit[suffix_length];
563 if(total_coeff == max_coeff)
566 if (max_coeff <= 8) {
578 #define STORE_BLOCK(type) \
579 scantable += zeros_left + total_coeff - 1; \
580 if(n >= LUMA_DC_BLOCK_INDEX){ \
581 ((type*)block)[*scantable] = level[0]; \
582 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
584 run_before= get_vlc2(gb, run_vlc[zeros_left].table, RUN_VLC_BITS, 1); \
586 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
587 zeros_left -= run_before; \
588 scantable -= 1 + run_before; \
589 ((type*)block)[*scantable]= level[i]; \
591 for(;i<total_coeff;i++) { \
593 ((type*)block)[*scantable]= level[i]; \
596 ((type*)block)[*scantable] = ((int)(level[0] * qmul[*scantable] + 32))>>6; \
597 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
599 run_before= get_vlc2(gb, run_vlc[zeros_left].table, RUN_VLC_BITS, 1); \
601 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
602 zeros_left -= run_before; \
603 scantable -= 1 + run_before; \
604 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
606 for(;i<total_coeff;i++) { \
608 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
612 if (
h->pixel_shift) {
629 const uint8_t *scan8x8,
int pixel_shift,
630 int mb_type,
int cbp,
int p)
646 for(i8x8=0; i8x8<4; i8x8++){
647 for(i4x4=0; i4x4<4; i4x4++){
648 const int index= i4x4 + 4*i8x8 + p*16;
650 index, scan + 1,
h->ps.pps->dequant4_coeff[p][qscale], 15) < 0 ){
661 int cqm = (
IS_INTRA( mb_type ) ? 0:3)+p;
664 for(i8x8=0; i8x8<4; i8x8++){
667 int16_t *buf = &sl->
mb[64*i8x8+256*p << pixel_shift];
669 for(i4x4=0; i4x4<4; i4x4++){
670 const int index= i4x4 + 4*i8x8 + p*16;
672 h->ps.pps->dequant8_coeff[cqm][qscale], 16) < 0 )
676 nnz[0] += nnz[1] + nnz[8] + nnz[9];
677 new_cbp |= !!nnz[0] << i8x8;
679 for(i4x4=0; i4x4<4; i4x4++){
680 const int index= i4x4 + 4*i8x8 + p*16;
682 scan,
h->ps.pps->dequant4_coeff[cqm][qscale], 16) < 0 ){
690 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
701 unsigned int mb_type, cbp;
702 int dct8x8_allowed =
h->ps.pps->transform_8x8_mode;
703 const int decode_chroma =
h->ps.sps->chroma_format_idc == 1 ||
h->ps.sps->chroma_format_idc == 2;
704 const int pixel_shift =
h->pixel_shift;
714 if (mb_skip_run >
h->mb_num) {
731 if ((sl->
mb_y & 1) == 0)
744 goto decode_intra_mb;
752 goto decode_intra_mb;
776 h->ps.sps->bit_depth_luma;
787 h->cur_pic.qscale_table[mb_xy] = 0;
789 memset(
h->non_zero_count[mb_xy], 16, 48);
791 h->cur_pic.mb_type[mb_xy] = mb_type;
811 for(
i=0;
i<16;
i+=di){
816 mode = rem_mode + (rem_mode >=
mode);
843 }
else if(partition_count==4){
844 int i, j, sub_partition_count[4],
list,
ref[2][4];
884 }
else if(ref_count == 2){
916 for(j=0; j<sub_partition_count[
i]; j++){
918 const int index= 4*
i + block_width*j;
923 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
927 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
929 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
931 mv_cache[ 1 ][0]= mx;
932 mv_cache[ 1 ][1]= my;
934 mv_cache[ 8 ][0]= mx;
935 mv_cache[ 8 ][1]= my;
937 mv_cache[ 0 ][0]= mx;
938 mv_cache[ 0 ][1]= my;
949 dct8x8_allowed &=
h->ps.sps->direct_8x8_inference_flag;
960 }
else if (rc == 2) {
977 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
991 }
else if (rc == 2) {
1012 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
1029 }
else if (rc == 2) {
1050 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
1085 if (!decode_chroma && cbp>15) {
1091 if(dct8x8_allowed && (cbp&15) && !
IS_INTRA(mb_type)){
1095 h->cbp_table[mb_xy]= cbp;
1096 h->cur_pic.mb_type[mb_xy] = mb_type;
1099 int i4x4, i8x8, chroma_idx;
1103 const uint8_t *scan, *scan8x8;
1104 const int max_qp = 51 + 6 * (
h->ps.sps->bit_depth_luma - 8);
1108 sl->
qscale += (unsigned)dquant;
1110 if (((
unsigned)sl->
qscale) > max_qp){
1112 else sl->
qscale -= max_qp+1;
1113 if (((
unsigned)sl->
qscale) > max_qp){
1124 scan8x8 = sl->
qscale ?
h->field_scan8x8_cavlc :
h->field_scan8x8_cavlc_q0;
1125 scan = sl->
qscale ?
h->field_scan :
h->field_scan_q0;
1127 scan8x8 = sl->
qscale ?
h->zigzag_scan8x8_cavlc :
h->zigzag_scan8x8_cavlc_q0;
1128 scan = sl->
qscale ?
h->zigzag_scan :
h->zigzag_scan_q0;
1134 h->cbp_table[mb_xy] |=
ret << 12;
1143 const int num_c8x8 =
h->ps.sps->chroma_format_idc;
1146 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1150 NULL, 4 * num_c8x8) < 0) {
1156 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1157 const uint32_t *qmul =
h->ps.pps->dequant4_coeff[chroma_idx+1+(
IS_INTRA( mb_type ) ? 0:3)][sl->
chroma_qp[chroma_idx]];
1158 int16_t *
mb = sl->
mb + (16*(16 + 16*chroma_idx) << pixel_shift);
1159 for (i8x8 = 0; i8x8<num_c8x8; i8x8++) {
1160 for (i4x4 = 0; i4x4 < 4; i4x4++) {
1161 const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;
1164 mb += 16 << pixel_shift;
1178 h->cur_pic.qscale_table[mb_xy] = sl->
qscale;