30 #define CABAC_MAX_BIN 100 
  183         110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
 
  186         110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
 
  191         111, 111, 125, 110, 110,  94, 124, 108, 124, 107, 125, 141, 179, 153,
 
  192         125, 107, 125, 141, 179, 153, 125, 107, 125, 141, 179, 153, 125, 140,
 
  193         139, 182, 182, 152, 136, 152, 136, 153, 136, 139, 111, 136, 139, 111,
 
  195         140,  92, 137, 138, 140, 152, 138, 139, 153,  74, 149,  92, 139, 107,
 
  196         122, 152, 140, 179, 166, 182, 140, 227, 122, 197,
 
  198         138, 153, 136, 167, 152, 152,
 
  248         125, 110,  94, 110,  95,  79, 125, 111, 110,  78, 110, 111, 111,  95,
 
  251         125, 110,  94, 110,  95,  79, 125, 111, 110,  78, 110, 111, 111,  95,
 
  256         155, 154, 139, 153, 139, 123, 123,  63, 153, 166, 183, 140, 136, 153,
 
  257         154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
 
  258         153, 123, 123, 107, 121, 107, 121, 167, 151, 183, 140, 151, 183, 140,
 
  260         154, 196, 196, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
 
  261         136, 137, 169, 194, 166, 167, 154, 167, 137, 182,
 
  263         107, 167, 91, 122, 107, 167,
 
  313         125, 110, 124, 110,  95,  94, 125, 111, 111,  79, 125, 126, 111, 111,
 
  316         125, 110, 124, 110,  95,  94, 125, 111, 111,  79, 125, 126, 111, 111,
 
  321         170, 154, 139, 153, 139, 123, 123,  63, 124, 166, 183, 140, 136, 153,
 
  322         154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
 
  323         153, 138, 138, 122, 121, 122, 121, 167, 151, 183, 140, 151, 183, 140,
 
  325         154, 196, 167, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
 
  326         136, 122, 169, 208, 166, 167, 154, 152, 167, 182,
 
  328         107, 167, 91, 107, 107, 167,
 
  359     {  0,  1,  2,  3, 16, 17, 18, 19, },
 
  360     {  4,  5,  6,  7, 20, 21, 22, 23, },
 
  361     {  8,  9, 10, 11, 24, 25, 26, 27, },
 
  362     { 12, 13, 14, 15, 28, 29, 30, 31, },
 
  363     { 32, 33, 34, 35, 48, 49, 50, 51, },
 
  364     { 36, 37, 38, 39, 52, 53, 54, 55, },
 
  365     { 40, 41, 42, 43, 56, 57, 58, 59, },
 
  366     { 44, 45, 46, 47, 60, 61, 62, 63, },
 
  405     { 0, 2, 4, 6, 8, 10, 12, 14, },
 
  406     { 1, 3, 5, 7, 9, 11, 13, 15, },
 
  494     {  0,  2,  5,  9, 14, 20, 27, 35, },
 
  495     {  1,  4,  8, 13, 19, 26, 34, 42, },
 
  496     {  3,  7, 12, 18, 25, 33, 41, 48, },
 
  497     {  6, 11, 17, 24, 32, 40, 47, 53, },
 
  498     { 10, 16, 23, 31, 39, 46, 52, 57, },
 
  499     { 15, 22, 30, 38, 45, 51, 56, 60, },
 
  500     { 21, 29, 37, 44, 50, 55, 59, 62, },
 
  501     { 28, 36, 43, 49, 54, 58, 61, 63, },
 
  544         int m = (init_value >> 4) * 5 - 45;
 
  545         int n = ((init_value & 15) << 3) - 16;
 
  550             pre = 124 + (pre & 1);
 
  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;
 
  709     int inc = 0, depth_left = 0, depth_top = 0;
 
  720     inc += (depth_left > ct_depth);
 
  721     inc += (depth_top > ct_depth);
 
  734         if (log2_cb_size == 3) 
 
  785     for (i = 0; i < 4; i++)
 
  819     if (nPbW + nPbH == 12)
 
  830     int max = num_ref_idx_lx - 1;
 
  831     int max_ctx = 
FFMIN(max, 2);
 
  904 #define LAST_SIG_COEFF(elem)                                                    \ 
  906     int max = (log2_size << 1) - 1;                                             \ 
  907     int ctx_offset, ctx_shift;                                                  \ 
  910         ctx_offset = 3 * (log2_size - 2)  + ((log2_size - 1) >> 2);             \ 
  911         ctx_shift = (log2_size + 1) >> 2;                                       \ 
  914         ctx_shift = log2_size - 2;                                              \ 
  917            GET_CABAC(elem_offset[elem] + (i >> ctx_shift) + ctx_offset))        \ 
  934                                                  int last_significant_coeff_prefix)
 
  937     int length = (last_significant_coeff_prefix >> 1) - 1;
 
  940     for (i = 1; i < 
length; i++)
 
  949     inc = 
