30 #define CABAC_MAX_BIN 31
198 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
201 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
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,
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,
214 138, 153, 136, 167, 152, 152,
216 154, 154, 154, 154, 154, 154, 154, 154,
275 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
278 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
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,
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,
291 107, 167, 91, 122, 107, 167,
293 154, 154, 154, 154, 154, 154, 154, 154,
352 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
355 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
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,
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,
368 107, 167, 91, 107, 107, 167,
370 154, 154, 154, 154, 154, 154, 154, 154,
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, },
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, },
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);
550 for (i = 0; i < 4; i++)
598 #define GET_CABAC(ctx) get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
620 for (i = 0; i < 4; i++)
682 if (prefix_val >= 5) {
685 suffix_val += 1 << k;
694 return prefix_val + suffix_val;
725 int inc = 0, depth_left = 0, depth_top = 0;
736 inc += (depth_left > ct_depth);
737 inc += (depth_top > ct_depth);
751 if (log2_cb_size == 3)
802 for (i = 0; i < 4; i++)
836 if (nPbW + nPbH == 12)
847 int max = num_ref_idx_lx - 1;
848 int max_ctx =
FFMIN(max, 2);
947 int log2_size,
int *last_scx_prefix,
int *last_scy_prefix)
950 int max = (log2_size << 1) - 1;
951 int ctx_offset, ctx_shift;
954 ctx_offset = 3 * (log2_size - 2) + ((log2_size - 1) >> 2);
955 ctx_shift = (log2_size + 1) >> 2;
958 ctx_shift = log2_size - 2;
963 *last_scx_prefix = i;
969 *last_scy_prefix = i;
973 int last_significant_coeff_prefix)
976 int length = (last_significant_coeff_prefix >> 1) - 1;
979 for (i = 1; i <
length; i++)
988 inc =
FFMIN(ctx_cg, 1) + (c_idx>0 ? 2 : 0);
995 int inc = ctx_idx_map[(y_c << 2) + x_c] + offset;
1025 int last_coeff_abs_level_remaining;
1035 for (i = 0; i < rc_rice_param; i++)
1037 last_coeff_abs_level_remaining = (prefix << rc_rice_param) + suffix;
1039 int prefix_minus3 = prefix - 3;
1040 for (i = 0; i < prefix_minus3 + rc_rice_param; i++)
1042 last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1)
1043 << rc_rice_param) + suffix;
1045 return last_coeff_abs_level_remaining;
1053 for (i = 0; i < nb; i++)
1059 int log2_trafo_size,
enum ScanType scan_idx,
1062 #define GET_COORD(offset, n) \
1064 x_c = (x_cg << 2) + scan_x_off[n]; \
1065 y_c = (y_cg << 2) + scan_y_off[n]; \
1068 int transform_skip_flag = 0;
1070 int last_significant_coeff_x, last_significant_coeff_y;
1074 int greater1_ctx = 1;
1076 int num_last_subset;
1077 int x_cg_last_sig, y_cg_last_sig;
1079 const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off;
1087 uint8_t significant_coeff_group_flag[8][8] = {{0}};
1088 int explicit_rdpcm_flag = 0;
1089 int explicit_rdpcm_dir_flag;
1091 int trafo_size = 1 << log2_trafo_size;
1093 int qp,
shift,add,scale,scale_m;
1094 const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
1100 memset(coeffs, 0, trafo_size * trafo_size *
sizeof(int16_t));
1104 static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
1106 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
1107 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
1108 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
1109 4, 5, 0, 1, 2, 3, 4, 5, 0, 1
1113 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
1114 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
1115 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
1116 10, 10, 11, 11, 11, 11, 11, 11, 12, 12
1118 int qp_y = lc->
qp_y;
1121 log2_trafo_size <= s->pps->log2_max_transform_skip_block_size) {
1144 qp = qp_c[qp_i - 30];
1156 add = 1 << (shift-1);
1157 scale = level_scale[rem6[qp]] << (div6[qp]);
1166 matrix_id = 3 * matrix_id + c_idx;
1168 scale_matrix = sl->
sl[log2_trafo_size - 2][matrix_id];
1169 if (log2_trafo_size >= 4)
1170 dc_scale = sl->
sl_dc[log2_trafo_size - 4][matrix_id];
1182 if (explicit_rdpcm_flag) {
1188 &last_significant_coeff_x, &last_significant_coeff_y);
1190 if (last_significant_coeff_x > 3) {
1192 last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
1193 (2 + (last_significant_coeff_x & 1)) +
1197 if (last_significant_coeff_y > 3) {
1199 last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
1200 (2 + (last_significant_coeff_y & 1)) +
1205 FFSWAP(
int, last_significant_coeff_x, last_significant_coeff_y);
1207 x_cg_last_sig = last_significant_coeff_x >> 2;
1208 y_cg_last_sig = last_significant_coeff_y >> 2;
1212 int last_x_c = last_significant_coeff_x & 3;
1213 int last_y_c = last_significant_coeff_y & 3;
1218 if (trafo_size == 4) {
1221 }
else if (trafo_size == 8) {
1225 }
else if (trafo_size == 16) {
1241 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
1248 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
1252 num_last_subset = (num_coeff - 1) >> 4;
1254 for (i = num_last_subset; i >= 0; i--) {
1256 int x_cg, y_cg, x_c, y_c, pos;
1257 int implicit_non_zero_coeff = 0;
1258 int64_t trans_coeff_level;
1263 uint8_t significant_coeff_flag_idx[16];
1264 uint8_t nb_significant_coeff_flag = 0;
1266 x_cg = scan_x_cg[i];
1267 y_cg = scan_y_cg[i];
1269 if ((i < num_last_subset) && (i > 0)) {
1271 if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
1272 ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
1273 if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
1274 ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
1276 significant_coeff_group_flag[x_cg][y_cg] =
1278 implicit_non_zero_coeff = 1;
1280 significant_coeff_group_flag[x_cg][y_cg] =
1281 ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
1282 (x_cg == 0 && y_cg == 0));
1285 last_scan_pos = num_coeff - offset - 1;
1287 if (i == num_last_subset) {
1288 n_end = last_scan_pos - 1;
1289 significant_coeff_flag_idx[0] = last_scan_pos;
1290 nb_significant_coeff_flag = 1;
1295 if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
1296 prev_sig = !!significant_coeff_group_flag[x_cg + 1][y_cg];
1297 if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
1298 prev_sig += (!!significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
1300 if (significant_coeff_group_flag[x_cg][y_cg] && n_end >= 0) {
1301 static const uint8_t ctx_idx_map[] = {
1302 0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8,
1303 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1304 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1305 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0,
1306 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1312 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[4 * 16];
1316 scf_offset = 14 + 27;
1321 if (log2_trafo_size == 2) {
1322 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[0];
1324 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[(prev_sig + 1) << 4];
1326 if ((x_cg > 0 || y_cg > 0))
1328 if (log2_trafo_size == 3) {
1329 scf_offset += (scan_idx ==
SCAN_DIAG) ? 9 : 15;
1334 if (log2_trafo_size == 3)
1341 for (n = n_end; n > 0; n--) {
1342 x_c = scan_x_off[
n];
1343 y_c = scan_y_off[
n];
1345 significant_coeff_flag_idx[nb_significant_coeff_flag] =
n;
1346 nb_significant_coeff_flag++;
1347 implicit_non_zero_coeff = 0;
1350 if (implicit_non_zero_coeff == 0) {
1356 scf_offset = 16 + 27;
1365 scf_offset = 2 + scf_offset;
1369 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1370 nb_significant_coeff_flag++;
1373 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1374 nb_significant_coeff_flag++;
1378 n_end = nb_significant_coeff_flag;
1382 int first_nz_pos_in_cg;
1383 int last_nz_pos_in_cg;
1384 int c_rice_param = 0;
1385 int first_greater1_coeff_idx = -1;
1386 uint8_t coeff_abs_level_greater1_flag[8];
1387 uint16_t coeff_sign_flag;
1394 int ctx_set = (i > 0 && c_idx == 0) ? 2 : 0;
1398 sb_type = 2 * (c_idx == 0 ? 1 : 0);
1400 sb_type = 2 * (c_idx == 0 ? 1 : 0) + 1;
1404 if (!(i == num_last_subset) && greater1_ctx == 0)
1407 last_nz_pos_in_cg = significant_coeff_flag_idx[0];
1409 for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
1410 int inc = (ctx_set << 2) + greater1_ctx;
1411 coeff_abs_level_greater1_flag[
m] =
1413 if (coeff_abs_level_greater1_flag[m]) {
1415 if (first_greater1_coeff_idx == -1)
1416 first_greater1_coeff_idx =
m;
1417 }
else if (greater1_ctx > 0 && greater1_ctx < 3) {
1421 first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
1426 (pred_mode_intra == 10 || pred_mode_intra == 26 )) ||
1427 explicit_rdpcm_flag)
1430 sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4);
1432 if (first_greater1_coeff_idx != -1) {
1436 coeff_sign_flag =
coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
1438 coeff_sign_flag =
coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
1441 for (m = 0; m < n_end; m++) {
1442 n = significant_coeff_flag_idx[
m];
1445 trans_coeff_level = 1 + coeff_abs_level_greater1_flag[
m];
1446 if (trans_coeff_level == ((m == first_greater1_coeff_idx) ? 3 : 2)) {
1449 trans_coeff_level += last_coeff_abs_level_remaining;
1450 if (trans_coeff_level > (3 << c_rice_param))
1453 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1454 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1456 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1465 trans_coeff_level = 1 + last_coeff_abs_level_remaining;
1466 if (trans_coeff_level > (3 << c_rice_param))
1469 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1470 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1472 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1479 sum_abs += trans_coeff_level;
1480 if (n == first_nz_pos_in_cg && (sum_abs&1))
1481 trans_coeff_level = -trans_coeff_level;
1483 if (coeff_sign_flag >> 15)
1484 trans_coeff_level = -trans_coeff_level;
1485 coeff_sign_flag <<= 1;
1488 if(y_c || x_c || log2_trafo_size < 4) {
1489 switch(log2_trafo_size) {
1490 case 3: pos = (y_c << 3) + x_c;
break;
1491 case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1);
break;
1492 case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2);
break;
1493 default: pos = (y_c << 2) + x_c;
break;
1495 scale_m = scale_matrix[pos];
1500 trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >> shift;
1501 if(trans_coeff_level < 0) {
1502 if((~trans_coeff_level) & 0xFffffffffff8000)
1503 trans_coeff_level = -32768;
1505 if(trans_coeff_level & 0xffffffffffff8000)
1506 trans_coeff_level = 32767;
1509 coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
1516 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1522 if (transform_skip_flag) {
1524 log2_trafo_size == 2 &&
1527 for (i = 0; i < 8; i++)
1528 FFSWAP(int16_t, coeffs[i], coeffs[16 - i - 1]);
1535 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1536 int mode = explicit_rdpcm_flag ? explicit_rdpcm_dir_flag : (pred_mode_intra == 26);
1543 int max_xy =
FFMAX(last_significant_coeff_x, last_significant_coeff_y);
1547 int col_limit = last_significant_coeff_x + last_significant_coeff_y + 4;
1549 col_limit =
FFMIN(4, col_limit);
1550 else if (max_xy < 8)
1551 col_limit =
FFMIN(8, col_limit);
1552 else if (max_xy < 12)
1553 col_limit =
FFMIN(24, col_limit);
1554 s->
hevcdsp.
idct[log2_trafo_size-2](coeffs, col_limit);
1561 for (i = 0; i < (trafo_size * trafo_size); i++) {
1582 case 0: lc->
pu.
mvd.
x = 0;
break;
1588 case 0: lc->
pu.
mvd.
y = 0;
break;