30 #define CABAC_MAX_BIN 100
182 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
185 110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
190 111, 111, 125, 110, 110, 94, 124, 108, 124, 107, 125, 141, 179, 153,
191 125, 107, 125, 141, 179, 153, 125, 107, 125, 141, 179, 153, 125, 140,
192 139, 182, 182, 152, 136, 152, 136, 153, 136, 139, 111, 136, 139, 111,
194 140, 92, 137, 138, 140, 152, 138, 139, 153, 74, 149, 92, 139, 107,
195 122, 152, 140, 179, 166, 182, 140, 227, 122, 197,
197 138, 153, 136, 167, 152, 152, },
245 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
248 125, 110, 94, 110, 95, 79, 125, 111, 110, 78, 110, 111, 111, 95,
253 155, 154, 139, 153, 139, 123, 123, 63, 153, 166, 183, 140, 136, 153,
254 154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
255 153, 123, 123, 107, 121, 107, 121, 167, 151, 183, 140, 151, 183, 140,
257 154, 196, 196, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
258 136, 137, 169, 194, 166, 167, 154, 167, 137, 182,
260 107, 167, 91, 122, 107, 167, },
308 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
311 125, 110, 124, 110, 95, 94, 125, 111, 111, 79, 125, 126, 111, 111,
316 170, 154, 139, 153, 139, 123, 123, 63, 124, 166, 183, 140, 136, 153,
317 154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
318 153, 138, 138, 122, 121, 122, 121, 167, 151, 183, 140, 151, 183, 140,
320 154, 196, 167, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
321 136, 122, 169, 208, 166, 167, 154, 152, 167, 182,
323 107, 167, 91, 107, 107, 167, },
353 { 0, 1, 2, 3, 16, 17, 18, 19, },
354 { 4, 5, 6, 7, 20, 21, 22, 23, },
355 { 8, 9, 10, 11, 24, 25, 26, 27, },
356 { 12, 13, 14, 15, 28, 29, 30, 31, },
357 { 32, 33, 34, 35, 48, 49, 50, 51, },
358 { 36, 37, 38, 39, 52, 53, 54, 55, },
359 { 40, 41, 42, 43, 56, 57, 58, 59, },
360 { 44, 45, 46, 47, 60, 61, 62, 63, },
399 { 0, 2, 4, 6, 8, 10, 12, 14, },
400 { 1, 3, 5, 7, 9, 11, 13, 15, },
488 { 0, 2, 5, 9, 14, 20, 27, 35, },
489 { 1, 4, 8, 13, 19, 26, 34, 42, },
490 { 3, 7, 12, 18, 25, 33, 41, 48, },
491 { 6, 11, 17, 24, 32, 40, 47, 53, },
492 { 10, 16, 23, 31, 39, 46, 52, 57, },
493 { 15, 22, 30, 38, 45, 51, 56, 60, },
494 { 21, 29, 37, 44, 50, 55, 59, 62, },
495 { 28, 36, 43, 49, 54, 58, 61, 63, },
538 int m = (init_value >> 4) * 5 - 45;
539 int n = ((init_value & 15) << 3) - 16;
544 pre = 124 + (pre & 1);
593 #define GET_CABAC(ctx) get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
615 for (i = 0; i < 4; i++)
677 if (prefix_val >= 5) {
680 suffix_val += 1 << k;
689 return prefix_val + suffix_val;
704 int inc = 0, depth_left = 0, depth_top = 0;
715 inc += (depth_left > ct_depth);
716 inc += (depth_top > ct_depth);
730 if (log2_cb_size == 3)
781 for (i = 0; i < 4; i++)
815 if (nPbW + nPbH == 12)
826 int max = num_ref_idx_lx - 1;
827 int max_ctx =
FFMIN(max, 2);
900 #define LAST_SIG_COEFF(elem) \
902 int max = (log2_size << 1) - 1; \
903 int ctx_offset, ctx_shift; \
906 ctx_offset = 3 * (log2_size - 2) + ((log2_size - 1) >> 2); \
907 ctx_shift = (log2_size + 1) >> 2; \
910 ctx_shift = log2_size - 2; \
913 GET_CABAC(elem_offset[elem] + (i >> ctx_shift) + ctx_offset)) \
930 int last_significant_coeff_prefix)
933 int length = (last_significant_coeff_prefix >> 1) - 1;
936 for (i = 1; i <
length; i++)
945 inc =
FFMIN(ctx_cg, 1) + (c_idx>0 ? 2 : 0);
951 int log2_trafo_size,
int scan_idx,
int prev_sig)
953 static const uint8_t ctx_idx_map[] = {
954 0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8
961 if (x_c + y_c == 0) {
963 }
else if (log2_trafo_size == 2) {
964 sig_ctx = ctx_idx_map[(y_c << 2) + x_c];
970 sig_ctx = ((x_off + y_off) == 0) ? 2 : ((x_off + y_off) <= 2) ? 1 : 0;
974 sig_ctx = 2 -
FFMIN(y_c & 3, 2);
977 sig_ctx = 2 -
FFMIN(x_c & 3, 2);
983 if (c_idx == 0 && (x_cg > 0 || y_cg > 0))
986 if (log2_trafo_size == 3) {
987 sig_ctx += (scan_idx ==
SCAN_DIAG) ? 9 : 15;
989 sig_ctx += c_idx ? 12 : 21;
1022 int last_coeff_abs_level_remaining;
1030 for (i = 0; i < rc_rice_param; i++)
1032 last_coeff_abs_level_remaining = (prefix << rc_rice_param) + suffix;
1034 int prefix_minus3 = prefix - 3;
1035 for (i = 0; i < prefix_minus3 + rc_rice_param; i++)
1037 last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1)
1038 << rc_rice_param) + suffix;
1040 return last_coeff_abs_level_remaining;
1048 for (i = 0; i < nb; i++)
1054 int log2_trafo_size,
enum ScanType scan_idx,
1057 #define GET_COORD(offset, n) \
1059 x_c = (scan_x_cg[offset >> 4] << 2) + scan_x_off[n]; \
1060 y_c = (scan_y_cg[offset >> 4] << 2) + scan_y_off[n]; \
1063 int transform_skip_flag = 0;
1065 int last_significant_coeff_x, last_significant_coeff_y;
1069 int greater1_ctx = 1;
1071 int num_last_subset;
1072 int x_cg_last_sig, y_cg_last_sig;
1074 const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off;
1084 int trafo_size = 1 << log2_trafo_size;
1087 const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
1093 static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
1095 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
1096 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
1097 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
1101 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3,
1102 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
1103 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
1105 int qp_y = lc->
qp_y;
1123 qp = qp_c[qp_i - 30];
1129 add = 1 << (shift-1);
1130 scale = level_scale[rem6[qp]] << (div6[qp]);
1139 if (log2_trafo_size != 5)
1140 matrix_id = 3 * matrix_id + c_idx;
1142 scale_matrix = sl->
sl[log2_trafo_size - 2][matrix_id];
1143 if (log2_trafo_size >= 4)
1144 dc_scale = sl->
sl_dc[log2_trafo_size - 4][matrix_id];
1149 log2_trafo_size == 2) {
1153 last_significant_coeff_x =
1155 last_significant_coeff_y =
1158 if (last_significant_coeff_x > 3) {
1160 last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
1161 (2 + (last_significant_coeff_x & 1)) +
1165 if (last_significant_coeff_y > 3) {
1167 last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
1168 (2 + (last_significant_coeff_y & 1)) +
1173 FFSWAP(
int, last_significant_coeff_x, last_significant_coeff_y);
1175 x_cg_last_sig = last_significant_coeff_x >> 2;
1176 y_cg_last_sig = last_significant_coeff_y >> 2;
1180 int last_x_c = last_significant_coeff_x & 3;
1181 int last_y_c = last_significant_coeff_y & 3;
1186 if (trafo_size == 4) {
1189 }
else if (trafo_size == 8) {
1193 }
else if (trafo_size == 16) {
1209 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
1216 num_coeff =
horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
1220 num_last_subset = (num_coeff - 1) >> 4;
1222 for (i = num_last_subset; i >= 0; i--) {
1224 int x_cg, y_cg, x_c, y_c, pos;
1225 int implicit_non_zero_coeff = 0;
1226 int64_t trans_coeff_level;
1230 uint8_t significant_coeff_flag_idx[16];
1231 uint8_t nb_significant_coeff_flag = 0;
1233 x_cg = scan_x_cg[i];
1234 y_cg = scan_y_cg[i];
1236 if ((i < num_last_subset) && (i > 0)) {
1238 if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
1239 ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
1240 if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
1241 ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
1243 significant_coeff_group_flag[x_cg][y_cg] =
1245 implicit_non_zero_coeff = 1;
1247 significant_coeff_group_flag[x_cg][y_cg] =
1248 ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
1249 (x_cg == 0 && y_cg == 0));
1252 last_scan_pos = num_coeff - offset - 1;
1254 if (i == num_last_subset) {
1255 n_end = last_scan_pos - 1;
1256 significant_coeff_flag_idx[0] = last_scan_pos;
1257 nb_significant_coeff_flag = 1;
1262 if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
1263 prev_sig = significant_coeff_group_flag[x_cg + 1][y_cg];
1264 if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
1265 prev_sig += (significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
1267 for (n = n_end; n >= 0; n--) {
1270 if (significant_coeff_group_flag[x_cg][y_cg] &&
1271 (n > 0 || implicit_non_zero_coeff == 0)) {
1273 significant_coeff_flag_idx[nb_significant_coeff_flag] =
n;
1274 nb_significant_coeff_flag++;
1275 implicit_non_zero_coeff = 0;
1278 int last_cg = (x_c == (x_cg << 2) && y_c == (y_cg << 2));
1279 if (last_cg && implicit_non_zero_coeff && significant_coeff_group_flag[x_cg][y_cg]) {
1280 significant_coeff_flag_idx[nb_significant_coeff_flag] =
n;
1281 nb_significant_coeff_flag++;
1286 n_end = nb_significant_coeff_flag;
1290 int first_nz_pos_in_cg = 16;
1291 int last_nz_pos_in_cg = -1;
1292 int c_rice_param = 0;
1293 int first_greater1_coeff_idx = -1;
1294 uint8_t coeff_abs_level_greater1_flag[16] = {0};
1295 uint16_t coeff_sign_flag;
1297 int sign_hidden = 0;
1300 int ctx_set = (i > 0 && c_idx == 0) ? 2 : 0;
1302 if (!(i == num_last_subset) && greater1_ctx == 0)
1305 last_nz_pos_in_cg = significant_coeff_flag_idx[0];
1307 for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
1308 int n_idx = significant_coeff_flag_idx[
m];
1309 int inc = (ctx_set << 2) + greater1_ctx;
1310 coeff_abs_level_greater1_flag[n_idx] =
1312 if (coeff_abs_level_greater1_flag[n_idx]) {
1314 }
else if (greater1_ctx > 0 && greater1_ctx < 3) {
1318 if (coeff_abs_level_greater1_flag[n_idx] &&
1319 first_greater1_coeff_idx == -1)
1320 first_greater1_coeff_idx = n_idx;
1322 first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
1323 sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4 &&
1326 if (first_greater1_coeff_idx != -1) {
1330 coeff_sign_flag =
coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
1332 coeff_sign_flag =
coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
1335 for (m = 0; m < n_end; m++) {
1336 n = significant_coeff_flag_idx[
m];
1338 trans_coeff_level = 1 + coeff_abs_level_greater1_flag[
n];
1339 if (trans_coeff_level == ((m < 8) ?
1340 ((n == first_greater1_coeff_idx) ? 3 : 2) : 1)) {
1343 trans_coeff_level += last_coeff_abs_level_remaining;
1344 if (trans_coeff_level > (3 << c_rice_param))
1345 c_rice_param =
FFMIN(c_rice_param + 1, 4);
1349 sum_abs += trans_coeff_level;
1350 if (n == first_nz_pos_in_cg && (sum_abs&1))
1351 trans_coeff_level = -trans_coeff_level;
1353 if (coeff_sign_flag >> 15)
1354 trans_coeff_level = -trans_coeff_level;
1355 coeff_sign_flag <<= 1;
1358 if(y_c || x_c || log2_trafo_size < 4) {
1359 switch(log2_trafo_size) {
1360 case 3: pos = (y_c << 3) + x_c;
break;
1361 case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1);
break;
1362 case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2);
break;
1363 default: pos = (y_c << 2) + x_c;
1365 scale_m = scale_matrix[pos];
1370 trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >> shift;
1371 if(trans_coeff_level < 0) {
1372 if((~trans_coeff_level) & 0xFffffffffff8000)
1373 trans_coeff_level = -32768;
1375 if(trans_coeff_level & 0xffffffffffff8000)
1376 trans_coeff_level = 32767;
1379 coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
1387 if (transform_skip_flag)
1410 case 0: lc->
pu.
mvd.
x = 0;
break;
1416 case 0: lc->
pu.
mvd.
y = 0;
break;