#include "cabac_functions.h"
#include "hevc.h"
-#define CABAC_MAX_BIN 100
+#define CABAC_MAX_BIN 31
/**
* number of bin by SyntaxElement.
154, 196, 167, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
136, 122, 169, 208, 166, 167, 154, 152, 167, 182,
// coeff_abs_level_greater2_flag
- 107, 167, 91, 107, 107, 167,
- },
+ 107, 167, 91, 107, 107, 167, },
};
static const uint8_t scan_1x1[1] = {
void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts)
{
if (s->pps->entropy_coding_sync_enabled_flag &&
- ((ctb_addr_ts % s->sps->ctb_width) == 2 ||
+ (ctb_addr_ts % s->sps->ctb_width == 2 ||
(s->sps->ctb_width == 2 &&
- (ctb_addr_ts % s->sps->ctb_width) == 0))) {
+ ctb_addr_ts % s->sps->ctb_width == 0))) {
memcpy(s->cabac_state, s->HEVClc->cabac_state, HEVC_CONTEXTS);
}
}
int init_value = init_values[init_type][i];
int m = (init_value >> 4) * 5 - 45;
int n = ((init_value & 15) << 3) - 16;
- int pre = 2 * (((m * av_clip_c(s->sh.slice_qp, 0, 51)) >> 4) + n) - 127;
+ int pre = 2 * (((m * av_clip(s->sh.slice_qp, 0, 51)) >> 4) + n) - 127;
pre ^= pre >> 31;
if (pre > 124)
{
if (ctb_addr_ts == s->pps->ctb_addr_rs_to_ts[s->sh.slice_ctb_addr_rs]) {
cabac_init_decoder(s);
- if ((s->sh.dependent_slice_segment_flag == 0) ||
+ if (s->sh.dependent_slice_segment_flag == 0 ||
(s->pps->tiles_enabled_flag &&
- (s->pps->tile_id[ctb_addr_ts] != s->pps->tile_id[ctb_addr_ts - 1])))
+ s->pps->tile_id[ctb_addr_ts] != s->pps->tile_id[ctb_addr_ts - 1]))
cabac_init_state(s);
if (!s->sh.first_slice_in_pic_flag &&
s->pps->entropy_coding_sync_enabled_flag) {
- if ((ctb_addr_ts % s->sps->ctb_width) == 0) {
+ if (ctb_addr_ts % s->sps->ctb_width == 0) {
if (s->sps->ctb_width == 1)
cabac_init_state(s);
else if (s->sh.dependent_slice_segment_flag == 1)
}
} else {
if (s->pps->tiles_enabled_flag &&
- (s->pps->tile_id[ctb_addr_ts] != s->pps->tile_id[ctb_addr_ts - 1])) {
+ s->pps->tile_id[ctb_addr_ts] != s->pps->tile_id[ctb_addr_ts - 1]) {
if (s->threads_number == 1)
cabac_reinit(s->HEVClc);
else
cabac_init_state(s);
}
if (s->pps->entropy_coding_sync_enabled_flag) {
- if ((ctb_addr_ts % s->sps->ctb_width) == 0) {
+ if (ctb_addr_ts % s->sps->ctb_width == 0) {
get_cabac_terminate(&s->HEVClc->cc);
if (s->threads_number == 1)
cabac_reinit(s->HEVClc);
int ff_hevc_sao_eo_class_decode(HEVCContext *s)
{
- int ret = (get_cabac_bypass(&s->HEVClc->cc) << 1);
+ int ret = get_cabac_bypass(&s->HEVClc->cc) << 1;
ret |= get_cabac_bypass(&s->HEVClc->cc);
return ret;
}
if (!GET_CABAC(elem_offset[INTRA_CHROMA_PRED_MODE]))
return 4;
- ret = (get_cabac_bypass(&s->HEVClc->cc) << 1);
+ ret = get_cabac_bypass(&s->HEVClc->cc) << 1;
ret |= get_cabac_bypass(&s->HEVClc->cc);
return ret;
}
}
}
- if (c_idx == 0) {
+ if (c_idx == 0)
inc = sig_ctx;
- } else {
+ else
inc = sig_ctx + 27;
- }
return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_FLAG] + inc);
}
else
offset = s->pps->cr_qp_offset + s->sh.slice_cr_qp_offset;
- qp_i = av_clip_c(qp_y + offset, - s->sps->qp_bd_offset, 57);
+ qp_i = av_clip(qp_y + offset, - s->sps->qp_bd_offset, 57);
if (qp_i < 30)
qp = qp_i;
else if (qp_i > 43)
s->hevcdsp.transform_skip(dst, coeffs, stride);
else if (lc->cu.pred_mode == MODE_INTRA && c_idx == 0 && log2_trafo_size == 2)
s->hevcdsp.transform_4x4_luma_add(dst, coeffs, stride);
- else
- s->hevcdsp.transform_add[log2_trafo_size-2](dst, coeffs, stride);
+ else {
+ int max_xy = FFMAX(last_significant_coeff_x, last_significant_coeff_y);
+ if (max_xy == 0)
+ s->hevcdsp.transform_dc_add[log2_trafo_size-2](dst, coeffs, stride);
+ else {
+ int col_limit = last_significant_coeff_x + last_significant_coeff_y + 4;
+ if (max_xy < 4)
+ col_limit = FFMIN(4, col_limit);
+ else if (max_xy < 8)
+ col_limit = FFMIN(8, col_limit);
+ else if (max_xy < 12)
+ col_limit = FFMIN(24, col_limit);
+ s->hevcdsp.transform_add[log2_trafo_size-2](dst, coeffs, stride, col_limit);
+ }
+ }
}
}