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;
1082 int16_t *coeffs = lc->
tu.
coeffs[c_idx > 0];
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;
1135 qp = qp_c[qp_i - 30];
1147 add = 1 << (shift-1);
1148 scale = level_scale[rem6[qp]] << (div6[qp]);
1157 if (log2_trafo_size != 5)
1158 matrix_id = 3 * matrix_id + c_idx;
1160 scale_matrix = sl->
sl[log2_trafo_size - 2][matrix_id];
1161 if (log2_trafo_size >= 4)
1162 dc_scale = sl->
sl_dc[log2_trafo_size - 4][matrix_id];
1172 log2_trafo_size <= s->pps->log2_max_transform_skip_block_size) {
1179 if (explicit_rdpcm_flag) {
1185 &last_significant_coeff_x, &last_significant_coeff_y);
1187 if (last_significant_coeff_x > 3) {
1189 last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
1190 (2 + (last_significant_coeff_x & 1)) +
1194 if (last_significant_coeff_y > 3) {
1196 last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
1197 (2 + (last_significant_coeff_y & 1)) +
1202 FFSWAP(
int, last_significant_coeff_x, last_significant_coeff_y);
1204 x_cg_last_sig = last_significant_coeff_x >> 2;
1205 y_cg_last_sig = last_significant_coeff_y >> 2;
1209 int last_x_c = last_significant_coeff_x & 3;
1210 int last_y_c = last_significant_coeff_y & 3;
1215 if (trafo_size == 4) {
1218 }
else if (trafo_size == 8) {
1222 }
else if (trafo_size == 16) {
1238 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
1245 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
1249 num_last_subset = (num_coeff - 1) >> 4;
1251 for (i = num_last_subset; i >= 0; i--) {
1253 int x_cg, y_cg, x_c, y_c, pos;
1254 int implicit_non_zero_coeff = 0;
1255 int64_t trans_coeff_level;
1260 uint8_t significant_coeff_flag_idx[16];
1261 uint8_t nb_significant_coeff_flag = 0;
1263 x_cg = scan_x_cg[i];
1264 y_cg = scan_y_cg[i];
1266 if ((i < num_last_subset) && (i > 0)) {
1268 if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
1269 ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
1270 if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
1271 ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
1273 significant_coeff_group_flag[x_cg][y_cg] =
1275 implicit_non_zero_coeff = 1;
1277 significant_coeff_group_flag[x_cg][y_cg] =
1278 ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
1279 (x_cg == 0 && y_cg == 0));
1282 last_scan_pos = num_coeff - offset - 1;
1284 if (i == num_last_subset) {
1285 n_end = last_scan_pos - 1;
1286 significant_coeff_flag_idx[0] = last_scan_pos;
1287 nb_significant_coeff_flag = 1;
1292 if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
1293 prev_sig = !!significant_coeff_group_flag[x_cg + 1][y_cg];
1294 if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
1295 prev_sig += (!!significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
1297 if (significant_coeff_group_flag[x_cg][y_cg] && n_end >= 0) {
1298 static const uint8_t ctx_idx_map[] = {
1299 0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8,
1300 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
1301 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1302 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0,
1303 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1309 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[4 * 16];
1313 scf_offset = 14 + 27;
1318 if (log2_trafo_size == 2) {
1319 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[0];
1321 ctx_idx_map_p = (
uint8_t*) &ctx_idx_map[(prev_sig + 1) << 4];
1323 if ((x_cg > 0 || y_cg > 0))
1325 if (log2_trafo_size == 3) {
1326 scf_offset += (scan_idx ==
SCAN_DIAG) ? 9 : 15;
1331 if (log2_trafo_size == 3)
1338 for (n = n_end; n > 0; n--) {
1339 x_c = scan_x_off[
n];
1340 y_c = scan_y_off[
n];
1342 significant_coeff_flag_idx[nb_significant_coeff_flag] =
n;
1343 nb_significant_coeff_flag++;
1344 implicit_non_zero_coeff = 0;
1347 if (implicit_non_zero_coeff == 0) {
1353 scf_offset = 16 + 27;
1362 scf_offset = 2 + scf_offset;
1366 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1367 nb_significant_coeff_flag++;
1370 significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
1371 nb_significant_coeff_flag++;
1375 n_end = nb_significant_coeff_flag;
1379 int first_nz_pos_in_cg;
1380 int last_nz_pos_in_cg;
1381 int c_rice_param = 0;
1382 int first_greater1_coeff_idx = -1;
1383 uint8_t coeff_abs_level_greater1_flag[8];
1384 uint16_t coeff_sign_flag;
1391 int ctx_set = (i > 0 && c_idx == 0) ? 2 : 0;
1395 sb_type = 2 * (c_idx == 0 ? 1 : 0);
1397 sb_type = 2 * (c_idx == 0 ? 1 : 0) + 1;
1401 if (!(i == num_last_subset) && greater1_ctx == 0)
1404 last_nz_pos_in_cg = significant_coeff_flag_idx[0];
1406 for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
1407 int inc = (ctx_set << 2) + greater1_ctx;
1408 coeff_abs_level_greater1_flag[
m] =
1410 if (coeff_abs_level_greater1_flag[m]) {
1412 if (first_greater1_coeff_idx == -1)
1413 first_greater1_coeff_idx =
m;
1414 }
else if (greater1_ctx > 0 && greater1_ctx < 3) {
1418 first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
1423 (pred_mode_intra == 10 || pred_mode_intra == 26 )) ||
1424 explicit_rdpcm_flag)
1427 sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4);
1429 if (first_greater1_coeff_idx != -1) {
1433 coeff_sign_flag =
coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
1435 coeff_sign_flag =
coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
1438 for (m = 0; m < n_end; m++) {
1439 n = significant_coeff_flag_idx[
m];
1442 trans_coeff_level = 1 + coeff_abs_level_greater1_flag[
m];
1443 if (trans_coeff_level == ((m == first_greater1_coeff_idx) ? 3 : 2)) {
1446 trans_coeff_level += last_coeff_abs_level_remaining;
1447 if (trans_coeff_level > (3 << c_rice_param))
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))
1462 trans_coeff_level = 1 + last_coeff_abs_level_remaining;
1463 if (trans_coeff_level > (3 << c_rice_param))
1466 int c_rice_p_init = lc->
stat_coeff[sb_type] / 4;
1467 if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
1469 else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
1476 sum_abs += trans_coeff_level;
1477 if (n == first_nz_pos_in_cg && (sum_abs&1))
1478 trans_coeff_level = -trans_coeff_level;
1480 if (coeff_sign_flag >> 15)
1481 trans_coeff_level = -trans_coeff_level;
1482 coeff_sign_flag <<= 1;
1485 if(y_c || x_c || log2_trafo_size < 4) {
1486 switch(log2_trafo_size) {
1487 case 3: pos = (y_c << 3) + x_c;
break;
1488 case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1);
break;
1489 case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2);
break;
1490 default: pos = (y_c << 2) + x_c;
break;
1492 scale_m = scale_matrix[pos];
1497 trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >> shift;
1498 if(trans_coeff_level < 0) {
1499 if((~trans_coeff_level) & 0xFffffffffff8000)
1500 trans_coeff_level = -32768;
1502 if(trans_coeff_level & 0xffffffffffff8000)
1503 trans_coeff_level = 32767;
1506 coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
1513 (pred_mode_intra == 10 || pred_mode_intra == 26))) {
1519 if (transform_skip_flag) {
1523 for (i = 0; i < (trafo_size * trafo_size >> 1); i++)
1524 FFSWAP(int16_t, coeffs[i], coeffs[trafo_size * trafo_size - i - 1]);
1531 (pred_mode_intra == 10 || 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);
1555 int16_t *coeffs_y = lc->
tu.
coeffs[0];
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;