FFMIN(ctx_cg, 1) + (c_idx>0 ? 2 : 0);
 
  955                                           int log2_trafo_size, 
int scan_idx, 
int prev_sig)
 
  957     static const uint8_t ctx_idx_map[] = {
 
  958         0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8
 
  965     if (x_c + y_c == 0) {
 
  967     } 
else if (log2_trafo_size == 2) {
 
  968         sig_ctx = ctx_idx_map[(y_c << 2) + x_c];
 
  974                 sig_ctx   = ((x_off + y_off) == 0) ? 2 : ((x_off + y_off) <= 2) ? 1 : 0;
 
  978             sig_ctx = 2 - 
FFMIN(y_c & 3, 2);
 
  981             sig_ctx = 2 - 
FFMIN(x_c & 3, 2);
 
  987         if (c_idx == 0 && (x_cg > 0 || y_cg > 0))
 
  990         if (log2_trafo_size == 3) {
 
  991             sig_ctx += (scan_idx == 
SCAN_DIAG) ? 9 : 15;
 
  993             sig_ctx += c_idx ? 12 : 21;
 
 1027     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 = (scan_x_cg[offset >> 4] << 2) + scan_x_off[n];    \ 
 1065         y_c = (scan_y_cg[offset >> 4] << 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;
 
 1089     int trafo_size = 1 << log2_trafo_size;
 
 1092     const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
 
 1098         static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
 
 1100             0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
 
 1101             3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
 
 1102             0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
 
 1106             0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3,  3,  3,
 
 1107             3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6,  6,  6,
 
 1108             7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
 
 1110         int qp_y = lc->
qp_y;
 
 1128                 qp = qp_c[qp_i - 30];
 
 1134         add      = 1 << (shift-1);
 
 1135         scale    = level_scale[rem6[qp]] << (div6[qp]);
 
 1144             if (log2_trafo_size != 5)
 
 1145                 matrix_id = 3 * matrix_id + c_idx;
 
 1147             scale_matrix = sl->
sl[log2_trafo_size - 2][matrix_id];
 
 1148             if (log2_trafo_size >= 4)
 
 1149                 dc_scale = sl->
sl_dc[log2_trafo_size - 4][matrix_id];
 
 1154         log2_trafo_size == 2) {
 
 1158     last_significant_coeff_x =
 
 1160     last_significant_coeff_y =
 
 1163     if (last_significant_coeff_x > 3) {
 
 1165         last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
 
 1166         (2 + (last_significant_coeff_x & 1)) +
 
 1170     if (last_significant_coeff_y > 3) {
 
 1172         last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
 
 1173         (2 + (last_significant_coeff_y & 1)) +
 
 1178         FFSWAP(
int, last_significant_coeff_x, last_significant_coeff_y);
 
 1180     x_cg_last_sig = last_significant_coeff_x >> 2;
 
 1181     y_cg_last_sig = last_significant_coeff_y >> 2;
 
 1185         int last_x_c = last_significant_coeff_x & 3;
 
 1186         int last_y_c = last_significant_coeff_y & 3;
 
 1191         if (trafo_size == 4) {
 
 1194         } 
else if (trafo_size == 8) {
 
 1198         } 
else if (trafo_size == 16) {
 
 1214         num_coeff = 
horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
 
 1221         num_coeff = 
horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
 
 1225     num_last_subset = (num_coeff - 1) >> 4;
 
 1227     for (i = num_last_subset; i >= 0; i--) {
 
 1229         int x_cg, y_cg, x_c, y_c, pos;
 
 1230         int implicit_non_zero_coeff = 0;
 
 1231         int64_t trans_coeff_level;
 
 1235         uint8_t significant_coeff_flag_idx[16];
 
 1236         uint8_t nb_significant_coeff_flag = 0;
 
 1238         x_cg = scan_x_cg[i];
 
 1239         y_cg = scan_y_cg[i];
 
 1241         if ((i < num_last_subset) && (i > 0)) {
 
 1243             if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
 
 1244                 ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
 
 1245             if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
 
 1246                 ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
 
 1248             significant_coeff_group_flag[x_cg][y_cg] =
 
 1250             implicit_non_zero_coeff = 1;
 
 1252             significant_coeff_group_flag[x_cg][y_cg] =
 
 1253             ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
 
 1254              (x_cg == 0 && y_cg == 0));
 
 1257         last_scan_pos = num_coeff - offset - 1;
 
 1259         if (i == num_last_subset) {
 
 1260             n_end = last_scan_pos - 1;
 
 1261             significant_coeff_flag_idx[0] = last_scan_pos;
 
 1262             nb_significant_coeff_flag = 1;
 
 1267         if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
 
 1268             prev_sig = significant_coeff_group_flag[x_cg + 1][y_cg];
 
 1269         if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
 
 1270             prev_sig += (significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
 
 1272         for (n = n_end; n >= 0; n--) {
 
 1275             if (significant_coeff_group_flag[x_cg][y_cg] &&
 
 1276                 (n > 0 || implicit_non_zero_coeff == 0)) {
 
 1278                     significant_coeff_flag_idx[nb_significant_coeff_flag] = 
n;
 
 1279                     nb_significant_coeff_flag++;
 
 1280                     implicit_non_zero_coeff = 0;
 
 1283                 int last_cg = (x_c == (x_cg << 2) && y_c == (y_cg << 2));
 
 1284                 if (last_cg && implicit_non_zero_coeff && significant_coeff_group_flag[x_cg][y_cg]) {
 
 1285                     significant_coeff_flag_idx[nb_significant_coeff_flag] = 
n;
 
 1286                     nb_significant_coeff_flag++;
 
 1291         n_end = nb_significant_coeff_flag;
 
 1295             int first_nz_pos_in_cg = 16;
 
 1296             int last_nz_pos_in_cg = -1;
 
 1297             int c_rice_param = 0;
 
 1298             int first_greater1_coeff_idx = -1;
 
 1299             uint8_t coeff_abs_level_greater1_flag[16] = {0};
 
 1300             uint16_t coeff_sign_flag;
 
 1302             int sign_hidden = 0;
 
 1305             int ctx_set = (i > 0 && c_idx == 0) ? 2 : 0;
 
 1307             if (!(i == num_last_subset) && greater1_ctx == 0)
 
 1310             last_nz_pos_in_cg = significant_coeff_flag_idx[0];
 
 1312             for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
 
 1313                 int n_idx = significant_coeff_flag_idx[
m];
 
 1314                 int inc = (ctx_set << 2) + greater1_ctx;
 
 1315                 coeff_abs_level_greater1_flag[n_idx] =
 
 1317                 if (coeff_abs_level_greater1_flag[n_idx]) {
 
 1319                 } 
else if (greater1_ctx > 0 && greater1_ctx < 3) {
 
 1323                 if (coeff_abs_level_greater1_flag[n_idx] &&
 
 1324                     first_greater1_coeff_idx == -1)
 
 1325                     first_greater1_coeff_idx = n_idx;
 
 1327             first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
 
 1328             sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4 &&
 
 1331             if (first_greater1_coeff_idx != -1) {
 
 1335                 coeff_sign_flag = 
coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
 
 1337                 coeff_sign_flag = 
coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
 
 1340             for (m = 0; m < n_end; m++) {
 
 1341                 n = significant_coeff_flag_idx[
m];
 
 1343                 trans_coeff_level = 1 + coeff_abs_level_greater1_flag[
n];
 
 1344                 if (trans_coeff_level == ((m < 8) ?
 
 1345                                           ((n == first_greater1_coeff_idx) ? 3 : 2) : 1)) {
 
 1348                     trans_coeff_level += last_coeff_abs_level_remaining;
 
 1349                     if (trans_coeff_level > (3 << c_rice_param))
 
 1350                         c_rice_param = 
FFMIN(c_rice_param + 1, 4);
 
 1354                     sum_abs += trans_coeff_level;
 
 1355                     if (n == first_nz_pos_in_cg && (sum_abs&1))
 
 1356                         trans_coeff_level = -trans_coeff_level;
 
 1358                 if (coeff_sign_flag >> 15)
 
 1359                     trans_coeff_level = -trans_coeff_level;
 
 1360                 coeff_sign_flag <<= 1;
 
 1363                         if(y_c || x_c || log2_trafo_size < 4) {
 
 1364                             switch(log2_trafo_size) {
 
 1365                                 case 3: pos = (y_c << 3) + x_c; 
break;
 
 1366                                 case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1); 
break;
 
 1367                                 case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2); 
break;
 
 1368                                 default: pos = (y_c << 2) + x_c;
 
 1370                             scale_m = scale_matrix[pos];
 
 1375                     trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >> shift;
 
 1376                     if(trans_coeff_level < 0) {
 
 1377                         if((~trans_coeff_level) & 0xFffffffffff8000)
 
 1378                             trans_coeff_level = -32768;
 
 1380                         if(trans_coeff_level & 0xffffffffffff8000)
 
 1381                             trans_coeff_level = 32767;
 
 1384                 coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
 
 1392         if (transform_skip_flag)
 
 1415     case 0: lc->
pu.
mvd.
x = 0;                       
break;
 
 1421     case 0: lc->
pu.
mvd.
y = 0;                       
break;