29 #define UNCHECKED_BITSTREAM_READER 1
41 0, 1, 2, 4, 8, 3, 5,10,12,15, 7,11,13,14, 6, 9,
45 15, 0, 7,11,13,14, 3, 5,10,12, 1, 2, 4, 8, 6, 9,
91 6, 2, 0, 0, 8, 6, 3, 0, 9, 8, 7, 5, 10, 9, 8, 6,
92 11,10, 9, 7, 13,11,10, 8, 13,13,11, 9, 13,13,13,10,
93 14,14,13,11, 14,14,14,13, 15,15,14,14, 15,15,15,14,
94 16,15,15,15, 16,16,16,15, 16,16,16,16, 16,16,16,16,
98 6, 2, 0, 0, 6, 5, 3, 0, 7, 6, 6, 4, 8, 6, 6, 4,
99 8, 7, 7, 5, 9, 8, 8, 6, 11, 9, 9, 6, 11,11,11, 7,
100 12,11,11, 9, 12,12,12,11, 12,12,12,11, 13,13,13,12,
101 13,13,13,13, 13,14,13,13, 14,14,14,13, 14,14,14,14,
105 6, 4, 0, 0, 6, 5, 4, 0, 6, 5, 5, 4, 7, 5, 5, 4,
106 7, 5, 5, 4, 7, 6, 6, 4, 7, 6, 6, 4, 8, 7, 7, 5,
107 8, 8, 7, 6, 9, 8, 8, 7, 9, 9, 8, 8, 9, 9, 9, 8,
108 10, 9, 9, 9, 10,10,10,10, 10,10,10,10, 10,10,10,10,
112 6, 6, 0, 0, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6,
113 6, 6, 6, 6, 6, 6, 6, 6, 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,
122 5, 1, 0, 0, 7, 4, 1, 0, 7, 6, 5, 3, 7, 6, 5, 3,
123 7, 6, 5, 4, 15, 6, 5, 4, 11,14, 5, 4, 8,10,13, 4,
124 15,14, 9, 4, 11,10,13,12, 15,14, 9,12, 11,10,13, 8,
125 15, 1, 9,12, 11,14,13, 8, 7,10, 9,12, 4, 6, 5, 8,
129 11, 2, 0, 0, 7, 7, 3, 0, 7,10, 9, 5, 7, 6, 5, 4,
130 4, 6, 5, 6, 7, 6, 5, 8, 15, 6, 5, 4, 11,14,13, 4,
131 15,10, 9, 4, 11,14,13,12, 8,10, 9, 8, 15,14,13,12,
132 11,10, 9,12, 7,11, 6, 8, 9, 8,10, 1, 7, 6, 5, 4,
136 15,14, 0, 0, 11,15,13, 0, 8,12,14,12, 15,10,11,11,
137 11, 8, 9,10, 9,14,13, 9, 8,10, 9, 8, 15,14,13,13,
138 11,14,10,12, 15,10,13,12, 11,14, 9,12, 8,10,13, 8,
139 13, 7, 9,12, 9,12,11,10, 5, 8, 7, 6, 1, 4, 3, 2,
143 0, 1, 0, 0, 4, 5, 6, 0, 8, 9,10,11, 12,13,14,15,
144 16,17,18,19, 20,21,22,23, 24,25,26,27, 28,29,30,31,
145 32,33,34,35, 36,37,38,39, 40,41,42,43, 44,45,46,47,
146 48,49,50,51, 52,53,54,55, 56,57,58,59, 60,61,62,63,
151 {1,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9},
152 {3,3,3,3,3,4,4,4,4,5,5,6,6,6,6},
153 {4,3,3,3,4,4,3,3,4,5,5,6,5,6},
154 {5,3,4,4,3,3,3,4,3,4,5,5,5},
155 {4,4,4,3,3,3,3,3,4,5,4,5},
156 {6,5,3,3,3,3,3,3,4,3,6},
157 {6,5,3,3,3,2,3,4,3,6},
169 {1,3,2,3,2,3,2,3,2,3,2,3,2,3,2,1},
170 {7,6,5,4,3,5,4,3,2,3,2,3,2,1,0},
171 {5,7,6,5,4,3,4,3,2,3,2,1,1,0},
172 {3,7,5,4,6,5,4,3,3,2,2,1,0},
173 {5,4,3,7,6,5,4,3,2,1,1,0},
174 {1,1,7,6,5,4,3,2,1,1,0},
175 {1,1,5,4,3,3,2,1,1,0},
199 { 1, 3, 3, 4, 4, 4, 5, 5 },
200 { 3, 2, 3, 3, 3, 3, 3 },
201 { 3, 3, 2, 2, 3, 3 },
209 { 1, 2, 3, 2, 3, 1, 1, 0 },
210 { 0, 1, 1, 4, 5, 6, 7 },
211 { 0, 1, 1, 2, 6, 7 },
225 {3,3,3,3,3,3,3,4,5,6,7,8,9,10,11},
235 {7,6,5,4,3,2,1,1,1,1,1,1,1,1,1},
270 #define LEVEL_TAB_BITS 8
273 #define CHROMA_DC_COEFF_TOKEN_VLC_BITS 8
274 #define CHROMA422_DC_COEFF_TOKEN_VLC_BITS 13
275 #define COEFF_TOKEN_VLC_BITS 8
276 #define TOTAL_ZEROS_VLC_BITS 9
277 #define CHROMA_DC_TOTAL_ZEROS_VLC_BITS 3
278 #define CHROMA422_DC_TOTAL_ZEROS_VLC_BITS 5
279 #define RUN_VLC_BITS 3
280 #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;
345 for (
int i = 0;
i < 4;
i++) {
361 for (
int i = 0;
i < 3;
i++) {
371 for (
int i = 0;
i < 7;
i++) {
381 for (
int i = 0;
i < 15;
i++) {
391 for (
int i = 0;
i < 6;
i++) {
435 const uint8_t *scantable,
const uint32_t *qmul,
438 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};
440 int zeros_left, coeff_token, total_coeff,
i, trailing_ones, run_before;
449 total_coeff= coeff_token>>2;
454 total_coeff= coeff_token>>2;
458 total_coeff= coeff_token>>2;
467 if(total_coeff > (
unsigned)max_coeff) {
472 trailing_ones= coeff_token&3;
473 ff_tlog(
h->avctx,
"trailing:%d, total:%d\n", trailing_ones, total_coeff);
482 if(trailing_ones<total_coeff) {
484 int suffix_length = total_coeff > 10 & trailing_ones < 3;
489 if(level_code >= 100){
490 prefix= level_code - 100;
500 }
else if(prefix==14){
504 level_code= prefix +
get_bits(gb, 4);
512 level_code += (1<<(prefix-3))-4096;
514 level_code +=
get_bits(gb, prefix-3);
517 if(trailing_ones < 3) level_code += 2;
520 mask= -(level_code&1);
523 level_code += ((level_code>>31)|1) & -(trailing_ones < 3);
525 suffix_length = 1 + (level_code + 3
U > 6
U);
526 level[trailing_ones]= level_code;
530 for(
i=trailing_ones+1;
i<total_coeff;
i++) {
531 static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
536 if(level_code >= 100){
537 prefix= level_code - 100;
542 level_code = (prefix<<suffix_length) +
get_bits(gb, suffix_length);
544 level_code = 15<<suffix_length;
550 level_code += (1<<(prefix-3))-4096;
552 level_code +=
get_bits(gb, prefix-3);
554 mask= -(level_code&1);
555 level_code= (((2+level_code)>>1) ^
mask) -
mask;
558 suffix_length+= suffix_limit[suffix_length] + level_code > 2
U*suffix_limit[suffix_length];
562 if(total_coeff == max_coeff)
565 if (max_coeff <= 8) {
577 #define STORE_BLOCK(type) \
578 scantable += zeros_left + total_coeff - 1; \
579 if(n >= LUMA_DC_BLOCK_INDEX){ \
580 ((type*)block)[*scantable] = level[0]; \
581 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
583 run_before= get_vlc2(gb, run_vlc[zeros_left].table, RUN_VLC_BITS, 1); \
585 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
586 zeros_left -= run_before; \
587 scantable -= 1 + run_before; \
588 ((type*)block)[*scantable]= level[i]; \
590 for(;i<total_coeff;i++) { \
592 ((type*)block)[*scantable]= level[i]; \
595 ((type*)block)[*scantable] = ((int)(level[0] * qmul[*scantable] + 32))>>6; \
596 for(i=1;i<total_coeff && zeros_left > 0;i++) { \
598 run_before= get_vlc2(gb, run_vlc[zeros_left].table, RUN_VLC_BITS, 1); \
600 run_before= get_vlc2(gb, run7_vlc.table, RUN7_VLC_BITS, 2); \
601 zeros_left -= run_before; \
602 scantable -= 1 + run_before; \
603 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
605 for(;i<total_coeff;i++) { \
607 ((type*)block)[*scantable]= ((int)(level[i] * qmul[*scantable] + 32))>>6; \
611 if (
h->pixel_shift) {
628 const uint8_t *scan8x8,
int pixel_shift,
629 int mb_type,
int cbp,
int p)
645 for(i8x8=0; i8x8<4; i8x8++){
646 for(i4x4=0; i4x4<4; i4x4++){
647 const int index= i4x4 + 4*i8x8 + p*16;
649 index, scan + 1,
h->ps.pps->dequant4_coeff[p][qscale], 15) < 0 ){
660 int cqm = (
IS_INTRA( mb_type ) ? 0:3)+p;
663 for(i8x8=0; i8x8<4; i8x8++){
666 int16_t *buf = &sl->
mb[64*i8x8+256*p << pixel_shift];
668 for(i4x4=0; i4x4<4; i4x4++){
669 const int index= i4x4 + 4*i8x8 + p*16;
671 h->ps.pps->dequant8_coeff[cqm][qscale], 16) < 0 )
675 nnz[0] += nnz[1] + nnz[8] + nnz[9];
676 new_cbp |= !!nnz[0] << i8x8;
678 for(i4x4=0; i4x4<4; i4x4++){
679 const int index= i4x4 + 4*i8x8 + p*16;
681 scan,
h->ps.pps->dequant4_coeff[cqm][qscale], 16) < 0 ){
689 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0;
700 unsigned int mb_type, cbp;
701 int dct8x8_allowed =
h->ps.pps->transform_8x8_mode;
702 const int decode_chroma =
h->ps.sps->chroma_format_idc == 1 ||
h->ps.sps->chroma_format_idc == 2;
703 const int pixel_shift =
h->pixel_shift;
713 if (mb_skip_run >
h->mb_num) {
730 if ((sl->
mb_y & 1) == 0)
743 goto decode_intra_mb;
751 goto decode_intra_mb;
775 h->ps.sps->bit_depth_luma;
786 h->cur_pic.qscale_table[mb_xy] = 0;
788 memset(
h->non_zero_count[mb_xy], 16, 48);
790 h->cur_pic.mb_type[mb_xy] = mb_type;
810 for(
i=0;
i<16;
i+=di){
815 mode = rem_mode + (rem_mode >=
mode);
842 }
else if(partition_count==4){
843 int i, j, sub_partition_count[4],
list,
ref[2][4];
883 }
else if(ref_count == 2){
915 for(j=0; j<sub_partition_count[
i]; j++){
917 const int index= 4*
i + block_width*j;
922 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
926 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
928 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
930 mv_cache[ 1 ][0]= mx;
931 mv_cache[ 1 ][1]= my;
933 mv_cache[ 8 ][0]= mx;
934 mv_cache[ 8 ][1]= my;
936 mv_cache[ 0 ][0]= mx;
937 mv_cache[ 0 ][1]= my;
948 dct8x8_allowed &=
h->ps.sps->direct_8x8_inference_flag;
959 }
else if (rc == 2) {
976 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
990 }
else if (rc == 2) {
1011 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
1028 }
else if (rc == 2) {
1049 ff_tlog(
h->avctx,
"final mv:%d %d\n", mx, my);
1084 if (!decode_chroma && cbp>15) {
1090 if(dct8x8_allowed && (cbp&15) && !
IS_INTRA(mb_type)){
1094 h->cbp_table[mb_xy]= cbp;
1095 h->cur_pic.mb_type[mb_xy] = mb_type;
1098 int i4x4, i8x8, chroma_idx;
1102 const uint8_t *scan, *scan8x8;
1103 const int max_qp = 51 + 6 * (
h->ps.sps->bit_depth_luma - 8);
1107 sl->
qscale += (unsigned)dquant;
1109 if (((
unsigned)sl->
qscale) > max_qp){
1111 else sl->
qscale -= max_qp+1;
1112 if (((
unsigned)sl->
qscale) > max_qp){
1123 scan8x8 = sl->
qscale ?
h->field_scan8x8_cavlc :
h->field_scan8x8_cavlc_q0;
1124 scan = sl->
qscale ?
h->field_scan :
h->field_scan_q0;
1126 scan8x8 = sl->
qscale ?
h->zigzag_scan8x8_cavlc :
h->zigzag_scan8x8_cavlc_q0;
1127 scan = sl->
qscale ?
h->zigzag_scan :
h->zigzag_scan_q0;
1133 h->cbp_table[mb_xy] |=
ret << 12;
1142 const int num_c8x8 =
h->ps.sps->chroma_format_idc;
1145 for(chroma_idx=0; chroma_idx<2; chroma_idx++)
1149 NULL, 4 * num_c8x8) < 0) {
1155 for(chroma_idx=0; chroma_idx<2; chroma_idx++){
1156 const uint32_t *qmul =
h->ps.pps->dequant4_coeff[chroma_idx+1+(
IS_INTRA( mb_type ) ? 0:3)][sl->
chroma_qp[chroma_idx]];
1157 int16_t *
mb = sl->
mb + (16*(16 + 16*chroma_idx) << pixel_shift);
1158 for (i8x8 = 0; i8x8<num_c8x8; i8x8++) {
1159 for (i4x4 = 0; i4x4 < 4; i4x4++) {
1160 const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;
1163 mb += 16 << pixel_shift;
1177 h->cur_pic.qscale_table[mb_xy] = sl->
qscale;