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 };
 
 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;