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);
945 int log2_size,
int *last_scx_prefix,
int *last_scy_prefix)
948 int max = (log2_size << 1) - 1;
949 int ctx_offset, ctx_shift;
952 ctx_offset = 3 * (log2_size - 2) + ((log2_size - 1) >> 2);
953 ctx_shift = (log2_size + 1) >> 2;
956 ctx_shift = log2_size - 2;
961 *last_scx_prefix = i;
967 *last_scy_prefix = i;
971 int last_significant_coeff_prefix)
974 int length = (last_significant_coeff_prefix >> 1) - 1;
977 for (i = 1; i <
length; i++)
986 inc =
FFMIN(ctx_cg, 1) + (c_idx>0 ? 2 : 0);
993 int inc = ctx_idx_map[(y_c << 2) + x_c] + offset;
1023 int last_coeff_abs_level_remaining;
1031 for (i = 0; i < rc_rice_param; i++)
1033 last_coeff_abs_level_remaining = (prefix << rc_rice_param) + suffix;
1035 int prefix_minus3 = prefix - 3;
1036 for (i = 0; i < prefix_minus3 + rc_rice_param; i++)
1038 last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1)
1039 << rc_rice_param) + suffix;
1041 return last_coeff_abs_level_remaining;
1049 for (i = 0; i < nb; i++)
1055 int log2_trafo_size,
enum ScanType scan_idx,
1058 #define GET_COORD(offset, n) \
1060 x_c = (x_cg << 2) + scan_x_off[n]; \
1061 y_c = (y_cg << 2) + scan_y_off[n]; \
1064 int transform_skip_flag = 0;
1066 int last_significant_coeff_x, last_significant_coeff_y;
1070 int greater1_ctx = 1;
1072 int num_last_subset;
1073 int x_cg_last_sig, y_cg_last_sig;
1075 const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off;
1083 uint8_t significant_coeff_group_flag[8][8] = {{0}};
1084 int explicit_rdpcm_flag = 0;
1085 int explicit_rdpcm_dir_flag;
1087 int trafo_size = 1 << log2_trafo_size;
1089 int qp,
shift,add,scale,scale_m;
1090 const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
1091 const uint8_t *scale_matrix = NULL;
1096 memset(coeffs, 0, trafo_size * trafo_size *
sizeof(int16_t));
1100 static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
1102 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
1103 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
1104 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
1105 4, 5, 0, 1, 2, 3, 4, 5, 0, 1
1109 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
1110 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
1111 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
1112 10, 10, 11, 11, 11, 11, 11, 11, 12, 12
1114 int qp_y = lc->
qp_y;
1117 log2_trafo_size <= s->pps->log2_max_transform_skip_block_size) {
1140 qp = qp_c[qp_i - 30];
1152 add = 1 << (shift-1);
1153 scale = level_scale[rem6[qp]] << (div6[qp]);
1162 matrix_id = 3 * matrix_id + c_idx;
1164 scale_matrix = sl->
sl[log2_trafo_size - 2][matrix_id];
1165 if (log2_trafo_size >= 4)
1166 dc_scale = sl->
sl_dc[log2_trafo_size - 4][matrix_id];
1178 if (explicit_rdpcm_flag) {
1184 &last_significant_coeff_x, &last_significant_coeff_y);
1186 if (last_significant_coeff_x > 3) {
1188 last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
1189 (2 + (last_significant_coeff_x & 1)) +
1193 if (last_significant_coeff_y > 3) {
1195 last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
1196 (2 + (last_significant_coeff_y & 1)) +
1201 FFSWAP(
int, last_significant_coeff_x, last_significant_coeff_y);
1203 x_cg_last_sig = last_significant_coeff_x >> 2;
1204 y_cg_last_sig = last_significant_coeff_y >> 2;
1208 int last_x_c = last_significant_coeff_x & 3;
1209 int last_y_c = last_significant_coeff_y & 3;
1214 if (trafo_size == 4) {
1217 }
else if (trafo_size == 8) {
1221 }
else if (trafo_size == 16) {
1237 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
1244 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
1248 num_last_subset = (num_coeff - 1) >> 4;
1250 for (i = num_last_subset; i >= 0; i--) {
1252 int x_cg, y_cg, x_c, y_c, pos;
1253 int implicit_non_zero_coeff = 0;
1254 int64_t trans_coeff_level;
1259 uint8_t significant_coeff_flag_idx[16];
1260 uint8_t nb_significant_coeff_flag = 0;
1262 x_cg = scan_x_cg[i];
1263 y_cg = scan_y_cg[i];
1265 if ((i < num_last_subset) && (i > 0)) {
1267 if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
1268 ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
1269 if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
1270 ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
1272 significant_coeff_group_flag[x_cg][y_cg] =
1274 implicit_non_zero_coeff = 1;
1276 significant_coeff_group_flag[x_cg][y_cg] =
1277 ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
1278 (x_cg == 0 && y_cg == 0));
1281 last_scan_pos = num_coeff - offset - 1;
1283 if (i == num_last_subset) {
1284 n_end = last_scan_pos - 1;
1285 significant_coeff_flag_idx[0] = last_scan_pos;
1286 nb_significant_coeff_flag = 1;
1291 if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
1292 prev_sig = !!significant_coeff_group_flag[x_cg + 1][y_cg];
1293 if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
1294 prev_sig += (!!significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
1296 if (significant_coeff_group_flag[x_cg][y_cg] && n_end >= 0) {
1297 static const uint8_t ctx_idx_map[] = {
1298 0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8,
1299 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1300 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1301 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0,
1302 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1308 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[4 * 16];
1312 scf_offset = 14 + 27;
1317 if (log2_trafo_size == 2) {
1318 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[0];
1320 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[(prev_sig + 1) << 4];
1322 if ((x_cg > 0 || y_cg > 0))
1324 if (log2_trafo_size == 3) {
1325 scf_offset += (scan_idx ==
SCAN_DIAG) ? 9 : 15;
1330 if (log2_trafo_size == 3)
1337 for (n = n_end; n > 0; n--) {
1338 x_c = scan_x_off[
n];
1339 y_c = scan_y_off[
n];
1341 significant_coeff_flag_idx[nb_significant_coeff_flag] =
n;
1342 nb_significant_coeff_flag++;
1343 implicit_non_zero_coeff = 0;
1346 if (implicit_non_zero_coeff == 0) {
1352 scf_offset = 16 + 27;
1361 scf_offset = 2 + scf_offset;
1365 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1366 nb_significant_coeff_flag++;
1369 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1370 nb_significant_coeff_flag++;
1374 n_end = nb_significant_coeff_flag;
1378 int first_nz_pos_in_cg;
1379 int last_nz_pos_in_cg;
1380 int c_rice_param = 0;
1381 int first_greater1_coeff_idx = -1;
1382 uint8_t coeff_abs_level_greater1_flag[8];
1383 uint16_t coeff_sign_flag;
1390 int ctx_set = (i > 0 && c_idx == 0) ? 2 : 0;
1394 sb_type = 2 * (c_idx == 0 ? 1 : 0);
1396 sb_type = 2 * (c_idx == 0 ? 1 : 0) + 1;
1400 if (!(i == num_last_subset) && greater1_ctx == 0)
1403 last_nz_pos_in_cg = significant_coeff_flag_idx[0];
1405 for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
1406 int inc = (ctx_set << 2) + greater1_ctx;
1407 coeff_abs_level_greater1_flag[
m] =
1409 if (coeff_abs_level_greater1_flag[m]) {
1411 if (first_greater1_coeff_idx == -1)
1412 first_greater1_coeff_idx =
m;
1413 }
else if (greater1_ctx > 0 && greater1_ctx < 3) {
1417 first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
1422 (pred_mode_intra == 10 || pred_mode_intra == 26 )) ||
1423 explicit_rdpcm_flag)
1426 sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4);
1428 if (first_greater1_coeff_idx != -1) {
1432 coeff_sign_flag =
coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
1434 coeff_sign_flag =
coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
1437 for (m = 0; m < n_end; m++) {
1438 n = significant_coeff_flag_idx[
m];
1441 trans_coeff_level = 1 + coeff_abs_level_greater1_flag[
m];
1442 if (trans_coeff_level == ((m == first_greater1_coeff_idx) ? 3 : 2)) {
1445 trans_coeff_level += last_coeff_abs_level_remaining;
1446 if (trans_coeff_level > (3 << c_rice_param))
1449 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1450 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1452 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1461 trans_coeff_level = 1 + last_coeff_abs_level_remaining;
1462 if (trans_coeff_level > (3 << c_rice_param))
1465 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1466 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1468 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1475 sum_abs += trans_coeff_level;
1476 if (n == first_nz_pos_in_cg && (sum_abs&1))
1477 trans_coeff_level = -trans_coeff_level;
1479 if (coeff_sign_flag >> 15)
1480 trans_coeff_level = -trans_coeff_level;
1481 coeff_sign_flag <<= 1;
1484 if(y_c || x_c || log2_trafo_size < 4) {
1485 switch(log2_trafo_size) {
1486 case 3: pos = (y_c << 3) + x_c;
break;
1487 case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1);
break;
1488 case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2);
break;
1489 default: pos = (y_c << 2) + x_c;
break;
1491 scale_m = scale_matrix[pos];
1496 trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >> shift;
1497 if(trans_coeff_level < 0) {
1498 if((~trans_coeff_level) & 0xFffffffffff8000)
1499 trans_coeff_level = -32768;
1501 if(trans_coeff_level & 0xffffffffffff8000)
1502 trans_coeff_level = 32767;
1505 coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
1512 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1518 if (transform_skip_flag) {
1520 log2_trafo_size == 2 &&
1523 for (i = 0; i < 8; i++)
1524 FFSWAP(int16_t, coeffs[i], coeffs[16 - i - 1]);
1531 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1532 int mode = explicit_rdpcm_flag ? explicit_rdpcm_dir_flag : (pred_mode_intra == 26);
1539 int max_xy =
FFMAX(last_significant_coeff_x, last_significant_coeff_y);
1543 int col_limit = last_significant_coeff_x + last_significant_coeff_y + 4;
1545 col_limit =
FFMIN(4, col_limit);
1546 else if (max_xy < 8)
1547 col_limit =
FFMIN(8, col_limit);
1548 else if (max_xy < 12)
1549 col_limit =
FFMIN(24, col_limit);
1550 s->
hevcdsp.
idct[log2_trafo_size-2](coeffs, col_limit);
1557 for (i = 0; i < (trafo_size * trafo_size); i++) {
1578 case 0: lc->
pu.
mvd.
x = 0;
break;
1584 case 0: lc->
pu.
mvd.
y = 0;
break;