mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-12-02 21:24:07 +00:00
Move transform coding and chroma cu coding out of encode_intra_coding_unit
This commit is contained in:
parent
a88553b206
commit
b2a94d4276
|
@ -814,7 +814,7 @@ static void encode_chroma_intra_cu(cabac_data_t* const cabac, const cu_info_t* c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void encode_intra_coding_unit(encoder_state_t * const state,
|
static void encode_intra_luma_coding_unit(encoder_state_t * const state,
|
||||||
cabac_data_t * const cabac,
|
cabac_data_t * const cabac,
|
||||||
const cu_info_t * const cur_cu,
|
const cu_info_t * const cur_cu,
|
||||||
int x, int y, int depth, lcu_t* lcu, lcu_coeff_t* coeff, double* bits_out)
|
int x, int y, int depth, lcu_t* lcu, lcu_coeff_t* coeff, double* bits_out)
|
||||||
|
@ -1063,24 +1063,6 @@ static void encode_intra_coding_unit(encoder_state_t * const state,
|
||||||
if (cabac->only_count && bits_out) *bits_out += 5;
|
if (cabac->only_count && bits_out) *bits_out += 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Code chroma prediction mode.
|
|
||||||
if (state->encoder_control->chroma_format != KVZ_CSP_400 && depth != 4) {
|
|
||||||
encode_chroma_intra_cu(cabac, cur_cu, x, y, frame, cu_width, state->encoder_control->cfg.cclm);
|
|
||||||
}
|
|
||||||
// if we are counting bits, the cost for transform coeffs is done separately
|
|
||||||
// To get the distortion at the same time
|
|
||||||
if (!cabac->only_count) {
|
|
||||||
encode_transform_coeff(state, x, y, depth, 0, 0, 0, 0, coeff);
|
|
||||||
|
|
||||||
encode_mts_idx(state, cabac, cur_cu);
|
|
||||||
|
|
||||||
if (state->encoder_control->chroma_format != KVZ_CSP_400 && depth == 4 && x % 8 && y % 8) {
|
|
||||||
encode_chroma_intra_cu(cabac, cur_cu, x, y, frame, cu_width, state->encoder_control->cfg.cclm);
|
|
||||||
encode_transform_coeff(state, x, y, depth, 0, 0, 0, 1, coeff);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1511,7 +1493,23 @@ void kvz_encode_coding_tree(encoder_state_t * const state,
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if (cur_cu->type == CU_INTRA) {
|
} else if (cur_cu->type == CU_INTRA) {
|
||||||
encode_intra_coding_unit(state, cabac, cur_cu, x, y, depth, NULL, coeff, NULL);
|
encode_intra_luma_coding_unit(state, cabac, cur_cu, x, y, depth, NULL, coeff, NULL);
|
||||||
|
|
||||||
|
// Code chroma prediction mode.
|
||||||
|
if (state->encoder_control->chroma_format != KVZ_CSP_400 && depth != 4) {
|
||||||
|
encode_chroma_intra_cu(cabac, cur_cu, x, y, frame, cu_width, state->encoder_control->cfg.cclm);
|
||||||
|
}
|
||||||
|
|
||||||
|
encode_transform_coeff(state, x, y, depth, 0, 0, 0, 0, coeff);
|
||||||
|
|
||||||
|
encode_mts_idx(state, cabac, cur_cu);
|
||||||
|
|
||||||
|
// For 4x4 the chroma PU/TU is coded after the last
|
||||||
|
if (state->encoder_control->chroma_format != KVZ_CSP_400 && depth == 4 && x % 8 && y % 8) {
|
||||||
|
encode_chroma_intra_cu(cabac, cur_cu, x, y, frame, cu_width, state->encoder_control->cfg.cclm);
|
||||||
|
encode_transform_coeff(state, x, y, depth, 0, 0, 0, 1, coeff);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
|
@ -1640,7 +1638,7 @@ double kvz_mock_encode_coding_unit(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (cur_cu->type == CU_INTRA) {
|
else if (cur_cu->type == CU_INTRA) {
|
||||||
encode_intra_coding_unit(state, cabac, cur_cu, x, y, depth, lcu, NULL, &bits);
|
encode_intra_luma_coding_unit(state, cabac, cur_cu, x, y, depth, lcu, NULL, &bits);
|
||||||
}
|
}
|
||||||
return bits;
|
return bits;
|
||||||
}
|
}
|
||||||
|
|
|
@ -915,21 +915,25 @@ double kvz_luma_mode_bits(const encoder_state_t *state, int8_t luma_mode, const
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cabac_ctx_t *ctx = &(cabac->ctx.luma_planar_model[1]);
|
cabac_ctx_t* ctx = &(cabac->ctx.luma_planar_model[1]);
|
||||||
CABAC_FBITS_UPDATE(cabac, ctx, mode_in_preds, mode_bits, "prev_intra_luma_pred_flag_search");
|
CABAC_FBITS_UPDATE(
|
||||||
if (state->search_cabac.update) {
|
cabac,
|
||||||
if(mode_in_preds) {
|
ctx,
|
||||||
CABAC_BIN_EP(cabac, !(luma_mode == intra_preds[0]), "mpm_idx");
|
mode_in_preds != -1,
|
||||||
if(luma_mode != intra_preds[0]) {
|
mode_bits,
|
||||||
CABAC_BIN_EP(cabac, !(luma_mode == intra_preds[1]), "mpm_idx");
|
"prev_intra_luma_pred_flag_search");
|
||||||
|
if (state->search_cabac.update) {
|
||||||
|
if (mode_in_preds) {
|
||||||
|
CABAC_BIN_EP(cabac, !(luma_mode == intra_preds[0]), "mpm_idx");
|
||||||
|
if (luma_mode != intra_preds[0]) {
|
||||||
|
CABAC_BIN_EP(cabac, !(luma_mode == intra_preds[1]), "mpm_idx");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// This value should be transformed for actual coding,
|
||||||
|
// but here the value does not actually matter, just that we write 5 bits
|
||||||
|
CABAC_BINS_EP(cabac, luma_mode, 5, "rem_intra_luma_pred_mode");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// This value should be transformed for actual coding,
|
|
||||||
// but here the value does not actually matter, just that we write 5 bits
|
|
||||||
CABAC_BINS_EP(cabac, luma_mode, 5, "rem_intra_luma_pred_mode");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool enable_mrl = state->encoder_control->cfg.mrl;
|
bool enable_mrl = state->encoder_control->cfg.mrl;
|
||||||
uint8_t multi_ref_index = enable_mrl ? multi_ref_idx : 0;
|
uint8_t multi_ref_index = enable_mrl ? multi_ref_idx : 0;
|
||||||
|
|
Loading…
Reference in a new issue