32 #define CABAC_MAX_BIN 31
200 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
203 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
208 111, 111, 125, 110, 110, 94, 124, 108, 124, 107, 125, 141, 179, 153,
209 125, 107, 125, 141, 179, 153, 125, 107, 125, 141, 179, 153, 125, 140,
210 139, 182, 182, 152, 136, 152, 136, 153, 136, 139, 111, 136, 139, 111,
213 140, 92, 137, 138, 140, 152, 138, 139, 153, 74, 149, 92, 139, 107,
214 122, 152, 140, 179, 166, 182, 140, 227, 122, 197,
216 138, 153, 136, 167, 152, 152,
218 154, 154, 154, 154, 154, 154, 154, 154,
277 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
280 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
285 155, 154, 139, 153, 139, 123, 123, 63, 153, 166, 183, 140, 136, 153,
286 154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
287 153, 123, 123, 107, 121, 107, 121, 167, 151, 183, 140, 151, 183, 140,
290 154, 196, 196, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
291 136, 137, 169, 194, 166, 167, 154, 167, 137, 182,
293 107, 167, 91, 122, 107, 167,
295 154, 154, 154, 154, 154, 154, 154, 154,
354 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
357 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
362 170, 154, 139, 153, 139, 123, 123, 63, 124, 166, 183, 140, 136, 153,
363 154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
364 153, 138, 138, 122, 121, 122, 121, 167, 151, 183, 140, 151, 183, 140,
367 154, 196, 167, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
368 136, 122, 169, 208, 166, 167, 154, 152, 167, 182,
370 107, 167, 91, 107, 107, 167,
372 154, 154, 154, 154, 154, 154, 154, 154,
409 { 0, 1, 2, 3, 16, 17, 18, 19, },
410 { 4, 5, 6, 7, 20, 21, 22, 23, },
411 { 8, 9, 10, 11, 24, 25, 26, 27, },
412 { 12, 13, 14, 15, 28, 29, 30, 31, },
413 { 32, 33, 34, 35, 48, 49, 50, 51, },
414 { 36, 37, 38, 39, 52, 53, 54, 55, },
415 { 40, 41, 42, 43, 56, 57, 58, 59, },
416 { 44, 45, 46, 47, 60, 61, 62, 63, },
440 { 0, 2, 5, 9, 14, 20, 27, 35, },
441 { 1, 4, 8, 13, 19, 26, 34, 42, },
442 { 3, 7, 12, 18, 25, 33, 41, 48, },
443 { 6, 11, 17, 24, 32, 40, 47, 53, },
444 { 10, 16, 23, 31, 39, 46, 52, 57, },
445 { 15, 22, 30, 38, 45, 51, 56, 60, },
446 { 21, 29, 37, 44, 50, 55, 59, 62, },
447 { 28, 36, 43, 49, 54, 58, 61, 63, },
452 if (
s->ps.pps->entropy_coding_sync_enabled_flag &&
453 (ctb_addr_ts %
s->ps.sps->ctb_width == 2 ||
454 (
s->ps.sps->ctb_width == 2 &&
455 ctb_addr_ts %
s->ps.sps->ctb_width == 0))) {
482 int init_type = 2 -
s->sh.slice_type;
490 int m = (init_value >> 4) * 5 - 45;
491 int n = ((init_value & 15) << 3) - 16;
492 int pre = 2 * (((m * av_clip(
s->sh.slice_qp, 0, 51)) >> 4) +
n) - 127;
496 pre = 124 + (pre & 1);
497 s->HEVClc->cabac_state[
i] = pre;
500 for (
i = 0;
i < 4;
i++)
501 s->HEVClc->stat_coeff[
i] = 0;
506 if (ctb_addr_ts ==
s->ps.pps->ctb_addr_rs_to_ts[
s->sh.slice_ctb_addr_rs]) {
510 if (
s->sh.dependent_slice_segment_flag == 0 ||
511 (
s->ps.pps->tiles_enabled_flag &&
512 s->ps.pps->tile_id[ctb_addr_ts] !=
s->ps.pps->tile_id[ctb_addr_ts - 1]))
515 if (!
s->sh.first_slice_in_pic_flag &&
516 s->ps.pps->entropy_coding_sync_enabled_flag) {
517 if (ctb_addr_ts %
s->ps.sps->ctb_width == 0) {
518 if (
s->ps.sps->ctb_width == 1)
520 else if (
s->sh.dependent_slice_segment_flag == 1)
525 if (
s->ps.pps->tiles_enabled_flag &&
526 s->ps.pps->tile_id[ctb_addr_ts] !=
s->ps.pps->tile_id[ctb_addr_ts - 1]) {
528 if (
s->threads_number == 1)
537 if (
s->ps.pps->entropy_coding_sync_enabled_flag) {
538 if (ctb_addr_ts %
s->ps.sps->ctb_width == 0) {
541 if (
s->threads_number == 1)
549 if (
s->ps.sps->ctb_width == 1)
559 #define GET_CABAC(ctx) get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
581 for (
i = 0;
i < 4;
i++)
589 int length = (1 << (
FFMIN(
s->ps.sps->bit_depth, 10) - 5)) - 1;
620 int min_cb_width =
s->ps.sps->min_cb_width;
622 int x0b = av_mod_uintp2(x0,
s->ps.sps->log2_ctb_size);
623 int y0b = av_mod_uintp2(y0,
s->ps.sps->log2_ctb_size);
625 if (
s->HEVClc->ctb_left_flag || x0b)
627 if (
s->HEVClc->ctb_up_flag || y0b)
643 if (prefix_val >= 5) {
646 suffix_val += 1 << k;
657 return prefix_val + suffix_val;
672 int c_max=
FFMAX(5,
s->ps.pps->chroma_qp_offset_list_len_minus1);
688 int inc = 0, depth_left = 0, depth_top = 0;
689 int x0b = av_mod_uintp2(x0,
s->ps.sps->log2_ctb_size);
690 int y0b = av_mod_uintp2(y0,
s->ps.sps->log2_ctb_size);
691 int x_cb = x0 >>
s->ps.sps->log2_min_cb_size;
692 int y_cb = y0 >>
s->ps.sps->log2_min_cb_size;
694 if (
s->HEVClc->ctb_left_flag || x0b)
695 depth_left =
s->tab_ct_depth[(y_cb) *
s->ps.sps->min_cb_width + x_cb - 1];
696 if (
s->HEVClc->ctb_up_flag || y0b)
697 depth_top =
s->tab_ct_depth[(y_cb - 1) *
s->ps.sps->min_cb_width + x_cb];
699 inc += (depth_left > ct_depth);
700 inc += (depth_top > ct_depth);
709 if (log2_cb_size ==
s->ps.sps->log2_min_cb_size) {
714 if (log2_cb_size == 3)
721 if (!
s->ps.sps->amp_enabled_flag) {
765 for (
i = 0;
i < 4;
i++)
799 if (nPbW + nPbH == 12)
810 int max = num_ref_idx_lx - 1;
910 int log2_size,
int *last_scx_prefix,
int *last_scy_prefix)
913 int max = (log2_size << 1) - 1;
914 int ctx_offset, ctx_shift;
917 ctx_offset = 3 * (log2_size - 2) + ((log2_size - 1) >> 2);
918 ctx_shift = (log2_size + 1) >> 2;
921 ctx_shift = log2_size - 2;
926 *last_scx_prefix =
i;
932 *last_scy_prefix =
i;
936 int last_significant_coeff_prefix)
939 int length = (last_significant_coeff_prefix >> 1) - 1;
951 inc =
FFMIN(ctx_cg, 1) + (c_idx>0 ? 2 : 0);
958 int inc = ctx_idx_map[(y_c << 2) + x_c] +
offset;
988 int last_coeff_abs_level_remaining;
995 for (
i = 0;
i < rc_rice_param;
i++)
997 last_coeff_abs_level_remaining = (prefix << rc_rice_param) +
suffix;
999 int prefix_minus3 = prefix - 3;
1001 if (prefix ==
CABAC_MAX_BIN || prefix_minus3 + rc_rice_param > 16 + 6) {
1006 for (
i = 0;
i < prefix_minus3 + rc_rice_param;
i++)
1008 last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1)
1009 << rc_rice_param) +
suffix;
1011 return last_coeff_abs_level_remaining;
1019 for (
i = 0;
i < nb;
i++)
1025 int log2_trafo_size,
enum ScanType scan_idx,
1028 #define GET_COORD(offset, n) \
1030 x_c = (x_cg << 2) + scan_x_off[n]; \
1031 y_c = (y_cg << 2) + scan_y_off[n]; \
1034 int transform_skip_flag = 0;
1036 int last_significant_coeff_x, last_significant_coeff_y;
1040 int greater1_ctx = 1;
1042 int num_last_subset;
1043 int x_cg_last_sig, y_cg_last_sig;
1045 const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off;
1047 ptrdiff_t
stride =
s->frame->linesize[c_idx];
1048 int hshift =
s->ps.sps->hshift[c_idx];
1049 int vshift =
s->ps.sps->vshift[c_idx];
1051 ((x0 >> hshift) <<
s->ps.sps->pixel_shift)];
1053 uint8_t significant_coeff_group_flag[8][8] = {{0}};
1054 int explicit_rdpcm_flag = 0;
1055 int explicit_rdpcm_dir_flag;
1057 int trafo_size = 1 << log2_trafo_size;
1059 int qp,
shift,add,scale,scale_m;
1060 static const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
1066 memset(coeffs, 0, trafo_size * trafo_size *
sizeof(int16_t));
1070 static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
1071 static const uint8_t rem6[51 + 4 * 6 + 1] = {
1072 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
1073 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
1074 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
1075 4, 5, 0, 1, 2, 3, 4, 5, 0, 1
1078 static const uint8_t div6[51 + 4 * 6 + 1] = {
1079 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
1080 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
1081 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
1082 10, 10, 11, 11, 11, 11, 11, 11, 12, 12
1084 int qp_y = lc->
qp_y;
1086 if (
s->ps.pps->transform_skip_enabled_flag &&
1087 log2_trafo_size <= s->ps.pps->log2_max_transform_skip_block_size) {
1092 qp = qp_y +
s->ps.sps->qp_bd_offset;
1097 offset =
s->ps.pps->cb_qp_offset +
s->sh.slice_cb_qp_offset +
1100 offset =
s->ps.pps->cr_qp_offset +
s->sh.slice_cr_qp_offset +
1103 qp_i = av_clip(qp_y +
offset, -
s->ps.sps->qp_bd_offset, 57);
1104 if (
s->ps.sps->chroma_format_idc == 1) {
1110 qp = qp_c[qp_i - 30];
1118 qp +=
s->ps.sps->qp_bd_offset;
1121 shift =
s->ps.sps->bit_depth + log2_trafo_size - 5;
1122 add = 1 << (
shift-1);
1123 scale = level_scale[rem6[qp]] << (div6[qp]);
1127 if (
s->ps.sps->scaling_list_enable_flag && !(transform_skip_flag && log2_trafo_size > 2)) {
1128 const ScalingList *sl =
s->ps.pps->scaling_list_data_present_flag ?
1129 &
s->ps.pps->scaling_list : &
s->ps.sps->scaling_list;
1132 matrix_id = 3 * matrix_id + c_idx;
1134 scale_matrix = sl->
sl[log2_trafo_size - 2][matrix_id];
1135 if (log2_trafo_size >= 4)
1136 dc_scale = sl->
sl_dc[log2_trafo_size - 4][matrix_id];
1148 if (explicit_rdpcm_flag) {
1154 &last_significant_coeff_x, &last_significant_coeff_y);
1156 if (last_significant_coeff_x > 3) {
1158 last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
1159 (2 + (last_significant_coeff_x & 1)) +
1163 if (last_significant_coeff_y > 3) {
1165 last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
1166 (2 + (last_significant_coeff_y & 1)) +
1171 FFSWAP(
int, last_significant_coeff_x, last_significant_coeff_y);
1173 x_cg_last_sig = last_significant_coeff_x >> 2;
1174 y_cg_last_sig = last_significant_coeff_y >> 2;
1178 int last_x_c = last_significant_coeff_x & 3;
1179 int last_y_c = last_significant_coeff_y & 3;
1184 if (trafo_size == 4) {
1187 }
else if (trafo_size == 8) {
1191 }
else if (trafo_size == 16) {
1207 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
1214 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
1218 num_last_subset = (num_coeff - 1) >> 4;
1220 for (
i = num_last_subset;
i >= 0;
i--) {
1222 int x_cg, y_cg, x_c, y_c, pos;
1223 int implicit_non_zero_coeff = 0;
1224 int64_t trans_coeff_level;
1229 uint8_t significant_coeff_flag_idx[16];
1230 uint8_t nb_significant_coeff_flag = 0;
1232 x_cg = scan_x_cg[
i];
1233 y_cg = scan_y_cg[
i];
1235 if ((
i < num_last_subset) && (
i > 0)) {
1237 if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
1238 ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
1239 if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
1240 ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
1242 significant_coeff_group_flag[x_cg][y_cg] =
1244 implicit_non_zero_coeff = 1;
1246 significant_coeff_group_flag[x_cg][y_cg] =
1247 ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
1248 (x_cg == 0 && y_cg == 0));
1251 last_scan_pos = num_coeff -
offset - 1;
1253 if (
i == num_last_subset) {
1254 n_end = last_scan_pos - 1;
1255 significant_coeff_flag_idx[0] = last_scan_pos;
1256 nb_significant_coeff_flag = 1;
1261 if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
1262 prev_sig = !!significant_coeff_group_flag[x_cg + 1][y_cg];
1263 if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
1264 prev_sig += (!!significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
1266 if (significant_coeff_group_flag[x_cg][y_cg] && n_end >= 0) {
1267 static const uint8_t ctx_idx_map[] = {
1268 0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8,
1269 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1270 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1271 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0,
1272 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1276 if (
s->ps.sps->transform_skip_context_enabled_flag &&
1278 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[4 * 16];
1282 scf_offset = 14 + 27;
1287 if (log2_trafo_size == 2) {
1288 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[0];
1290 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[(prev_sig + 1) << 4];
1292 if ((x_cg > 0 || y_cg > 0))
1294 if (log2_trafo_size == 3) {
1295 scf_offset += (scan_idx ==
SCAN_DIAG) ? 9 : 15;
1300 if (log2_trafo_size == 3)
1307 for (
n = n_end;
n > 0;
n--) {
1308 x_c = scan_x_off[
n];
1309 y_c = scan_y_off[
n];
1311 significant_coeff_flag_idx[nb_significant_coeff_flag] =
n;
1312 nb_significant_coeff_flag++;
1313 implicit_non_zero_coeff = 0;
1316 if (implicit_non_zero_coeff == 0) {
1317 if (
s->ps.sps->transform_skip_context_enabled_flag &&
1322 scf_offset = 16 + 27;
1331 scf_offset = 2 + scf_offset;
1335 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1336 nb_significant_coeff_flag++;
1339 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1340 nb_significant_coeff_flag++;
1344 n_end = nb_significant_coeff_flag;
1348 int first_nz_pos_in_cg;
1349 int last_nz_pos_in_cg;
1350 int c_rice_param = 0;
1351 int first_greater1_coeff_idx = -1;
1352 uint8_t coeff_abs_level_greater1_flag[8];
1353 uint16_t coeff_sign_flag;
1360 int ctx_set = (
i > 0 && c_idx == 0) ? 2 : 0;
1362 if (
s->ps.sps->persistent_rice_adaptation_enabled_flag) {
1364 sb_type = 2 * (c_idx == 0 ? 1 : 0);
1366 sb_type = 2 * (c_idx == 0 ? 1 : 0) + 1;
1370 if (!(
i == num_last_subset) && greater1_ctx == 0)
1373 last_nz_pos_in_cg = significant_coeff_flag_idx[0];
1375 for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
1376 int inc = (ctx_set << 2) + greater1_ctx;
1377 coeff_abs_level_greater1_flag[m] =
1379 if (coeff_abs_level_greater1_flag[m]) {
1381 if (first_greater1_coeff_idx == -1)
1382 first_greater1_coeff_idx = m;
1383 }
else if (greater1_ctx > 0 && greater1_ctx < 3) {
1387 first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
1391 s->ps.sps->implicit_rdpcm_enabled_flag && transform_skip_flag &&
1392 (pred_mode_intra == 10 || pred_mode_intra == 26 )) ||
1393 explicit_rdpcm_flag)
1396 sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4);
1398 if (first_greater1_coeff_idx != -1) {
1401 if (!
s->ps.pps->sign_data_hiding_flag || !sign_hidden ) {
1404 coeff_sign_flag =
coeff_sign_flag_decode(
s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
1407 for (m = 0; m < n_end; m++) {
1408 n = significant_coeff_flag_idx[m];
1411 trans_coeff_level = 1 + coeff_abs_level_greater1_flag[m];
1412 if (trans_coeff_level == ((m == first_greater1_coeff_idx) ? 3 : 2)) {
1415 trans_coeff_level += last_coeff_abs_level_remaining;
1416 if (trans_coeff_level > (3 << c_rice_param))
1417 c_rice_param =
s->ps.sps->persistent_rice_adaptation_enabled_flag ? c_rice_param + 1 :
FFMIN(c_rice_param + 1, 4);
1418 if (
s->ps.sps->persistent_rice_adaptation_enabled_flag && !rice_init) {
1419 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1420 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1422 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1431 trans_coeff_level = 1 + last_coeff_abs_level_remaining;
1432 if (trans_coeff_level > (3 << c_rice_param))
1433 c_rice_param =
s->ps.sps->persistent_rice_adaptation_enabled_flag ? c_rice_param + 1 :
FFMIN(c_rice_param + 1, 4);
1434 if (
s->ps.sps->persistent_rice_adaptation_enabled_flag && !rice_init) {
1435 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1436 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1438 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1444 if (
s->ps.pps->sign_data_hiding_flag && sign_hidden) {
1445 sum_abs += trans_coeff_level;
1446 if (
n == first_nz_pos_in_cg && (sum_abs&1))
1447 trans_coeff_level = -trans_coeff_level;
1449 if (coeff_sign_flag >> 15)
1450 trans_coeff_level = -trans_coeff_level;
1451 coeff_sign_flag <<= 1;
1453 if (
s->ps.sps->scaling_list_enable_flag && !(transform_skip_flag && log2_trafo_size > 2)) {
1454 if(y_c || x_c || log2_trafo_size < 4) {
1455 switch(log2_trafo_size) {
1456 case 3: pos = (y_c << 3) + x_c;
break;
1457 case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1);
break;
1458 case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2);
break;
1459 default: pos = (y_c << 2) + x_c;
break;
1461 scale_m = scale_matrix[pos];
1466 trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >>
shift;
1467 if(trans_coeff_level < 0) {
1468 if((~trans_coeff_level) & 0xFffffffffff8000)
1469 trans_coeff_level = -32768;
1471 if(trans_coeff_level & 0xffffffffffff8000)
1472 trans_coeff_level = 32767;
1475 coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
1481 if (explicit_rdpcm_flag || (
s->ps.sps->implicit_rdpcm_enabled_flag &&
1482 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1483 int mode =
s->ps.sps->implicit_rdpcm_enabled_flag ? (pred_mode_intra == 26) : explicit_rdpcm_dir_flag;
1485 s->hevcdsp.transform_rdpcm(coeffs, log2_trafo_size,
mode);
1488 if (transform_skip_flag) {
1489 int rot =
s->ps.sps->transform_skip_rotation_enabled_flag &&
1490 log2_trafo_size == 2 &&
1493 for (
i = 0;
i < 8;
i++)
1494 FFSWAP(int16_t, coeffs[
i], coeffs[16 -
i - 1]);
1497 s->hevcdsp.dequant(coeffs, log2_trafo_size);
1499 if (explicit_rdpcm_flag || (
s->ps.sps->implicit_rdpcm_enabled_flag &&
1501 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1502 int mode = explicit_rdpcm_flag ? explicit_rdpcm_dir_flag : (pred_mode_intra == 26);
1504 s->hevcdsp.transform_rdpcm(coeffs, log2_trafo_size,
mode);
1507 s->hevcdsp.transform_4x4_luma(coeffs);
1509 int max_xy =
FFMAX(last_significant_coeff_x, last_significant_coeff_y);
1511 s->hevcdsp.idct_dc[log2_trafo_size - 2](coeffs);
1513 int col_limit = last_significant_coeff_x + last_significant_coeff_y + 4;
1515 col_limit =
FFMIN(4, col_limit);
1516 else if (max_xy < 8)
1517 col_limit =
FFMIN(8, col_limit);
1518 else if (max_xy < 12)
1519 col_limit =
FFMIN(24, col_limit);
1520 s->hevcdsp.idct[log2_trafo_size - 2](coeffs, col_limit);
1527 for (
i = 0;
i < (trafo_size * trafo_size);
i++) {
1531 s->hevcdsp.add_residual[log2_trafo_size-2](dst, coeffs,
stride);
1548 case 0: lc->
pu.
mvd.
x = 0;
break;
1554 case 0: lc->
pu.
mvd.
y = 0;
break;