32 #define CABAC_MAX_BIN 31
192 94, 138, 182, 154, 154,
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,
269 149, 107, 167, 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,
346 149, 92, 167, 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, },
454 if (
s->ps.pps->entropy_coding_sync_enabled_flag &&
455 (ctb_addr_ts %
s->ps.sps->ctb_width == 2 ||
456 (
s->ps.sps->ctb_width == 2 &&
457 ctb_addr_ts %
s->ps.sps->ctb_width == 0))) {
459 if (
s->ps.sps->persistent_rice_adaptation_enabled_flag) {
468 if (
s->ps.sps->persistent_rice_adaptation_enabled_flag) {
490 int init_type = 2 -
s->sh.slice_type;
498 int m = (init_value >> 4) * 5 - 45;
499 int n = ((init_value & 15) << 3) - 16;
500 int pre = 2 * (((m *
av_clip(
s->sh.slice_qp, 0, 51)) >> 4) + n) - 127;
504 pre = 124 + (pre & 1);
508 for (
i = 0;
i < 4;
i++)
516 if (ctb_addr_ts ==
s->ps.pps->ctb_addr_rs_to_ts[
s->sh.slice_ctb_addr_rs]) {
520 if (
s->sh.dependent_slice_segment_flag == 0 ||
521 (
s->ps.pps->tiles_enabled_flag &&
522 s->ps.pps->tile_id[ctb_addr_ts] !=
s->ps.pps->tile_id[ctb_addr_ts - 1]))
525 if (!
s->sh.first_slice_in_pic_flag &&
526 s->ps.pps->entropy_coding_sync_enabled_flag) {
527 if (ctb_addr_ts %
s->ps.sps->ctb_width == 0) {
528 if (
s->ps.sps->ctb_width == 1)
530 else if (
s->sh.dependent_slice_segment_flag == 1)
535 if (
s->ps.pps->tiles_enabled_flag &&
536 s->ps.pps->tile_id[ctb_addr_ts] !=
s->ps.pps->tile_id[ctb_addr_ts - 1]) {
538 if (
s->threads_number == 1)
547 if (
s->ps.pps->entropy_coding_sync_enabled_flag) {
548 if (ctb_addr_ts %
s->ps.sps->ctb_width == 0) {
551 if (
s->threads_number == 1)
559 if (
s->ps.sps->ctb_width == 1)
569 #define GET_CABAC(ctx) get_cabac(&lc->cc, &lc->cabac_state[ctx])
591 for (
i = 0;
i < 4;
i++)
631 int min_cb_width =
s->ps.sps->min_cb_width;
654 if (prefix_val >= 5) {
657 suffix_val += 1 << k;
668 return prefix_val + suffix_val;
701 int inc = 0, depth_left = 0, depth_top = 0;
704 int x_cb = x0 >>
sps->log2_min_cb_size;
705 int y_cb = y0 >>
sps->log2_min_cb_size;
708 depth_left =
s->tab_ct_depth[(y_cb) *
sps->min_cb_width + x_cb - 1];
710 depth_top =
s->tab_ct_depth[(y_cb - 1) *
sps->min_cb_width + x_cb];
712 inc += (depth_left > ct_depth);
713 inc += (depth_top > ct_depth);
727 if (log2_cb_size == 3)
778 for (
i = 0;
i < 4;
i++)
812 if (nPbW + nPbH == 12)
823 int max = num_ref_idx_lx - 1;
925 int log2_size,
int *last_scx_prefix,
int *last_scy_prefix)
928 int max = (log2_size << 1) - 1;
929 int ctx_offset, ctx_shift;
932 ctx_offset = 3 * (log2_size - 2) + ((log2_size - 1) >> 2);
933 ctx_shift = (log2_size + 1) >> 2;
936 ctx_shift = log2_size - 2;
941 *last_scx_prefix =
i;
947 *last_scy_prefix =
i;
951 int last_significant_coeff_prefix)
954 int length = (last_significant_coeff_prefix >> 1) - 1;
957 for (
i = 1;
i < length;
i++)
966 inc =
FFMIN(ctx_cg, 1) + (c_idx>0 ? 2 : 0);
971 int offset,
const uint8_t *ctx_idx_map)
973 int inc = ctx_idx_map[(y_c << 2) + x_c] +
offset;
1003 int last_coeff_abs_level_remaining;
1010 for (
i = 0;
i < rc_rice_param;
i++)
1012 last_coeff_abs_level_remaining = (prefix << rc_rice_param) +
suffix;
1014 int prefix_minus3 = prefix - 3;
1016 if (prefix ==
CABAC_MAX_BIN || prefix_minus3 + rc_rice_param > 16 + 6) {
1021 for (
i = 0;
i < prefix_minus3 + rc_rice_param;
i++)
1023 last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1)
1024 << rc_rice_param) +
suffix;
1026 return last_coeff_abs_level_remaining;
1034 for (
i = 0;
i < nb;
i++)
1040 int log2_trafo_size,
enum ScanType scan_idx,
1043 #define GET_COORD(offset, n) \
1045 x_c = (x_cg << 2) + scan_x_off[n]; \
1046 y_c = (y_cg << 2) + scan_y_off[n]; \
1049 int transform_skip_flag = 0;
1051 int last_significant_coeff_x, last_significant_coeff_y;
1055 int greater1_ctx = 1;
1057 int num_last_subset;
1058 int x_cg_last_sig, y_cg_last_sig;
1060 const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off;
1062 ptrdiff_t
stride =
s->frame->linesize[c_idx];
1063 int hshift =
s->ps.sps->hshift[c_idx];
1064 int vshift =
s->ps.sps->vshift[c_idx];
1065 uint8_t *dst = &
s->frame->data[c_idx][(y0 >> vshift) *
stride +
1066 ((x0 >> hshift) <<
s->ps.sps->pixel_shift)];
1068 uint8_t significant_coeff_group_flag[8][8] = {{0}};
1069 int explicit_rdpcm_flag = 0;
1070 int explicit_rdpcm_dir_flag;
1072 int trafo_size = 1 << log2_trafo_size;
1075 static const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
1076 const uint8_t *scale_matrix =
NULL;
1081 memset(coeffs, 0, trafo_size * trafo_size *
sizeof(int16_t));
1085 static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
1086 static const uint8_t rem6[51 + 4 * 6 + 1] = {
1087 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
1088 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
1089 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
1090 4, 5, 0, 1, 2, 3, 4, 5, 0, 1
1093 static const uint8_t div6[51 + 4 * 6 + 1] = {
1094 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
1095 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
1096 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
1097 10, 10, 11, 11, 11, 11, 11, 11, 12, 12
1099 int qp_y = lc->
qp_y;
1101 if (
s->ps.pps->transform_skip_enabled_flag &&
1102 log2_trafo_size <= s->ps.pps->log2_max_transform_skip_block_size) {
1107 qp = qp_y +
s->ps.sps->qp_bd_offset;
1112 offset =
s->ps.pps->cb_qp_offset +
s->sh.slice_cb_qp_offset +
1115 offset =
s->ps.pps->cr_qp_offset +
s->sh.slice_cr_qp_offset +
1119 if (
s->ps.sps->chroma_format_idc == 1) {
1125 qp = qp_c[qp_i - 30];
1133 qp +=
s->ps.sps->qp_bd_offset;
1136 shift =
s->ps.sps->bit_depth + log2_trafo_size - 5;
1138 scale = level_scale[rem6[qp]] << (div6[qp]);
1142 if (
s->ps.sps->scaling_list_enable_flag && !(transform_skip_flag && log2_trafo_size > 2)) {
1143 const ScalingList *sl =
s->ps.pps->scaling_list_data_present_flag ?
1144 &
s->ps.pps->scaling_list : &
s->ps.sps->scaling_list;
1147 matrix_id = 3 * matrix_id + c_idx;
1149 scale_matrix = sl->
sl[log2_trafo_size - 2][matrix_id];
1150 if (log2_trafo_size >= 4)
1151 dc_scale = sl->
sl_dc[log2_trafo_size - 4][matrix_id];
1163 if (explicit_rdpcm_flag) {
1169 &last_significant_coeff_x, &last_significant_coeff_y);
1171 if (last_significant_coeff_x > 3) {
1173 last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
1174 (2 + (last_significant_coeff_x & 1)) +
1178 if (last_significant_coeff_y > 3) {
1180 last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
1181 (2 + (last_significant_coeff_y & 1)) +
1186 FFSWAP(
int, last_significant_coeff_x, last_significant_coeff_y);
1188 x_cg_last_sig = last_significant_coeff_x >> 2;
1189 y_cg_last_sig = last_significant_coeff_y >> 2;
1193 int last_x_c = last_significant_coeff_x & 3;
1194 int last_y_c = last_significant_coeff_y & 3;
1199 if (trafo_size == 4) {
1202 }
else if (trafo_size == 8) {
1206 }
else if (trafo_size == 16) {
1222 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
1229 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
1233 num_last_subset = (num_coeff - 1) >> 4;
1235 for (
i = num_last_subset;
i >= 0;
i--) {
1237 int x_cg, y_cg, x_c, y_c,
pos;
1238 int implicit_non_zero_coeff = 0;
1239 int64_t trans_coeff_level;
1244 uint8_t significant_coeff_flag_idx[16];
1245 uint8_t nb_significant_coeff_flag = 0;
1247 x_cg = scan_x_cg[
i];
1248 y_cg = scan_y_cg[
i];
1250 if ((
i < num_last_subset) && (
i > 0)) {
1252 if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
1253 ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
1254 if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
1255 ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
1257 significant_coeff_group_flag[x_cg][y_cg] =
1259 implicit_non_zero_coeff = 1;
1261 significant_coeff_group_flag[x_cg][y_cg] =
1262 ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
1263 (x_cg == 0 && y_cg == 0));
1266 last_scan_pos = num_coeff -
offset - 1;
1268 if (
i == num_last_subset) {
1269 n_end = last_scan_pos - 1;
1270 significant_coeff_flag_idx[0] = last_scan_pos;
1271 nb_significant_coeff_flag = 1;
1276 if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
1277 prev_sig = !!significant_coeff_group_flag[x_cg + 1][y_cg];
1278 if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
1279 prev_sig += (!!significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
1281 if (significant_coeff_group_flag[x_cg][y_cg] && n_end >= 0) {
1282 static const uint8_t ctx_idx_map[] = {
1283 0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8,
1284 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1285 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1286 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0,
1287 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1289 const uint8_t *ctx_idx_map_p;
1291 if (
s->ps.sps->transform_skip_context_enabled_flag &&
1293 ctx_idx_map_p = &ctx_idx_map[4 * 16];
1297 scf_offset = 14 + 27;
1302 if (log2_trafo_size == 2) {
1303 ctx_idx_map_p = &ctx_idx_map[0];
1305 ctx_idx_map_p = &ctx_idx_map[(prev_sig + 1) << 4];
1307 if ((x_cg > 0 || y_cg > 0))
1309 if (log2_trafo_size == 3) {
1310 scf_offset += (scan_idx ==
SCAN_DIAG) ? 9 : 15;
1315 if (log2_trafo_size == 3)
1322 for (n = n_end; n > 0; n--) {
1323 x_c = scan_x_off[n];
1324 y_c = scan_y_off[n];
1326 significant_coeff_flag_idx[nb_significant_coeff_flag] = n;
1327 nb_significant_coeff_flag++;
1328 implicit_non_zero_coeff = 0;
1331 if (implicit_non_zero_coeff == 0) {
1332 if (
s->ps.sps->transform_skip_context_enabled_flag &&
1337 scf_offset = 16 + 27;
1346 scf_offset = 2 + scf_offset;
1350 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1351 nb_significant_coeff_flag++;
1354 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1355 nb_significant_coeff_flag++;
1359 n_end = nb_significant_coeff_flag;
1363 int first_nz_pos_in_cg;
1364 int last_nz_pos_in_cg;
1365 int c_rice_param = 0;
1366 int first_greater1_coeff_idx = -1;
1367 uint8_t coeff_abs_level_greater1_flag[8];
1368 uint16_t coeff_sign_flag;
1375 int ctx_set = (
i > 0 && c_idx == 0) ? 2 : 0;
1377 if (
s->ps.sps->persistent_rice_adaptation_enabled_flag) {
1379 sb_type = 2 * (c_idx == 0 ? 1 : 0);
1381 sb_type = 2 * (c_idx == 0 ? 1 : 0) + 1;
1385 if (!(
i == num_last_subset) && greater1_ctx == 0)
1388 last_nz_pos_in_cg = significant_coeff_flag_idx[0];
1390 for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
1391 int inc = (ctx_set << 2) + greater1_ctx;
1392 coeff_abs_level_greater1_flag[m] =
1394 if (coeff_abs_level_greater1_flag[m]) {
1396 if (first_greater1_coeff_idx == -1)
1397 first_greater1_coeff_idx = m;
1398 }
else if (greater1_ctx > 0 && greater1_ctx < 3) {
1402 first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
1406 s->ps.sps->implicit_rdpcm_enabled_flag && transform_skip_flag &&
1407 (pred_mode_intra == 10 || pred_mode_intra == 26 )) ||
1408 explicit_rdpcm_flag)
1411 sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4);
1413 if (first_greater1_coeff_idx != -1) {
1416 if (!
s->ps.pps->sign_data_hiding_flag || !sign_hidden ) {
1417 coeff_sign_flag =
coeff_sign_flag_decode(lc, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
1419 coeff_sign_flag =
coeff_sign_flag_decode(lc, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
1422 for (m = 0; m < n_end; m++) {
1423 n = significant_coeff_flag_idx[m];
1426 trans_coeff_level = 1 + coeff_abs_level_greater1_flag[m];
1427 if (trans_coeff_level == ((m == first_greater1_coeff_idx) ? 3 : 2)) {
1430 trans_coeff_level += last_coeff_abs_level_remaining;
1431 if (trans_coeff_level > (3 << c_rice_param))
1432 c_rice_param =
s->ps.sps->persistent_rice_adaptation_enabled_flag ? c_rice_param + 1 :
FFMIN(c_rice_param + 1, 4);
1433 if (
s->ps.sps->persistent_rice_adaptation_enabled_flag && !rice_init) {
1434 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1435 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1437 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1446 trans_coeff_level = 1 + last_coeff_abs_level_remaining;
1447 if (trans_coeff_level > (3 << c_rice_param))
1448 c_rice_param =
s->ps.sps->persistent_rice_adaptation_enabled_flag ? c_rice_param + 1 :
FFMIN(c_rice_param + 1, 4);
1449 if (
s->ps.sps->persistent_rice_adaptation_enabled_flag && !rice_init) {
1450 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1451 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1453 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1459 if (
s->ps.pps->sign_data_hiding_flag && sign_hidden) {
1460 sum_abs += trans_coeff_level;
1461 if (n == first_nz_pos_in_cg && (sum_abs&1))
1462 trans_coeff_level = -trans_coeff_level;
1464 if (coeff_sign_flag >> 15)
1465 trans_coeff_level = -trans_coeff_level;
1466 coeff_sign_flag <<= 1;
1468 if (
s->ps.sps->scaling_list_enable_flag && !(transform_skip_flag && log2_trafo_size > 2)) {
1469 if(y_c || x_c || log2_trafo_size < 4) {
1470 switch(log2_trafo_size) {
1471 case 3:
pos = (y_c << 3) + x_c;
break;
1472 case 4:
pos = ((y_c >> 1) << 3) + (x_c >> 1);
break;
1473 case 5:
pos = ((y_c >> 2) << 3) + (x_c >> 2);
break;
1474 default:
pos = (y_c << 2) + x_c;
break;
1476 scale_m = scale_matrix[
pos];
1481 trans_coeff_level = (trans_coeff_level * (int64_t)
scale * (int64_t)scale_m +
add) >>
shift;
1482 if(trans_coeff_level < 0) {
1483 if((~trans_coeff_level) & 0xFffffffffff8000)
1484 trans_coeff_level = -32768;
1486 if(trans_coeff_level & 0xffffffffffff8000)
1487 trans_coeff_level = 32767;
1490 coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
1496 if (explicit_rdpcm_flag || (
s->ps.sps->implicit_rdpcm_enabled_flag &&
1497 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1498 int mode =
s->ps.sps->implicit_rdpcm_enabled_flag ? (pred_mode_intra == 26) : explicit_rdpcm_dir_flag;
1500 s->hevcdsp.transform_rdpcm(coeffs, log2_trafo_size,
mode);
1503 if (transform_skip_flag) {
1504 int rot =
s->ps.sps->transform_skip_rotation_enabled_flag &&
1505 log2_trafo_size == 2 &&
1508 for (
i = 0;
i < 8;
i++)
1509 FFSWAP(int16_t, coeffs[
i], coeffs[16 -
i - 1]);
1512 s->hevcdsp.dequant(coeffs, log2_trafo_size);
1514 if (explicit_rdpcm_flag || (
s->ps.sps->implicit_rdpcm_enabled_flag &&
1516 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1517 int mode = explicit_rdpcm_flag ? explicit_rdpcm_dir_flag : (pred_mode_intra == 26);
1519 s->hevcdsp.transform_rdpcm(coeffs, log2_trafo_size,
mode);
1522 s->hevcdsp.transform_4x4_luma(coeffs);
1524 int max_xy =
FFMAX(last_significant_coeff_x, last_significant_coeff_y);
1526 s->hevcdsp.idct_dc[log2_trafo_size - 2](coeffs);
1528 int col_limit = last_significant_coeff_x + last_significant_coeff_y + 4;
1530 col_limit =
FFMIN(4, col_limit);
1531 else if (max_xy < 8)
1532 col_limit =
FFMIN(8, col_limit);
1533 else if (max_xy < 12)
1534 col_limit =
FFMIN(24, col_limit);
1535 s->hevcdsp.idct[log2_trafo_size - 2](coeffs, col_limit);
1542 for (
i = 0;
i < (trafo_size * trafo_size);
i++) {
1546 s->hevcdsp.add_residual[log2_trafo_size-2](dst, coeffs,
stride);
1562 case 0: lc->
pu.
mvd.
x = 0;
break;
1568 case 0: lc->
pu.
mvd.
y = 0;
break;