mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-27 11:24:05 +00:00
[intra] fix various things
This commit is contained in:
parent
6fcec1fdd3
commit
09832c3c85
|
@ -988,6 +988,14 @@ static double search_cu(encoder_state_t * const state, int x, int y, int depth,
|
|||
|
||||
lcu_fill_cu_info(lcu, x_local, y_local, cu_width, cu_width, cur_cu);
|
||||
}
|
||||
else if(!cur_cu->intra.mip_flag) {
|
||||
cur_cu->intra.mode_chroma = cur_cu->intra.mode;
|
||||
intra_search.pred_cu.intra.mode_chroma = cur_cu->intra.mode;
|
||||
}
|
||||
else {
|
||||
cur_cu->intra.mode_chroma = 0;
|
||||
intra_search.pred_cu.intra.mode_chroma = 0;
|
||||
}
|
||||
intra_search.pred_cu.intra.mode = -1; // skip luma
|
||||
uvg_intra_recon_cu(state,
|
||||
x, y, // TODO: as does this
|
||||
|
|
|
@ -605,13 +605,13 @@ static int search_intra_chroma_rough(
|
|||
lcu_t* lcu,
|
||||
int8_t luma_mode)
|
||||
{
|
||||
assert(!(x_px & 4 || y_px & 4));
|
||||
assert(depth != 4 || (x_px & 4 && y_px & 4));
|
||||
|
||||
const unsigned width = MAX(LCU_WIDTH_C >> depth, TR_MIN_WIDTH);
|
||||
|
||||
cost_pixel_nxn_func *const satd_func = uvg_pixels_get_satd_func(width);
|
||||
//cost_pixel_nxn_func *const sad_func = uvg_pixels_get_sad_func(width);
|
||||
cu_loc_t loc = { x_px, y_px, width, width, width, width };
|
||||
cu_loc_t loc = { x_px & ~7, y_px & ~7, width, width, width, width };
|
||||
|
||||
uvg_pixel _pred[32 * 32 + SIMD_ALIGNMENT];
|
||||
uvg_pixel *pred = ALIGNED_POINTER(_pred, SIMD_ALIGNMENT);
|
||||
|
@ -907,6 +907,7 @@ static double count_bits(
|
|||
|
||||
static int16_t search_intra_rough(
|
||||
encoder_state_t * const state,
|
||||
const cu_loc_t* const cu_loc,
|
||||
kvz_pixel *orig,
|
||||
int32_t origstride,
|
||||
kvz_intra_references *refs,
|
||||
|
@ -949,7 +950,7 @@ static int16_t search_intra_rough(
|
|||
double cost;
|
||||
};
|
||||
|
||||
const double not_mrl = state->encoder_control->cfg.mrl ? CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.multi_ref_line[0]), 0) : 0;
|
||||
const double not_mrl = state->encoder_control->cfg.mrl && (cu_loc->y % LCU_WIDTH) ? CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.multi_ref_line[0]), 0) : 0;
|
||||
const double not_mip = state->encoder_control->cfg.mip ? CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.mip_flag[mip_ctx]), 0) : 0;
|
||||
const double mpm_mode_bit = CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.intra_luma_mpm_flag_model), 1);
|
||||
const double not_mpm_mode_bit = CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.intra_luma_mpm_flag_model), 0);
|
||||
|
@ -1173,7 +1174,7 @@ static void get_rough_cost_for_2n_modes(
|
|||
|
||||
uvg_pixels_blit(orig, orig_block, width, width, orig_stride, width);
|
||||
|
||||
const double mrl = state->encoder_control->cfg.mrl ? CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.multi_ref_line[0]), 1) : 0;
|
||||
const double mrl = state->encoder_control->cfg.mrl && (cu_loc->y % LCU_WIDTH) ? CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.multi_ref_line[0]), 1) : 0;
|
||||
const double not_mip = state->encoder_control->cfg.mip ? CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.mip_flag[mip_ctx]), 0) : 0;
|
||||
const double mip = state->encoder_control->cfg.mip ? CTX_ENTROPY_FBITS(&(state->search_cabac.ctx.mip_flag[mip_ctx]), 1) : 0;
|
||||
double costs_out[PARALLEL_BLKS] = { 0 };
|
||||
|
@ -1428,7 +1429,7 @@ int8_t uvg_search_cu_intra_chroma(encoder_state_t * const state,
|
|||
{
|
||||
const int_fast8_t log2_width_c = MAX(LOG2_LCU_WIDTH - depth - 1, 2);
|
||||
const vector2d_t pic_px = { state->tile->frame->width, state->tile->frame->height };
|
||||
const vector2d_t luma_px = { x_px, y_px };
|
||||
const vector2d_t luma_px = { x_px & ~7, y_px & ~7};
|
||||
|
||||
uvg_intra_references refs_u;
|
||||
uvg_intra_build_reference(log2_width_c, COLOR_U, &luma_px, &pic_px, lcu, &refs_u, state->encoder_control->cfg.wpp, NULL, 0);
|
||||
|
@ -1436,7 +1437,7 @@ int8_t uvg_search_cu_intra_chroma(encoder_state_t * const state,
|
|||
uvg_intra_references refs_v;
|
||||
uvg_intra_build_reference(log2_width_c, COLOR_V, &luma_px, &pic_px, lcu, &refs_v, state->encoder_control->cfg.wpp, NULL, 0);
|
||||
|
||||
vector2d_t lcu_cpx = { lcu_px.x / 2, lcu_px.y / 2 };
|
||||
vector2d_t lcu_cpx = { (lcu_px.x & ~7) / 2, (lcu_px.y & ~7) / 2 };
|
||||
uvg_pixel *ref_u = &lcu->ref.u[lcu_cpx.x + lcu_cpx.y * LCU_WIDTH_C];
|
||||
uvg_pixel *ref_v = &lcu->ref.v[lcu_cpx.x + lcu_cpx.y * LCU_WIDTH_C];
|
||||
|
||||
|
@ -1451,9 +1452,8 @@ int8_t uvg_search_cu_intra_chroma(encoder_state_t * const state,
|
|||
intra_mode);
|
||||
}
|
||||
|
||||
int8_t intra_mode_chroma = intra_mode;
|
||||
if (num_modes > 1) {
|
||||
intra_mode_chroma = uvg_search_intra_chroma_rdo(state, x_px, y_px, depth, num_modes, lcu, chroma_data, intra_mode);
|
||||
uvg_search_intra_chroma_rdo(state, x_px, y_px, depth, num_modes, lcu, chroma_data, intra_mode);
|
||||
}
|
||||
*search_data = chroma_data[0];
|
||||
return chroma_data[0].pred_cu.intra.mode_chroma;
|
||||
|
@ -1610,6 +1610,7 @@ void uvg_search_cu_intra(
|
|||
if (!skip_rough_search) {
|
||||
num_regular_modes = number_of_modes = search_intra_rough(
|
||||
state,
|
||||
&cu_loc,
|
||||
ref_pixels,
|
||||
LCU_WIDTH,
|
||||
refs,
|
||||
|
@ -1630,7 +1631,7 @@ void uvg_search_cu_intra(
|
|||
number_of_modes = UVG_NUM_INTRA_MODES;
|
||||
}
|
||||
|
||||
int num_mrl_modes = 0;
|
||||
int16_t num_mrl_modes = 0;
|
||||
for(int line = 1; line < lines; ++line) {
|
||||
uvg_pixel extra_refs[128 * MAX_REF_LINE_IDX] = { 0 };
|
||||
|
||||
|
|
|
@ -305,7 +305,7 @@ void uvg_encode_coeff_nxn_generic(encoder_state_t * const state,
|
|||
cur_cu->violates_mts_coeff_constraint = true;
|
||||
}
|
||||
}
|
||||
if (cabac->only_count) *bits_out += bits;
|
||||
if (cabac->only_count && bits_out) *bits_out += bits;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue