4 * Copyright (C) 2012 - 2013 Guillaume Martres
5 * Copyright (C) 2012 - 2013 Gildas Cocherel
7 * This file is part of FFmpeg.
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 #include "libavutil/attributes.h"
25 #include "libavutil/common.h"
27 #include "cabac_functions.h"
30 #define CABAC_MAX_BIN 31
33 * number of bin by SyntaxElement.
35 av_unused static const int8_t num_bins_in_se[] = {
39 0, // sao_band_position
42 0, // end_of_slice_flag
43 3, // split_coding_unit_flag
44 1, // cu_transquant_bypass_flag
50 1, // prev_intra_luma_pred_mode
52 0, // rem_intra_luma_pred_mode
53 2, // intra_chroma_pred_mode
59 2, // abs_mvd_greater0_flag
60 2, // abs_mvd_greater1_flag
64 1, // no_residual_data_flag
65 3, // split_transform_flag
68 2, // transform_skip_flag[][]
69 2, // explicit_rdpcm_flag[][]
70 2, // explicit_rdpcm_dir_flag[][]
71 18, // last_significant_coeff_x_prefix
72 18, // last_significant_coeff_y_prefix
73 0, // last_significant_coeff_x_suffix
74 0, // last_significant_coeff_y_suffix
75 4, // significant_coeff_group_flag
76 44, // significant_coeff_flag
77 24, // coeff_abs_level_greater1_flag
78 6, // coeff_abs_level_greater2_flag
79 0, // coeff_abs_level_remaining
81 8, // log2_res_scale_abs
82 2, // res_scale_sign_flag
83 1, // cu_chroma_qp_offset_flag
84 1, // cu_chroma_qp_offset_idx
88 * Offset to ctxIdx 0 in init_values and states, indexed by SyntaxElement.
90 static const int elem_offset[sizeof(num_bins_in_se)] = {
94 2, // sao_band_position
97 2, // end_of_slice_flag
98 2, // split_coding_unit_flag
99 5, // cu_transquant_bypass_flag
105 17, // prev_intra_luma_pred_mode
107 18, // rem_intra_luma_pred_mode
108 18, // intra_chroma_pred_mode
111 22, // inter_pred_idc
114 31, // abs_mvd_greater0_flag
115 33, // abs_mvd_greater1_flag
116 35, // abs_mvd_minus2
119 36, // no_residual_data_flag
120 37, // split_transform_flag
122 42, // cbf_cb, cbf_cr
123 46, // transform_skip_flag[][]
124 48, // explicit_rdpcm_flag[][]
125 50, // explicit_rdpcm_dir_flag[][]
126 52, // last_significant_coeff_x_prefix
127 70, // last_significant_coeff_y_prefix
128 88, // last_significant_coeff_x_suffix
129 88, // last_significant_coeff_y_suffix
130 88, // significant_coeff_group_flag
131 92, // significant_coeff_flag
132 136, // coeff_abs_level_greater1_flag
133 160, // coeff_abs_level_greater2_flag
134 166, // coeff_abs_level_remaining
135 166, // coeff_sign_flag
136 166, // log2_res_scale_abs
137 174, // res_scale_sign_flag
138 176, // cu_chroma_qp_offset_flag
139 177, // cu_chroma_qp_offset_idx
144 * Indexed by init_type
146 static const uint8_t init_values[3][HEVC_CONTEXTS] = {
151 // split_coding_unit_flag
153 // cu_transquant_bypass_flag
163 // prev_intra_luma_pred_mode
165 // intra_chroma_pred_mode
172 CNU, CNU, CNU, CNU, CNU,
177 // abs_mvd_greater1_flag
179 // abs_mvd_greater1_flag
183 // no_residual_data_flag
185 // split_transform_flag
191 // transform_skip_flag
193 // explicit_rdpcm_flag
195 // explicit_rdpcm_dir_flag
197 // last_significant_coeff_x_prefix
198 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
200 // last_significant_coeff_y_prefix
201 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
203 // significant_coeff_group_flag
205 // significant_coeff_flag
206 111, 111, 125, 110, 110, 94, 124, 108, 124, 107, 125, 141, 179, 153,
207 125, 107, 125, 141, 179, 153, 125, 107, 125, 141, 179, 153, 125, 140,
208 139, 182, 182, 152, 136, 152, 136, 153, 136, 139, 111, 136, 139, 111,
210 // coeff_abs_level_greater1_flag
211 140, 92, 137, 138, 140, 152, 138, 139, 153, 74, 149, 92, 139, 107,
212 122, 152, 140, 179, 166, 182, 140, 227, 122, 197,
213 // coeff_abs_level_greater2_flag
214 138, 153, 136, 167, 152, 152,
215 // log2_res_scale_abs
216 154, 154, 154, 154, 154, 154, 154, 154,
217 // res_scale_sign_flag
219 // cu_chroma_qp_offset_flag
221 // cu_chroma_qp_offset_idx
228 // split_coding_unit_flag
230 // cu_transquant_bypass_flag
240 // prev_intra_luma_pred_mode
242 // intra_chroma_pred_mode
254 // abs_mvd_greater1_flag
256 // abs_mvd_greater1_flag
260 // no_residual_data_flag
262 // split_transform_flag
268 // transform_skip_flag
270 // explicit_rdpcm_flag
272 // explicit_rdpcm_dir_flag
274 // last_significant_coeff_x_prefix
275 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
277 // last_significant_coeff_y_prefix
278 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
280 // significant_coeff_group_flag
282 // significant_coeff_flag
283 155, 154, 139, 153, 139, 123, 123, 63, 153, 166, 183, 140, 136, 153,
284 154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
285 153, 123, 123, 107, 121, 107, 121, 167, 151, 183, 140, 151, 183, 140,
287 // coeff_abs_level_greater1_flag
288 154, 196, 196, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
289 136, 137, 169, 194, 166, 167, 154, 167, 137, 182,
290 // coeff_abs_level_greater2_flag
291 107, 167, 91, 122, 107, 167,
292 // log2_res_scale_abs
293 154, 154, 154, 154, 154, 154, 154, 154,
294 // res_scale_sign_flag
296 // cu_chroma_qp_offset_flag
298 // cu_chroma_qp_offset_idx
305 // split_coding_unit_flag
307 // cu_transquant_bypass_flag
317 // prev_intra_luma_pred_mode
319 // intra_chroma_pred_mode
331 // abs_mvd_greater1_flag
333 // abs_mvd_greater1_flag
337 // no_residual_data_flag
339 // split_transform_flag
345 // transform_skip_flag
347 // explicit_rdpcm_flag
349 // explicit_rdpcm_dir_flag
351 // last_significant_coeff_x_prefix
352 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
354 // last_significant_coeff_y_prefix
355 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
357 // significant_coeff_group_flag
359 // significant_coeff_flag
360 170, 154, 139, 153, 139, 123, 123, 63, 124, 166, 183, 140, 136, 153,
361 154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
362 153, 138, 138, 122, 121, 122, 121, 167, 151, 183, 140, 151, 183, 140,
364 // coeff_abs_level_greater1_flag
365 154, 196, 167, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
366 136, 122, 169, 208, 166, 167, 154, 152, 167, 182,
367 // coeff_abs_level_greater2_flag
368 107, 167, 91, 107, 107, 167,
369 // log2_res_scale_abs
370 154, 154, 154, 154, 154, 154, 154, 154,
371 // res_scale_sign_flag
373 // cu_chroma_qp_offset_flag
375 // cu_chroma_qp_offset_idx
380 static const uint8_t scan_1x1[1] = {
384 static const uint8_t horiz_scan2x2_x[4] = {
388 static const uint8_t horiz_scan2x2_y[4] = {
392 static const uint8_t horiz_scan4x4_x[16] = {
399 static const uint8_t horiz_scan4x4_y[16] = {
406 static const uint8_t horiz_scan8x8_inv[8][8] = {
407 { 0, 1, 2, 3, 16, 17, 18, 19, },
408 { 4, 5, 6, 7, 20, 21, 22, 23, },
409 { 8, 9, 10, 11, 24, 25, 26, 27, },
410 { 12, 13, 14, 15, 28, 29, 30, 31, },
411 { 32, 33, 34, 35, 48, 49, 50, 51, },
412 { 36, 37, 38, 39, 52, 53, 54, 55, },
413 { 40, 41, 42, 43, 56, 57, 58, 59, },
414 { 44, 45, 46, 47, 60, 61, 62, 63, },
417 static const uint8_t diag_scan2x2_x[4] = {
421 static const uint8_t diag_scan2x2_y[4] = {
425 static const uint8_t diag_scan2x2_inv[2][2] = {
430 const uint8_t ff_hevc_diag_scan4x4_x[16] = {
437 const uint8_t ff_hevc_diag_scan4x4_y[16] = {
444 static const uint8_t diag_scan4x4_inv[4][4] = {
451 const uint8_t ff_hevc_diag_scan8x8_x[64] = {
470 const uint8_t ff_hevc_diag_scan8x8_y[64] = {
489 static const uint8_t diag_scan8x8_inv[8][8] = {
490 { 0, 2, 5, 9, 14, 20, 27, 35, },
491 { 1, 4, 8, 13, 19, 26, 34, 42, },
492 { 3, 7, 12, 18, 25, 33, 41, 48, },
493 { 6, 11, 17, 24, 32, 40, 47, 53, },
494 { 10, 16, 23, 31, 39, 46, 52, 57, },
495 { 15, 22, 30, 38, 45, 51, 56, 60, },
496 { 21, 29, 37, 44, 50, 55, 59, 62, },
497 { 28, 36, 43, 49, 54, 58, 61, 63, },
500 void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts)
502 if (s->pps->entropy_coding_sync_enabled_flag &&
503 (ctb_addr_ts % s->sps->ctb_width == 2 ||
504 (s->sps->ctb_width == 2 &&
505 ctb_addr_ts % s->sps->ctb_width == 0))) {
506 memcpy(s->cabac_state, s->HEVClc->cabac_state, HEVC_CONTEXTS);
510 static void load_states(HEVCContext *s)
512 memcpy(s->HEVClc->cabac_state, s->cabac_state, HEVC_CONTEXTS);
515 static void cabac_reinit(HEVCLocalContext *lc)
517 skip_bytes(&lc->cc, 0);
520 static void cabac_init_decoder(HEVCContext *s)
522 GetBitContext *gb = &s->HEVClc->gb;
525 ff_init_cabac_decoder(&s->HEVClc->cc,
526 gb->buffer + get_bits_count(gb) / 8,
527 (get_bits_left(gb) + 7) / 8);
530 static void cabac_init_state(HEVCContext *s)
532 int init_type = 2 - s->sh.slice_type;
535 if (s->sh.cabac_init_flag && s->sh.slice_type != I_SLICE)
538 for (i = 0; i < HEVC_CONTEXTS; i++) {
539 int init_value = init_values[init_type][i];
540 int m = (init_value >> 4) * 5 - 45;
541 int n = ((init_value & 15) << 3) - 16;
542 int pre = 2 * (((m * av_clip(s->sh.slice_qp, 0, 51)) >> 4) + n) - 127;
546 pre = 124 + (pre & 1);
547 s->HEVClc->cabac_state[i] = pre;
551 void ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts)
553 if (ctb_addr_ts == s->pps->ctb_addr_rs_to_ts[s->sh.slice_ctb_addr_rs]) {
554 cabac_init_decoder(s);
555 if (s->sh.dependent_slice_segment_flag == 0 ||
556 (s->pps->tiles_enabled_flag &&
557 s->pps->tile_id[ctb_addr_ts] != s->pps->tile_id[ctb_addr_ts - 1]))
560 if (!s->sh.first_slice_in_pic_flag &&
561 s->pps->entropy_coding_sync_enabled_flag) {
562 if (ctb_addr_ts % s->sps->ctb_width == 0) {
563 if (s->sps->ctb_width == 1)
565 else if (s->sh.dependent_slice_segment_flag == 1)
570 if (s->pps->tiles_enabled_flag &&
571 s->pps->tile_id[ctb_addr_ts] != s->pps->tile_id[ctb_addr_ts - 1]) {
572 if (s->threads_number == 1)
573 cabac_reinit(s->HEVClc);
575 cabac_init_decoder(s);
578 if (s->pps->entropy_coding_sync_enabled_flag) {
579 if (ctb_addr_ts % s->sps->ctb_width == 0) {
580 get_cabac_terminate(&s->HEVClc->cc);
581 if (s->threads_number == 1)
582 cabac_reinit(s->HEVClc);
584 cabac_init_decoder(s);
586 if (s->sps->ctb_width == 1)
595 #define GET_CABAC(ctx) get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
597 int ff_hevc_sao_merge_flag_decode(HEVCContext *s)
599 return GET_CABAC(elem_offset[SAO_MERGE_FLAG]);
602 int ff_hevc_sao_type_idx_decode(HEVCContext *s)
604 if (!GET_CABAC(elem_offset[SAO_TYPE_IDX]))
607 if (!get_cabac_bypass(&s->HEVClc->cc))
612 int ff_hevc_sao_band_position_decode(HEVCContext *s)
615 int value = get_cabac_bypass(&s->HEVClc->cc);
617 for (i = 0; i < 4; i++)
618 value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
622 int ff_hevc_sao_offset_abs_decode(HEVCContext *s)
625 int length = (1 << (FFMIN(s->sps->bit_depth, 10) - 5)) - 1;
627 while (i < length && get_cabac_bypass(&s->HEVClc->cc))
632 int ff_hevc_sao_offset_sign_decode(HEVCContext *s)
634 return get_cabac_bypass(&s->HEVClc->cc);
637 int ff_hevc_sao_eo_class_decode(HEVCContext *s)
639 int ret = get_cabac_bypass(&s->HEVClc->cc) << 1;
640 ret |= get_cabac_bypass(&s->HEVClc->cc);
644 int ff_hevc_end_of_slice_flag_decode(HEVCContext *s)
646 return get_cabac_terminate(&s->HEVClc->cc);
649 int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s)
651 return GET_CABAC(elem_offset[CU_TRANSQUANT_BYPASS_FLAG]);
654 int ff_hevc_skip_flag_decode(HEVCContext *s, int x0, int y0, int x_cb, int y_cb)
656 int min_cb_width = s->sps->min_cb_width;
658 int x0b = x0 & ((1 << s->sps->log2_ctb_size) - 1);
659 int y0b = y0 & ((1 << s->sps->log2_ctb_size) - 1);
661 if (s->HEVClc->ctb_left_flag || x0b)
662 inc = !!SAMPLE_CTB(s->skip_flag, x_cb - 1, y_cb);
663 if (s->HEVClc->ctb_up_flag || y0b)
664 inc += !!SAMPLE_CTB(s->skip_flag, x_cb, y_cb - 1);
666 return GET_CABAC(elem_offset[SKIP_FLAG] + inc);
669 int ff_hevc_cu_qp_delta_abs(HEVCContext *s)
675 while (prefix_val < 5 && GET_CABAC(elem_offset[CU_QP_DELTA] + inc)) {
679 if (prefix_val >= 5) {
681 while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc)) {
682 suffix_val += 1 << k;
685 if (k == CABAC_MAX_BIN)
686 av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k);
689 suffix_val += get_cabac_bypass(&s->HEVClc->cc) << k;
691 return prefix_val + suffix_val;
694 int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s)
696 return get_cabac_bypass(&s->HEVClc->cc);
699 int ff_hevc_pred_mode_decode(HEVCContext *s)
701 return GET_CABAC(elem_offset[PRED_MODE_FLAG]);
704 int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, int x0, int y0)
706 int inc = 0, depth_left = 0, depth_top = 0;
707 int x0b = x0 & ((1 << s->sps->log2_ctb_size) - 1);
708 int y0b = y0 & ((1 << s->sps->log2_ctb_size) - 1);
709 int x_cb = x0 >> s->sps->log2_min_cb_size;
710 int y_cb = y0 >> s->sps->log2_min_cb_size;
712 if (s->HEVClc->ctb_left_flag || x0b)
713 depth_left = s->tab_ct_depth[(y_cb) * s->sps->min_cb_width + x_cb - 1];
714 if (s->HEVClc->ctb_up_flag || y0b)
715 depth_top = s->tab_ct_depth[(y_cb - 1) * s->sps->min_cb_width + x_cb];
717 inc += (depth_left > ct_depth);
718 inc += (depth_top > ct_depth);
720 return GET_CABAC(elem_offset[SPLIT_CODING_UNIT_FLAG] + inc);
723 int ff_hevc_part_mode_decode(HEVCContext *s, int log2_cb_size)
725 if (GET_CABAC(elem_offset[PART_MODE])) // 1
727 if (log2_cb_size == s->sps->log2_min_cb_size) {
728 if (s->HEVClc->cu.pred_mode == MODE_INTRA) // 0
730 if (GET_CABAC(elem_offset[PART_MODE] + 1)) // 01
732 if (log2_cb_size == 3) // 00
734 if (GET_CABAC(elem_offset[PART_MODE] + 2)) // 001
736 return PART_NxN; // 000
739 if (!s->sps->amp_enabled_flag) {
740 if (GET_CABAC(elem_offset[PART_MODE] + 1)) // 01
745 if (GET_CABAC(elem_offset[PART_MODE] + 1)) { // 01X, 01XX
746 if (GET_CABAC(elem_offset[PART_MODE] + 3)) // 011
748 if (get_cabac_bypass(&s->HEVClc->cc)) // 0101
750 return PART_2NxnU; // 0100
753 if (GET_CABAC(elem_offset[PART_MODE] + 3)) // 001
755 if (get_cabac_bypass(&s->HEVClc->cc)) // 0001
757 return PART_nLx2N; // 0000
760 int ff_hevc_pcm_flag_decode(HEVCContext *s)
762 return get_cabac_terminate(&s->HEVClc->cc);
765 int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s)
767 return GET_CABAC(elem_offset[PREV_INTRA_LUMA_PRED_FLAG]);
770 int ff_hevc_mpm_idx_decode(HEVCContext *s)
773 while (i < 2 && get_cabac_bypass(&s->HEVClc->cc))
778 int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s)
781 int value = get_cabac_bypass(&s->HEVClc->cc);
783 for (i = 0; i < 4; i++)
784 value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
788 int ff_hevc_intra_chroma_pred_mode_decode(HEVCContext *s)
791 if (!GET_CABAC(elem_offset[INTRA_CHROMA_PRED_MODE]))
794 ret = get_cabac_bypass(&s->HEVClc->cc) << 1;
795 ret |= get_cabac_bypass(&s->HEVClc->cc);
799 int ff_hevc_merge_idx_decode(HEVCContext *s)
801 int i = GET_CABAC(elem_offset[MERGE_IDX]);
804 while (i < s->sh.max_num_merge_cand-1 && get_cabac_bypass(&s->HEVClc->cc))
810 int ff_hevc_merge_flag_decode(HEVCContext *s)
812 return GET_CABAC(elem_offset[MERGE_FLAG]);
815 int ff_hevc_inter_pred_idc_decode(HEVCContext *s, int nPbW, int nPbH)
817 if (nPbW + nPbH == 12)
818 return GET_CABAC(elem_offset[INTER_PRED_IDC] + 4);
819 if (GET_CABAC(elem_offset[INTER_PRED_IDC] + s->HEVClc->ct.depth))
822 return GET_CABAC(elem_offset[INTER_PRED_IDC] + 4);
825 int ff_hevc_ref_idx_lx_decode(HEVCContext *s, int num_ref_idx_lx)
828 int max = num_ref_idx_lx - 1;
829 int max_ctx = FFMIN(max, 2);
831 while (i < max_ctx && GET_CABAC(elem_offset[REF_IDX_L0] + i))
834 while (i < max && get_cabac_bypass(&s->HEVClc->cc))
841 int ff_hevc_mvp_lx_flag_decode(HEVCContext *s)
843 return GET_CABAC(elem_offset[MVP_LX_FLAG]);
846 int ff_hevc_no_residual_syntax_flag_decode(HEVCContext *s)
848 return GET_CABAC(elem_offset[NO_RESIDUAL_DATA_FLAG]);
851 static av_always_inline int abs_mvd_greater0_flag_decode(HEVCContext *s)
853 return GET_CABAC(elem_offset[ABS_MVD_GREATER0_FLAG]);
856 static av_always_inline int abs_mvd_greater1_flag_decode(HEVCContext *s)
858 return GET_CABAC(elem_offset[ABS_MVD_GREATER1_FLAG] + 1);
861 static av_always_inline int mvd_decode(HEVCContext *s)
866 while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc)) {
870 if (k == CABAC_MAX_BIN)
871 av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k);
873 ret += get_cabac_bypass(&s->HEVClc->cc) << k;
874 return get_cabac_bypass_sign(&s->HEVClc->cc, -ret);
877 static av_always_inline int mvd_sign_flag_decode(HEVCContext *s)
879 return get_cabac_bypass_sign(&s->HEVClc->cc, -1);
882 int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size)
884 return GET_CABAC(elem_offset[SPLIT_TRANSFORM_FLAG] + 5 - log2_trafo_size);
887 int ff_hevc_cbf_cb_cr_decode(HEVCContext *s, int trafo_depth)
889 return GET_CABAC(elem_offset[CBF_CB_CR] + trafo_depth);
892 int ff_hevc_cbf_luma_decode(HEVCContext *s, int trafo_depth)
894 return GET_CABAC(elem_offset[CBF_LUMA] + !trafo_depth);
897 static int ff_hevc_transform_skip_flag_decode(HEVCContext *s, int c_idx)
899 return GET_CABAC(elem_offset[TRANSFORM_SKIP_FLAG] + !!c_idx);
902 #define LAST_SIG_COEFF(elem) \
904 int max = (log2_size << 1) - 1; \
905 int ctx_offset, ctx_shift; \
908 ctx_offset = 3 * (log2_size - 2) + ((log2_size - 1) >> 2); \
909 ctx_shift = (log2_size + 1) >> 2; \
912 ctx_shift = log2_size - 2; \
915 GET_CABAC(elem_offset[elem] + (i >> ctx_shift) + ctx_offset)) \
919 static av_always_inline int last_significant_coeff_x_prefix_decode(HEVCContext *s, int c_idx,
922 LAST_SIG_COEFF(LAST_SIGNIFICANT_COEFF_X_PREFIX)
925 static av_always_inline int last_significant_coeff_y_prefix_decode(HEVCContext *s, int c_idx,
928 LAST_SIG_COEFF(LAST_SIGNIFICANT_COEFF_Y_PREFIX)
931 static av_always_inline int last_significant_coeff_suffix_decode(HEVCContext *s,
932 int last_significant_coeff_prefix)
935 int length = (last_significant_coeff_prefix >> 1) - 1;
936 int value = get_cabac_bypass(&s->HEVClc->cc);
938 for (i = 1; i < length; i++)
939 value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
943 static av_always_inline int significant_coeff_group_flag_decode(HEVCContext *s, int c_idx, int ctx_cg)
947 inc = FFMIN(ctx_cg, 1) + (c_idx>0 ? 2 : 0);
949 return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_GROUP_FLAG] + inc);
952 static av_always_inline int significant_coeff_flag_decode(HEVCContext *s, int c_idx, int x_c, int y_c,
953 int log2_trafo_size, int scan_idx, int prev_sig)
955 static const uint8_t ctx_idx_map[] = {
956 0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8
963 if (x_c + y_c == 0) {
965 } else if (log2_trafo_size == 2) {
966 sig_ctx = ctx_idx_map[(y_c << 2) + x_c];
972 sig_ctx = ((x_off + y_off) == 0) ? 2 : ((x_off + y_off) <= 2) ? 1 : 0;
976 sig_ctx = 2 - FFMIN(y_c & 3, 2);
979 sig_ctx = 2 - FFMIN(x_c & 3, 2);
985 if (c_idx == 0 && (x_cg > 0 || y_cg > 0))
988 if (log2_trafo_size == 3) {
989 sig_ctx += (scan_idx == SCAN_DIAG) ? 9 : 15;
991 sig_ctx += c_idx ? 12 : 21;
1000 return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_FLAG] + inc);
1003 static av_always_inline int coeff_abs_level_greater1_flag_decode(HEVCContext *s, int c_idx, int inc)
1009 return GET_CABAC(elem_offset[COEFF_ABS_LEVEL_GREATER1_FLAG] + inc);
1012 static av_always_inline int coeff_abs_level_greater2_flag_decode(HEVCContext *s, int c_idx, int inc)
1017 return GET_CABAC(elem_offset[COEFF_ABS_LEVEL_GREATER2_FLAG] + inc);
1020 static av_always_inline int coeff_abs_level_remaining_decode(HEVCContext *s, int base_level, int rc_rice_param)
1024 int last_coeff_abs_level_remaining;
1027 while (prefix < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc))
1029 if (prefix == CABAC_MAX_BIN)
1030 av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", prefix);
1032 for (i = 0; i < rc_rice_param; i++)
1033 suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc->cc);
1034 last_coeff_abs_level_remaining = (prefix << rc_rice_param) + suffix;
1036 int prefix_minus3 = prefix - 3;
1037 for (i = 0; i < prefix_minus3 + rc_rice_param; i++)
1038 suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc->cc);
1039 last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1)
1040 << rc_rice_param) + suffix;
1042 return last_coeff_abs_level_remaining;
1045 static av_always_inline int coeff_sign_flag_decode(HEVCContext *s, uint8_t nb)
1050 for (i = 0; i < nb; i++)
1051 ret = (ret << 1) | get_cabac_bypass(&s->HEVClc->cc);
1055 void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0,
1056 int log2_trafo_size, enum ScanType scan_idx,
1059 #define GET_COORD(offset, n) \
1061 x_c = (scan_x_cg[offset >> 4] << 2) + scan_x_off[n]; \
1062 y_c = (scan_y_cg[offset >> 4] << 2) + scan_y_off[n]; \
1064 HEVCLocalContext *lc = s->HEVClc;
1065 int transform_skip_flag = 0;
1067 int last_significant_coeff_x, last_significant_coeff_y;
1071 int greater1_ctx = 1;
1073 int num_last_subset;
1074 int x_cg_last_sig, y_cg_last_sig;
1076 const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off;
1078 ptrdiff_t stride = s->frame->linesize[c_idx];
1079 int hshift = s->sps->hshift[c_idx];
1080 int vshift = s->sps->vshift[c_idx];
1081 uint8_t *dst = &s->frame->data[c_idx][(y0 >> vshift) * stride +
1082 ((x0 >> hshift) << s->sps->pixel_shift)];
1083 DECLARE_ALIGNED(16, int16_t, coeffs[MAX_TB_SIZE * MAX_TB_SIZE]) = {0};
1084 DECLARE_ALIGNED(8, uint8_t, significant_coeff_group_flag[8][8]) = {{0}};
1086 int trafo_size = 1 << log2_trafo_size;
1088 int qp,shift,add,scale,scale_m;
1089 const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
1090 const uint8_t *scale_matrix;
1093 // Derive QP for dequant
1094 if (!lc->cu.cu_transquant_bypass_flag) {
1095 static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
1096 static const uint8_t rem6[51 + 4 * 6 + 1] = {
1097 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
1098 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
1099 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
1100 4, 5, 0, 1, 2, 3, 4, 5, 0, 1
1103 static const uint8_t div6[51 + 4 * 6 + 1] = {
1104 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
1105 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
1106 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
1107 10, 10, 11, 11, 11, 11, 11, 11, 12, 12
1109 int qp_y = lc->qp_y;
1112 qp = qp_y + s->sps->qp_bd_offset;
1117 offset = s->pps->cb_qp_offset + s->sh.slice_cb_qp_offset;
1119 offset = s->pps->cr_qp_offset + s->sh.slice_cr_qp_offset;
1121 qp_i = av_clip(qp_y + offset, - s->sps->qp_bd_offset, 57);
1127 qp = qp_c[qp_i - 30];
1129 qp += s->sps->qp_bd_offset;
1132 shift = s->sps->bit_depth + log2_trafo_size - 5;
1133 add = 1 << (shift-1);
1134 scale = level_scale[rem6[qp]] << (div6[qp]);
1135 scale_m = 16; // default when no custom scaling lists.
1138 if (s->sps->scaling_list_enable_flag) {
1139 const ScalingList *sl = s->pps->scaling_list_data_present_flag ?
1140 &s->pps->scaling_list : &s->sps->scaling_list;
1141 int matrix_id = lc->cu.pred_mode != MODE_INTRA;
1143 if (log2_trafo_size != 5)
1144 matrix_id = 3 * matrix_id + c_idx;
1146 scale_matrix = sl->sl[log2_trafo_size - 2][matrix_id];
1147 if (log2_trafo_size >= 4)
1148 dc_scale = sl->sl_dc[log2_trafo_size - 4][matrix_id];
1152 if (s->pps->transform_skip_enabled_flag && !lc->cu.cu_transquant_bypass_flag &&
1153 log2_trafo_size == 2) {
1154 transform_skip_flag = ff_hevc_transform_skip_flag_decode(s, c_idx);
1157 last_significant_coeff_x =
1158 last_significant_coeff_x_prefix_decode(s, c_idx, log2_trafo_size);
1159 last_significant_coeff_y =
1160 last_significant_coeff_y_prefix_decode(s, c_idx, log2_trafo_size);
1162 if (last_significant_coeff_x > 3) {
1163 int suffix = last_significant_coeff_suffix_decode(s, last_significant_coeff_x);
1164 last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
1165 (2 + (last_significant_coeff_x & 1)) +
1169 if (last_significant_coeff_y > 3) {
1170 int suffix = last_significant_coeff_suffix_decode(s, last_significant_coeff_y);
1171 last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
1172 (2 + (last_significant_coeff_y & 1)) +
1176 if (scan_idx == SCAN_VERT)
1177 FFSWAP(int, last_significant_coeff_x, last_significant_coeff_y);
1179 x_cg_last_sig = last_significant_coeff_x >> 2;
1180 y_cg_last_sig = last_significant_coeff_y >> 2;
1184 int last_x_c = last_significant_coeff_x & 3;
1185 int last_y_c = last_significant_coeff_y & 3;
1187 scan_x_off = ff_hevc_diag_scan4x4_x;
1188 scan_y_off = ff_hevc_diag_scan4x4_y;
1189 num_coeff = diag_scan4x4_inv[last_y_c][last_x_c];
1190 if (trafo_size == 4) {
1191 scan_x_cg = scan_1x1;
1192 scan_y_cg = scan_1x1;
1193 } else if (trafo_size == 8) {
1194 num_coeff += diag_scan2x2_inv[y_cg_last_sig][x_cg_last_sig] << 4;
1195 scan_x_cg = diag_scan2x2_x;
1196 scan_y_cg = diag_scan2x2_y;
1197 } else if (trafo_size == 16) {
1198 num_coeff += diag_scan4x4_inv[y_cg_last_sig][x_cg_last_sig] << 4;
1199 scan_x_cg = ff_hevc_diag_scan4x4_x;
1200 scan_y_cg = ff_hevc_diag_scan4x4_y;
1201 } else { // trafo_size == 32
1202 num_coeff += diag_scan8x8_inv[y_cg_last_sig][x_cg_last_sig] << 4;
1203 scan_x_cg = ff_hevc_diag_scan8x8_x;
1204 scan_y_cg = ff_hevc_diag_scan8x8_y;
1209 scan_x_cg = horiz_scan2x2_x;
1210 scan_y_cg = horiz_scan2x2_y;
1211 scan_x_off = horiz_scan4x4_x;
1212 scan_y_off = horiz_scan4x4_y;
1213 num_coeff = horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
1215 default: //SCAN_VERT
1216 scan_x_cg = horiz_scan2x2_y;
1217 scan_y_cg = horiz_scan2x2_x;
1218 scan_x_off = horiz_scan4x4_y;
1219 scan_y_off = horiz_scan4x4_x;
1220 num_coeff = horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
1224 num_last_subset = (num_coeff - 1) >> 4;
1226 for (i = num_last_subset; i >= 0; i--) {
1228 int x_cg, y_cg, x_c, y_c, pos;
1229 int implicit_non_zero_coeff = 0;
1230 int64_t trans_coeff_level;
1232 int offset = i << 4;
1234 uint8_t significant_coeff_flag_idx[16];
1235 uint8_t nb_significant_coeff_flag = 0;
1237 x_cg = scan_x_cg[i];
1238 y_cg = scan_y_cg[i];
1240 if ((i < num_last_subset) && (i > 0)) {
1242 if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
1243 ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
1244 if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
1245 ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
1247 significant_coeff_group_flag[x_cg][y_cg] =
1248 significant_coeff_group_flag_decode(s, c_idx, ctx_cg);
1249 implicit_non_zero_coeff = 1;
1251 significant_coeff_group_flag[x_cg][y_cg] =
1252 ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
1253 (x_cg == 0 && y_cg == 0));
1256 last_scan_pos = num_coeff - offset - 1;
1258 if (i == num_last_subset) {
1259 n_end = last_scan_pos - 1;
1260 significant_coeff_flag_idx[0] = last_scan_pos;
1261 nb_significant_coeff_flag = 1;
1266 if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
1267 prev_sig = significant_coeff_group_flag[x_cg + 1][y_cg];
1268 if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
1269 prev_sig += (significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
1271 for (n = n_end; n >= 0; n--) {
1272 GET_COORD(offset, n);
1274 if (significant_coeff_group_flag[x_cg][y_cg] &&
1275 (n > 0 || implicit_non_zero_coeff == 0)) {
1276 if (significant_coeff_flag_decode(s, c_idx, x_c, y_c, log2_trafo_size, scan_idx, prev_sig) == 1) {
1277 significant_coeff_flag_idx[nb_significant_coeff_flag] = n;
1278 nb_significant_coeff_flag++;
1279 implicit_non_zero_coeff = 0;
1282 int last_cg = (x_c == (x_cg << 2) && y_c == (y_cg << 2));
1283 if (last_cg && implicit_non_zero_coeff && significant_coeff_group_flag[x_cg][y_cg]) {
1284 significant_coeff_flag_idx[nb_significant_coeff_flag] = n;
1285 nb_significant_coeff_flag++;
1290 n_end = nb_significant_coeff_flag;
1294 int first_nz_pos_in_cg = 16;
1295 int last_nz_pos_in_cg = -1;
1296 int c_rice_param = 0;
1297 int first_greater1_coeff_idx = -1;
1298 uint8_t coeff_abs_level_greater1_flag[16] = {0};
1299 uint16_t coeff_sign_flag;
1301 int sign_hidden = 0;
1303 // initialize first elem of coeff_bas_level_greater1_flag
1304 int ctx_set = (i > 0 && c_idx == 0) ? 2 : 0;
1306 if (!(i == num_last_subset) && greater1_ctx == 0)
1309 last_nz_pos_in_cg = significant_coeff_flag_idx[0];
1311 for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
1312 int n_idx = significant_coeff_flag_idx[m];
1313 int inc = (ctx_set << 2) + greater1_ctx;
1314 coeff_abs_level_greater1_flag[n_idx] =
1315 coeff_abs_level_greater1_flag_decode(s, c_idx, inc);
1316 if (coeff_abs_level_greater1_flag[n_idx]) {
1318 } else if (greater1_ctx > 0 && greater1_ctx < 3) {
1322 if (coeff_abs_level_greater1_flag[n_idx] &&
1323 first_greater1_coeff_idx == -1)
1324 first_greater1_coeff_idx = n_idx;
1326 first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
1327 sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4 &&
1328 !lc->cu.cu_transquant_bypass_flag);
1330 if (first_greater1_coeff_idx != -1) {
1331 coeff_abs_level_greater1_flag[first_greater1_coeff_idx] += coeff_abs_level_greater2_flag_decode(s, c_idx, ctx_set);
1333 if (!s->pps->sign_data_hiding_flag || !sign_hidden ) {
1334 coeff_sign_flag = coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
1336 coeff_sign_flag = coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
1339 for (m = 0; m < n_end; m++) {
1340 n = significant_coeff_flag_idx[m];
1341 GET_COORD(offset, n);
1342 trans_coeff_level = 1 + coeff_abs_level_greater1_flag[n];
1343 if (trans_coeff_level == ((m < 8) ?
1344 ((n == first_greater1_coeff_idx) ? 3 : 2) : 1)) {
1345 int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(s, trans_coeff_level, c_rice_param);
1347 trans_coeff_level += last_coeff_abs_level_remaining;
1348 if (trans_coeff_level > (3 << c_rice_param))
1349 c_rice_param = FFMIN(c_rice_param + 1, 4);
1352 if (s->pps->sign_data_hiding_flag && sign_hidden) {
1353 sum_abs += trans_coeff_level;
1354 if (n == first_nz_pos_in_cg && (sum_abs&1))
1355 trans_coeff_level = -trans_coeff_level;
1357 if (coeff_sign_flag >> 15)
1358 trans_coeff_level = -trans_coeff_level;
1359 coeff_sign_flag <<= 1;
1360 if(!lc->cu.cu_transquant_bypass_flag) {
1361 if(s->sps->scaling_list_enable_flag) {
1362 if(y_c || x_c || log2_trafo_size < 4) {
1363 switch(log2_trafo_size) {
1364 case 3: pos = (y_c << 3) + x_c; break;
1365 case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1); break;
1366 case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2); break;
1367 default: pos = (y_c << 2) + x_c;
1369 scale_m = scale_matrix[pos];
1374 trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >> shift;
1375 if(trans_coeff_level < 0) {
1376 if((~trans_coeff_level) & 0xFffffffffff8000)
1377 trans_coeff_level = -32768;
1379 if(trans_coeff_level & 0xffffffffffff8000)
1380 trans_coeff_level = 32767;
1383 coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
1388 if (!lc->cu.cu_transquant_bypass_flag) {
1389 if (transform_skip_flag)
1390 s->hevcdsp.transform_skip(coeffs, log2_trafo_size);
1391 else if (lc->cu.pred_mode == MODE_INTRA && c_idx == 0 && log2_trafo_size == 2)
1392 s->hevcdsp.idct_4x4_luma(coeffs);
1394 int max_xy = FFMAX(last_significant_coeff_x, last_significant_coeff_y);
1396 s->hevcdsp.idct_dc[log2_trafo_size-2](coeffs);
1398 int col_limit = last_significant_coeff_x + last_significant_coeff_y + 4;
1400 col_limit = FFMIN(4, col_limit);
1401 else if (max_xy < 8)
1402 col_limit = FFMIN(8, col_limit);
1403 else if (max_xy < 12)
1404 col_limit = FFMIN(24, col_limit);
1405 s->hevcdsp.idct[log2_trafo_size-2](coeffs, col_limit);
1409 s->hevcdsp.transform_add[log2_trafo_size-2](dst, coeffs, stride);
1412 void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size)
1414 HEVCLocalContext *lc = s->HEVClc;
1415 int x = abs_mvd_greater0_flag_decode(s);
1416 int y = abs_mvd_greater0_flag_decode(s);
1419 x += abs_mvd_greater1_flag_decode(s);
1421 y += abs_mvd_greater1_flag_decode(s);
1424 case 2: lc->pu.mvd.x = mvd_decode(s); break;
1425 case 1: lc->pu.mvd.x = mvd_sign_flag_decode(s); break;
1426 case 0: lc->pu.mvd.x = 0; break;
1430 case 2: lc->pu.mvd.y = mvd_decode(s); break;
1431 case 1: lc->pu.mvd.y = mvd_sign_flag_decode(s); break;
1432 case 0: lc->pu.mvd.y = 0; break;