31 #define CABAC_MAX_BIN 31
119 62, 39, 39, 54, 39, 39, 31, 39, 39,
133 19, 28, 38, 27, 29, 38, 20, 30, 31,
135 27, 6, 15, 25, 19, 37,
217 50, 37, 45, 30, 46, 45, 38, 46,
255 13, 5, 4, 21, 14, 4, 6, 14, 21, 11, 14, 7, 14, 5, 11, 21,
256 30, 22, 13, 42, 12, 4, 3,
258 13, 5, 4, 6, 13, 11, 14, 6, 5, 3, 14, 22, 6, 4, 3, 6,
259 22, 29, 20, 34, 12, 4, 3,
261 18, 31, 25, 15, 18, 20, 38,
263 25, 19, 28, 14, 25, 20, 29, 30, 19, 37, 30, 38, 11, 38, 46, 54,
264 27, 39, 39, 39, 44, 39, 39, 39, 18, 39, 39, 39, 27, 39, 39, 39,
265 0, 39, 39, 39, 25, 27, 28, 37, 34, 53, 53, 46, 19, 46, 38, 39,
266 52, 39, 39, 39, 11, 39, 39, 39, 19, 39, 39, 39, 25, 28, 38,
268 33, 25, 18, 26, 34, 27, 25, 26, 19, 42, 35, 33, 19, 27, 35, 35,
269 34, 42, 20, 43, 20, 33, 25, 26, 42, 19, 27, 26, 50, 35, 20, 43,
272 25, 25, 11, 27, 20, 21, 33, 12, 28, 21, 22, 34, 28, 29, 29, 30,
273 36, 29, 45, 30, 23, 40, 33, 27, 28, 21, 37, 36, 37, 45, 38, 46,
274 25, 1, 40, 25, 33, 11, 17, 25, 25, 18, 4, 17, 33, 26, 19, 13,
275 33, 19, 20, 28, 22, 40, 9, 25, 18, 26, 35, 25, 26, 35, 28, 37,
276 11, 5, 5, 14, 10, 3, 3, 3,
278 12, 17, 46, 28, 25, 46,
282 13, 23, 46, 4, 61, 54, 19, 46, 54,
296 11, 35, 53, 12, 6, 30, 13, 15, 31,
298 20, 14, 23, 18, 19, 6,
380 51, 30, 30, 38, 23, 38, 53, 46,
418 6, 13, 12, 6, 6, 12, 14, 14, 13, 12, 29, 7, 6, 13, 36, 28,
419 14, 13, 5, 26, 12, 4, 18,
421 5, 5, 12, 6, 6, 4, 6, 14, 5, 12, 14, 7, 13, 5, 13, 21,
422 14, 20, 12, 34, 11, 4, 18,
424 25, 30, 25, 45, 18, 12, 29,
426 17, 41, 42, 29, 25, 49, 43, 37, 33, 58, 51, 30, 19, 38, 38, 46,
427 34, 54, 54, 39, 6, 39, 39, 39, 19, 39, 54, 39, 19, 39, 39, 39,
428 56, 39, 39, 39, 17, 34, 35, 21, 41, 59, 60, 38, 35, 45, 53, 54,
429 44, 39, 39, 39, 34, 38, 62, 39, 26, 39, 39, 39, 40, 35, 44,
431 18, 17, 33, 18, 26, 42, 25, 33, 26, 42, 27, 25, 34, 42, 42, 35,
432 26, 27, 42, 20, 20, 25, 25, 26, 11, 19, 27, 33, 42, 35, 35, 43,
435 0, 17, 26, 19, 35, 21, 25, 34, 20, 28, 29, 33, 27, 28, 29, 22,
436 34, 28, 44, 37, 38, 0, 25, 19, 20, 13, 14, 57, 44, 30, 30, 23,
437 17, 0, 1, 17, 25, 18, 0, 9, 25, 33, 34, 9, 25, 18, 26, 20,
438 25, 18, 19, 27, 29, 17, 9, 25, 10, 18, 4, 17, 33, 19, 20, 29,
439 18, 11, 4, 28, 2, 10, 3, 3,
441 5, 10, 53, 43, 25, 46,
445 33, 52, 46, 25, 61, 54, 25, 61, 54,
459 18, 27, 15, 18, 28, 45, 26, 7, 23,
461 26, 36, 38, 18, 34, 21,
543 58, 45, 45, 30, 38, 45, 38, 46,
581 6, 6, 12, 14, 6, 4, 14, 7, 6, 4, 29, 7, 6, 6, 12, 28,
582 7, 13, 13, 35, 19, 5, 4,
584 5, 5, 20, 13, 13, 19, 21, 6, 12, 12, 14, 14, 5, 4, 12, 13,
585 7, 13, 12, 41, 11, 5, 27,
587 25, 45, 25, 14, 18, 35, 45,
589 17, 41, 49, 36, 1, 49, 50, 37, 48, 51, 58, 45, 26, 45, 53, 46,
590 49, 54, 61, 39, 35, 39, 39, 39, 19, 54, 39, 39, 50, 39, 39, 39,
591 0, 39, 39, 39, 9, 49, 50, 36, 48, 59, 59, 38, 34, 45, 38, 31,
592 58, 39, 39, 39, 34, 38, 54, 39, 41, 39, 39, 39, 25, 50, 37,
594 33, 40, 25, 41, 26, 42, 25, 33, 26, 34, 27, 25, 41, 42, 42, 35,
595 33, 27, 35, 42, 43, 33, 25, 26, 34, 19, 27, 33, 42, 43, 35, 43,
598 0, 0, 33, 34, 35, 21, 25, 34, 35, 28, 29, 40, 42, 43, 29, 30,
599 49, 36, 37, 45, 38, 0, 40, 34, 43, 36, 37, 57, 52, 45, 38, 46,
600 25, 0, 0, 17, 25, 26, 0, 9, 25, 33, 19, 0, 25, 33, 26, 20,
601 25, 33, 27, 35, 22, 25, 1, 25, 33, 26, 12, 25, 33, 27, 28, 37,
602 19, 11, 4, 6, 3, 4, 4, 5,
604 35, 25, 46, 28, 33, 38,
609 0, 0, 0, 4, 0, 0, 1, 0, 0,
623 12, 13, 8, 8, 13, 12, 5, 9, 9,
707 9, 6, 9, 10, 5, 0, 9, 5,
745 8, 5, 4, 5, 4, 4, 5, 4, 1, 0, 4, 1, 0, 0, 0, 0,
748 8, 5, 8, 5, 5, 4, 5, 5, 4, 0, 5, 4, 1, 0, 0, 1,
753 12, 9, 9, 10, 9, 9, 9, 10, 8, 8, 8, 10, 9, 13, 8, 8,
754 8, 8, 8, 5, 8, 0, 0, 0, 8, 8, 8, 8, 8, 0, 4, 4,
755 0, 0, 0, 0, 12, 12, 9, 13, 4, 5, 8, 9, 8, 12, 12, 8,
756 4, 0, 0, 0, 8, 8, 8, 8, 4, 0, 0, 0, 13, 13, 8,
758 8, 9, 12, 13, 13, 13, 10, 13, 13, 13, 13, 13, 13, 13, 13, 13,
759 10, 13, 13, 13, 13, 8, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13,
762 9, 5, 10, 13, 13, 10, 9, 10, 13, 13, 13, 9, 10, 10, 10, 13,
763 8, 9, 10, 10, 13, 8, 8, 9, 12, 12, 10, 5, 9, 9, 9, 13,
764 1, 5, 9, 9, 9, 6, 5, 9, 10, 10, 9, 9, 9, 9, 9, 9,
765 6, 8, 9, 9, 10, 1, 5, 8, 8, 9, 6, 6, 9, 8, 8, 9,
766 4, 2, 1, 6, 1, 1, 1, 1,
772 #define MAX_SUB_BLOCKS 16
773 #define MAX_SUB_BLOCK_SIZE 4
774 #define MAX_TB_SIZE 64
834 const int m = (init_value >> 3) - 4;
835 const int n = ((init_value & 7) * 18) + 1;
836 const int pre =
av_clip(((m * (qp - 16)) >> 1) + n, 1, 127);
838 state->state[0] = pre << 3;
839 state->state[1] = pre << 7;
840 state->shift[0] = (shift_idx >> 2 ) + 2;
841 state->shift[1] = (shift_idx & 3 ) + 3 +
state->shift[0];
846 const int ctu_idx,
const int rx,
const int ry)
850 const int first_ctb_in_slice = !ctu_idx;
851 const int first_ctb_in_tile = rx ==
pps->ctb_to_col_bd[rx] && ry ==
pps->ctb_to_row_bd[ry];
853 if (first_ctb_in_slice|| first_ctb_in_tile) {
854 if (lc->
sc->
nb_eps == 1 && !first_ctb_in_slice)
867 x =
c->low ^ (
c->low - 1);
876 x += (
c->bytestream[0] << 9) + (
c->bytestream[1] << 1);
878 x +=
c->bytestream[0] << 1;
882 #if !UNCHECKED_BITSTREAM_READER
883 if (
c->bytestream <
c->bytestream_end)
891 const int qRangeIdx =
c->range >> 5;
892 const int pState =
s->state[1] + (
s->state[0] << 4);
893 const int valMps = pState >> 14;
894 const int RangeLPS = (qRangeIdx * ((valMps ? 32767 - pState : pState) >> 9 ) >> 1) + 4;
897 c->range -= RangeLPS;
901 c->range += (RangeLPS -
c->range) & lps_mask;
903 bit = valMps ^ (lps_mask & 1);
906 c->range <<= lps_mask;
911 s->state[0] =
s->state[0] - (
s->state[0] >>
s->shift[0]) + (1023 *
bit >>
s->shift[0]);
912 s->state[1] =
s->state[1] - (
s->state[1] >>
s->shift[1]) + (16383 *
bit >>
s->shift[1]);
916 #define GET_CABAC(ctx) vvc_get_cabac(&lc->ep->cc, lc->ep->cabac_state, ctx)
921 const int n = c_max + 1;
923 const int u = (1 << (k+1)) - n;
925 for (
int i = 0;
i < k;
i++)
949 for (
int i = 0;
i < k;
i++)
968 if (pre_ext_len == max_pre_ext_len)
969 escape_length = trunc_suffix_len;
971 escape_length = pre_ext_len + k;
972 while (escape_length-- > 0) {
975 val += ((1 << pre_ext_len) - 1) << k;
984 for (
int i = 0;
i <
len;
i++)
992 const int x0,
const int y0,
const uint8_t *left_ctx,
const uint8_t *top_ctx)
996 const int min_cb_width =
fc->ps.pps->min_cb_width;
999 const int x_cb = x0 >>
sps->min_cb_log2_size_y;
1000 const int y_cb = y0 >>
sps->min_cb_log2_size_y;
1011 uint8_t
left = 0, top = 0;
1058 int inc = c_idx * 3;
1089 const int length = num_chroma_filters - 1;
1103 inc +=
left->ctb_cc_idc[idx] != 0;
1119 const int cb_width,
const int cb_height,
const int is_chroma,
const VVCAllowedSplit *
a)
1123 const int is_inside = (x0 + cb_width <=
pps->width) && (y0 + cb_height <= pps->
height);
1125 if ((
a->btv ||
a->bth ||
a->ttv ||
a->tth ||
a->qt) &&
is_inside)
1127 uint8_t
inc = 0, left_height = cb_height, top_width = cb_width;
1129 get_left_top(lc, &left_height, &top_width, x0, y0,
fc->tab.cb_height[is_chroma],
fc->tab.cb_width[is_chroma]);
1130 inc += left_height < cb_height;
1131 inc += top_width < cb_width;
1132 inc += (
a->btv +
a->bth +
a->ttv +
a->tth + 2 *
a->qt - 1) / 2 * 3;
1144 uint8_t depth_left = 0, depth_top = 0;
1146 get_left_top(lc, &depth_left, &depth_top, x0, y0,
fc->tab.cqt_depth[ch_type],
fc->tab.cqt_depth[ch_type]);
1147 inc += depth_left > cqt_depth;
1148 inc += depth_top > cqt_depth;
1149 inc += (cqt_depth >= 2) * 3;
1155 const int cb_width,
const int cb_height,
const int ch_type,
const VVCAllowedSplit*
a)
1157 if ((
a->bth ||
a->tth) && (
a->btv ||
a->ttv)) {
1159 const int v =
a->btv +
a->ttv;
1160 const int h =
a->bth +
a->tth;
1168 const int min_cb_width =
fc->ps.pps->min_cb_width;
1171 const int x_cb = x0 >>
sps->min_cb_log2_size_y;
1172 const int y_cb = y0 >>
sps->min_cb_log2_size_y;
1175 const int da = cb_width / (available_a ?
SAMPLE_CTB(
fc->tab.cb_width[ch_type], x_cb, y_cb - 1) : 1);
1176 const int dl = cb_height / (available_l ?
SAMPLE_CTB(
fc->tab.cb_height[ch_type], x_cb - 1, y_cb) : 1);
1178 if (da == dl || !available_a || !available_l)
1187 return !(
a->bth ||
a->tth);
1192 const int inc = (2 * mtt_split_cu_vertical_flag) + ((mtt_depth <= 1) ? 1 : 0);
1197 const int cqt_depth,
const int mtt_depth,
const int ch_type,
const VVCAllowedSplit *
a)
1199 const int allow_no_qt =
a->btv ||
a->bth ||
a->ttv ||
a->tth;
1201 int mtt_split_cu_vertical_flag;
1202 int mtt_split_cu_binary_flag;
1206 if (allow_no_qt &&
a->qt) {
1209 split_qt_flag = !allow_no_qt ||
a->qt;
1214 if ((
a->btv &&
a->ttv && mtt_split_cu_vertical_flag) ||
1215 (
a->bth &&
a->tth && !mtt_split_cu_vertical_flag)) {
1218 if (!
a->btv && !
a->bth)
1219 mtt_split_cu_binary_flag = 0;
1220 else if (!
a->ttv && !
a->tth)
1221 mtt_split_cu_binary_flag = 1;
1222 else if (
a->bth &&
a->ttv)
1223 mtt_split_cu_binary_flag = 1 - mtt_split_cu_vertical_flag;
1225 mtt_split_cu_binary_flag = mtt_split_cu_vertical_flag;
1227 return mtt_split_modes[(mtt_split_cu_vertical_flag << 1) + mtt_split_cu_binary_flag];
1289 get_left_top(lc, &left_mode, &top_mode, cu->
x0, cu->
y0,
fc->tab.cpm[is_chroma],
fc->tab.cpm[is_chroma]);
1297 uint8_t
left = 0, top = 0;
1299 return (
left & 1) + (top & 1);
1319 const int c_max = (
w == 4 &&
h == 4) ? 15 :
1320 ((
w == 4 ||
h == 4) || (
w == 8 &&
h == 8)) ? 7: 5;
1327 for (
i = 0;
i < 2;
i++) {
1341 if (!intra_subpartitions_mode_flag)
1415 uint8_t run_left_lut[] = { 0, 1, 2, 3, 4 };
1416 uint8_t run_top_lut[] = { 5, 6, 6, 7, 7 };
1418 int bin_dist = cur_pos - prev_run_position - 1;
1419 uint8_t *run_lut = prev_run_type == 1 ? run_top_lut : run_left_lut;
1420 uint8_t ctx_inc = bin_dist <= 4 ? run_lut[bin_dist] : run_lut[4];
1447 uint8_t left_merge = 0, top_merge = 0;
1448 uint8_t left_affine = 0, top_affine = 0;
1451 get_left_top(lc, &left_merge, &top_merge, x0, y0,
fc->tab.msf,
fc->tab.msf);
1452 get_left_top(lc, &left_affine, &top_affine, x0, y0,
fc->tab.iaf,
fc->tab.iaf);
1453 return (left_merge || left_affine) + (top_merge + top_affine);
1474 int inc = !cu_skip_flag;
1505 const int shift = ph_mmvd_fullpel_only_flag ? 4 : 2;
1508 const int mmvd_signs[][2] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} };
1509 mmvd_offset->
x = mmvd_distance * mmvd_signs[mmvd_direction_idx][0];
1510 mmvd_offset->
y = mmvd_distance * mmvd_signs[mmvd_direction_idx][1];
1522 const int x_cb = cu->
x0 >>
fc->ps.sps->min_cb_log2_size_y;
1523 const int y_cb = cu->
y0 >>
fc->ps.sps->min_cb_log2_size_y;
1524 const int min_cb_width =
fc->ps.pps->min_cb_width;
1534 const int c_max = (is_ibc ?
sps->max_num_ibc_merge_cand :
sps->max_num_merge_cand) - 1;
1577 const int inc = 7 - ((1 +
log2)>>1);
1602 const int c_max = nb_refs - 1;
1603 const int max_ctx =
FFMIN(c_max, 2);
1657 const PredMode pred_mode,
const int has_amvr_flag)
1660 if (has_amvr_flag) {
1663 if (inter_affine_flag) {
1665 amvr_shift = idx * 4;
1666 }
else if (pred_mode ==
MODE_IBC) {
1668 amvr_shift = 4 + idx * 2;
1670 static const int shifts[] = {3, 4, 6};
1672 amvr_shift =
shifts[idx];
1681 const int c_max = no_backward_pred_flag ? 4 : 2;
1767 const int log2_tb_size,
const int log2_zo_tb_size,
const int c_idx,
const int ctx)
1770 int max = (log2_zo_tb_size << 1) - 1;
1771 int ctx_offset, ctx_shift;
1775 const int offset_y[] = {0, 0, 3, 6, 10, 15};
1776 ctx_offset = offset_y[log2_tb_size - 1];
1777 ctx_shift = (log2_tb_size + 1) >> 2;
1779 const int shifts[] = {0, 0, 0, 1, 2, 2, 2};
1781 ctx_shift =
shifts[log2_tb_size];
1789 const int log2_tb_width,
const int log2_zo_tb_width,
const int c_idx)
1795 const int log2_tb_height,
const int log2_zo_tb_height,
const int c_idx)
1801 const int last_significant_coeff_y_prefix)
1803 const int length = (last_significant_coeff_y_prefix >> 1) - 1;
1806 for (
int i = 1;
i < length;
i++)
1823 const int xc,
const int yc,
const int hist_value)
1825 int loc_sum = 3 * hist_value;
1828 loc_sum +=
level[1];
1830 loc_sum +=
level[2] - hist_value;
1832 loc_sum +=
level[
w + 1] - hist_value;
1837 loc_sum +=
level[
w << 1] - hist_value;
1848 loc_sum +=
level[-1];
1859 const int incs[] = {0, 21, 21};
1862 const int d = xc + yc;
1867 const int offset =
FFMIN(loc_sum_abs_pass1 - local_sum_sig, 4);
1870 inc = 1 +
offset + (!d ? 15 : (d < 3 ? 10 : (d < 10 ? 5 : 0)));
1903 const int left =
xs > 0 ? sb_coded_flag[-1] : 0;
1904 const int above = ys > 0 ? sb_coded_flag[-
w] : 0;
1907 const int right = (
xs <
w - 1) ? sb_coded_flag[1] : 0;
1908 const int bottom = (ys <
h - 1) ? sb_coded_flag[
w] : 0;
1909 inc = (right | bottom) + (tb->
c_idx ? 2 : 0);
1922 inc = 60 + local_num_sig;
1924 const int d = xc + yc;
1929 inc = 12 *
FFMAX(0, rc->
qstate - 1) +
FFMIN((loc_sum_abs_pass1 + 1) >> 1, 3) + ((d < 2) ? 8 : (d < 5 ? 4 : 0));
1931 inc = 36 + 8 *
FFMAX(0, rc->
qstate - 1) +
FFMIN((loc_sum_abs_pass1 + 1) >> 1, 3) + (d < 2 ? 4 : 0);
1938 const int xc,
const int yc,
const int base_level)
1942 const int rice_params[] = {
1943 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2,
1944 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
1952 if (!
sps->r->sps_rrc_rice_extension_flag) {
1958 loc_sum_abs =
av_clip_uintp2((loc_sum_abs >> shift_val) - base_level * 5, 5);
1960 return rice_params[loc_sum_abs] + shift_val;
1966 const int MAX_BIN = 6;
1972 if (prefix < MAX_BIN) {
1973 for (
int i = 0;
i < c_rice_param;
i++) {
1979 26 -
sps->log2_transform_range,
1980 sps->log2_transform_range);
1982 return suffix + (prefix << c_rice_param);
1989 const int base_level[][2][2] = {
1994 base_level[
sps->r->sps_rrc_rice_extension_flag][
sps->bit_depth > 12][
IS_I(rsh)]);
1995 const int rem =
abs_decode(lc, c_rice_param);
2004 const int rem =
abs_decode(lc, c_rice_param);
2020 const int left_sign = xc ?
level[-1] : 0;
2021 const int above_sign = yc ?
level[-
w] : 0;
2025 if (left_sign == -above_sign)
2026 inc = bdpcm_flag ? 3 : 0;
2027 else if (left_sign >= 0 && above_sign >= 0)
2028 inc = bdpcm_flag ? 4 : 1;
2030 inc = bdpcm_flag ? 5 : 2;
2043 const int l = xc > 0 ? sig_coeff_flag[-1] : 0;
2044 const int a = yc > 0 ? sig_coeff_flag[-tb->
tb_width] : 0;
2052 const int inc = 67 + j;
2057 { 0, 2 }, { 2, 0 }, { 1, 3 }, { 3, 1 }
2061 const int xc,
const int yc,
int *abs_level)
2064 const int dec_abs_level =
abs_decode(lc, c_rice_param);
2065 const int zero_pos = (rc->
qstate < 2 ? 1 : 2) << c_rice_param;
2068 if (dec_abs_level != zero_pos) {
2069 *abs_level = dec_abs_level;
2070 if (dec_abs_level < zero_pos)
2073 return dec_abs_level;
2077 const int remainder,
const int addin)
2081 *stat = (*stat +
av_log2(remainder) + addin) >> 1;
2087 const int log2_zo_tb_width,
const int log2_zo_tb_height,
2091 int log2_sb_w = (
FFMIN(log2_zo_tb_width, log2_zo_tb_height ) < 2 ? 1 : 2 );
2092 int log2_sb_h = log2_sb_w;
2094 if ( log2_zo_tb_width + log2_zo_tb_height > 3 ) {
2095 if ( log2_zo_tb_width < 2 ) {
2096 log2_sb_w = log2_zo_tb_width;
2097 log2_sb_h = 4 - log2_sb_w;
2098 }
else if ( log2_zo_tb_height < 2 ) {
2099 log2_sb_h = log2_zo_tb_height;
2100 log2_sb_w = 4 - log2_sb_h;
2106 rc->
last_sub_block = ( 1 << ( log2_zo_tb_width + log2_zo_tb_height - (log2_sb_w + log2_sb_h))) - 1;
2108 rc->
update_hist =
sps->r->sps_persistent_rice_adaptation_enabled_flag ? 1 : 0;
2109 rc->
rem_bins_pass1 = (( 1 << ( log2_zo_tb_width + log2_zo_tb_height)) * 7 ) >> 2;
2120 rc->
width_in_sbs = (1 << (log2_zo_tb_width - log2_sb_w));
2138 int infer_sb_sig_coeff_flag = 1;
2139 int last_scan_pos_pass1 = -1, last_scan_pos_pass2 = -1, n;
2147 if (*sb_coded_flag && i < rc->last_sub_block)
2154 const int off = yc * tb->
tb_width + xc;
2158 int par_level_flag = 0;
2160 abs_level_gtx_flag[n] = 0;
2161 last_scan_pos_pass1 = n;
2162 if (*sb_coded_flag && (n != rc->
num_sb_coeff - 1 || !infer_sb_sig_coeff_flag)) {
2165 if (*sig_coeff_flag)
2166 infer_sb_sig_coeff_flag = 0;
2168 *sig_coeff_flag = (n == rc->
num_sb_coeff - 1) && infer_sb_sig_coeff_flag && *sb_coded_flag;
2170 *coeff_sign_level = 0;
2171 if (*sig_coeff_flag) {
2175 if (abs_level_gtx_flag[n]) {
2180 *abs_level_pass1 = *sig_coeff_flag + par_level_flag + abs_level_gtx_flag[n];
2187 const int off = yc * tb->
tb_width + xc;
2190 for (
int j = 1; j < 5 && abs_level_gtx_flag[n]; j++) {
2192 abs_level_pass2[n] += abs_level_gtx_flag[n] << 1;
2195 last_scan_pos_pass2 = n;
2202 const int off = yc * tb->
tb_width + xc;
2206 int abs_remainder = 0;
2208 if ((n <= last_scan_pos_pass2 && abs_level_pass2[n] >= 10) ||
2209 (n > last_scan_pos_pass2 && n <= last_scan_pos_pass1 &&
2210 *abs_level_pass1 >= 2) ||
2211 (n > last_scan_pos_pass1 && *sb_coded_flag))
2213 if (n <= last_scan_pos_pass2) {
2214 *abs_level = abs_level_pass2[n] + 2 * abs_remainder;
2215 }
else if (n <= last_scan_pos_pass1) {
2216 *abs_level = *abs_level_pass1 + 2 * abs_remainder;
2218 *abs_level = abs_remainder;
2219 if (abs_remainder) {
2224 if (!bdpcm_flag && n <= last_scan_pos_pass1) {
2225 const int left = xc > 0 ? abs_level[-1] : 0;
2226 const int above = yc > 0 ? abs_level[-tb->
tb_width] : 0;
2229 if (*abs_level == 1 &&
pred > 0)
2231 else if (*abs_level > 0 && *abs_level <=
pred)
2235 tb->
coeffs[off] = *coeff_sign_level * *abs_level;
2266 int first_sig_scan_pos_sb, last_sig_scan_pos_sb;
2267 int first_pos_mode0, first_pos_mode1;
2268 int infer_sb_dc_sig_coeff_flag = 0;
2269 int n, sig_hidden_flag, sum = 0;
2271 const int start_qstate_sb = rc->
qstate;
2278 if (i < rc->last_sub_block &&
i > 0) {
2280 infer_sb_dc_sig_coeff_flag = 1;
2284 if (*sb_coded_flag && (
xs > 3 || ys > 3) && !tb->
c_idx)
2287 if (!*sb_coded_flag)
2291 last_sig_scan_pos_sb = -1;
2293 first_pos_mode1 = first_pos_mode0;
2294 for (n = first_pos_mode0; n >= 0 && rc->
rem_bins_pass1 >= 4; n--) {
2301 if ((n > 0 || !infer_sb_dc_sig_coeff_flag ) && !last) {
2304 if (*sig_coeff_flag)
2305 infer_sb_dc_sig_coeff_flag = 0;
2308 infer_sb_dc_sig_coeff_flag);
2310 *abs_level_pass1 = 0;
2311 if (*sig_coeff_flag) {
2312 int abs_level_gt1_flag, par_level_flag = 0;
2316 if (abs_level_gt1_flag) {
2321 abs_level_gt2_flag[n] = 0;
2323 if (last_sig_scan_pos_sb == -1)
2324 last_sig_scan_pos_sb = n;
2325 first_sig_scan_pos_sb = n;
2328 1 + par_level_flag + abs_level_gt1_flag + (abs_level_gt2_flag[n] << 1);
2330 abs_level_gt2_flag[n] = 0;
2336 first_pos_mode1 = n - 1;
2338 for (n = first_pos_mode0; n > first_pos_mode1; n--) {
2344 *abs_level = *abs_level_pass1;
2345 if (abs_level_gt2_flag[n]) {
2348 *abs_level += 2 * abs_remainder;
2351 for (n = first_pos_mode1; n >= 0; n--) {
2356 if (*sb_coded_flag) {
2360 if (*abs_level > 0) {
2361 if (last_sig_scan_pos_sb == -1)
2362 last_sig_scan_pos_sb = n;
2363 first_sig_scan_pos_sb = n;
2369 (last_sig_scan_pos_sb - first_sig_scan_pos_sb > 3 ? 1 : 0);
2372 rc->
qstate = start_qstate_sb;
2374 for (; n >= 0; n--) {
2375 int trans_coeff_level;
2378 const int off = yc * tb->
tb_width + xc;
2379 const int *abs_level = rc->
abs_level + off;
2381 if (*abs_level > 0) {
2383 if (!sig_hidden_flag || (n != first_sig_scan_pos_sb))
2386 trans_coeff_level = (2 * *abs_level - (rc->
qstate > 1)) * sign;
2388 trans_coeff_level = *abs_level * sign;
2389 if (sig_hidden_flag) {
2391 if (n == first_sig_scan_pos_sb && (sum % 2))
2392 trans_coeff_level = -trans_coeff_level;
2395 tb->
coeffs[off] = trans_coeff_level;
2423 const int log2_zo_tb_width,
const int log2_zo_tb_height)
2427 int last_significant_coeff_x, last_significant_coeff_y;
2435 if (last_significant_coeff_x > 3) {
2437 last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
2438 (2 + (last_significant_coeff_x & 1)) +
suffix;
2440 if (last_significant_coeff_y > 3) {
2442 last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
2443 (2 + (last_significant_coeff_y & 1)) +
suffix;
2446 last_significant_coeff_x = (1 << log2_zo_tb_width) - 1 - last_significant_coeff_x;
2447 last_significant_coeff_y = (1 << log2_zo_tb_height) - 1 - last_significant_coeff_y;
2459 const int c_idx = tb->
c_idx;
2460 int log2_zo_tb_width, log2_zo_tb_height;
2463 if (
sps->r->sps_mts_enabled_flag && cu->
sbt_flag && !c_idx && log2_tb_width == 5 && log2_tb_height < 6)
2464 log2_zo_tb_width = 4;
2466 log2_zo_tb_width =
FFMIN(log2_tb_width, 5 );
2468 if (
sps->r->sps_mts_enabled_flag && cu->
sbt_flag && !c_idx && log2_tb_width < 6 && log2_tb_height == 5 )
2469 log2_zo_tb_height = 4;
2471 log2_zo_tb_height =
FFMIN(log2_tb_height, 5);
2479 if ((rc.
last_sub_block > 0 && log2_tb_width >= 2 && log2_tb_height >= 2 ) ||
2480 (rc.
last_scan_pos > 7 && (log2_tb_width == 2 || log2_tb_width == 3 ) &&
2481 log2_tb_width == log2_tb_height))
2518 const int inc =
w *
h <= 256;
2531 const int inc = (
w ==
h) ? 0 : ((
w <
h) ? 1 : 2);
2552 for (
i = 0;
i < 4;
i++) {