mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-23 18:14:06 +00:00
[ibc] dual-tree rebase fixes
This commit is contained in:
parent
805afb1331
commit
312ac6731c
|
@ -1591,8 +1591,7 @@ static double search_cu(
|
||||||
lcu_fill_cbf(lcu, x_local, y_local, cu_width, cu_height, cur_cu, UVG_BOTH_T);
|
lcu_fill_cbf(lcu, x_local, y_local, cu_width, cu_height, cur_cu, UVG_BOTH_T);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cur_cu->type == CU_INTRA || cur_cu->type == CU_INTER || cur_cu->type == CU_IBC) {
|
|
||||||
// The cabac functions assume chroma locations whereas the search uses luma locations
|
// The cabac functions assume chroma locations whereas the search uses luma locations
|
||||||
// for the chroma tree, therefore we need to shift the chroma coordinates here for
|
// for the chroma tree, therefore we need to shift the chroma coordinates here for
|
||||||
// passing to the bit cost calculating functions.
|
// passing to the bit cost calculating functions.
|
||||||
|
@ -1602,7 +1601,7 @@ static double search_cu(
|
||||||
separate_tree_chroma_loc.width >>= 1;
|
separate_tree_chroma_loc.width >>= 1;
|
||||||
separate_tree_chroma_loc.height >>= 1;
|
separate_tree_chroma_loc.height >>= 1;
|
||||||
|
|
||||||
if (cur_cu->type == CU_INTRA || cur_cu->type == CU_INTER) {
|
if (cur_cu->type == CU_INTRA || cur_cu->type == CU_INTER || cur_cu->type == CU_IBC) {
|
||||||
double bits = 0;
|
double bits = 0;
|
||||||
cabac_data_t* cabac = &state->search_cabac;
|
cabac_data_t* cabac = &state->search_cabac;
|
||||||
cabac->update = 1;
|
cabac->update = 1;
|
||||||
|
|
|
@ -922,19 +922,18 @@ static void search_pu_ibc(
|
||||||
cur_pu->inter.mv_dir = info->merge_cand[merge_idx].dir;
|
cur_pu->inter.mv_dir = info->merge_cand[merge_idx].dir;
|
||||||
cur_pu->inter.mv[0][0] = info->merge_cand[merge_idx].mv[0][0];
|
cur_pu->inter.mv[0][0] = info->merge_cand[merge_idx].mv[0][0];
|
||||||
cur_pu->inter.mv[0][1] = info->merge_cand[merge_idx].mv[0][1];
|
cur_pu->inter.mv[0][1] = info->merge_cand[merge_idx].mv[0][1];
|
||||||
uvg_lcu_fill_trdepth(lcu, cu_loc->x, cu_loc->y, depth, MAX(1, depth), UVG_BOTH_T);
|
|
||||||
uvg_inter_recon_cu(state, lcu, true, false, cu_loc);
|
uvg_inter_recon_cu(state, lcu, true, false, cu_loc);
|
||||||
uvg_quantize_lcu_residual(state, true, false, false, cu_loc, depth, cur_pu, lcu, true, UVG_BOTH_T);
|
uvg_quantize_lcu_residual(state, true, false, false, cu_loc, cur_pu, lcu, true, UVG_BOTH_T);
|
||||||
|
|
||||||
if (cbf_is_set(cur_pu->cbf, depth, COLOR_Y)) {
|
if (cbf_is_set(cur_pu->cbf, COLOR_Y)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (has_chroma) {
|
else if (has_chroma) {
|
||||||
uvg_inter_recon_cu(state, lcu, false, has_chroma, cu_loc);
|
uvg_inter_recon_cu(state, lcu, false, has_chroma, cu_loc);
|
||||||
uvg_quantize_lcu_residual(state, false, has_chroma,
|
uvg_quantize_lcu_residual(state, false, has_chroma,
|
||||||
false, /*we are only checking for lack of coeffs so no need to check jccr*/
|
false, /*we are only checking for lack of coeffs so no need to check jccr*/
|
||||||
cu_loc, depth, cur_pu, lcu, true, UVG_BOTH_T);
|
cu_loc, cur_pu, lcu, true, UVG_BOTH_T);
|
||||||
if (!cbf_is_set_any(cur_pu->cbf, depth)) {
|
if (!cbf_is_set_any(cur_pu->cbf)) {
|
||||||
cur_pu->type = CU_IBC;
|
cur_pu->type = CU_IBC;
|
||||||
cur_pu->merge_idx = merge_idx;
|
cur_pu->merge_idx = merge_idx;
|
||||||
cur_pu->skipped = true;
|
cur_pu->skipped = true;
|
||||||
|
@ -1112,8 +1111,6 @@ static int uvg_search_hash_cu_ibc(encoder_state_t* const state,
|
||||||
info.num_merge_cand = uvg_inter_get_merge_cand(
|
info.num_merge_cand = uvg_inter_get_merge_cand(
|
||||||
state,
|
state,
|
||||||
cu_loc,
|
cu_loc,
|
||||||
merge_a1,
|
|
||||||
merge_b1,
|
|
||||||
info.merge_cand,
|
info.merge_cand,
|
||||||
lcu);
|
lcu);
|
||||||
|
|
||||||
|
@ -1128,11 +1125,6 @@ static int uvg_search_hash_cu_ibc(encoder_state_t* const state,
|
||||||
static int evaluations = 0;
|
static int evaluations = 0;
|
||||||
static int hits = 0;
|
static int hits = 0;
|
||||||
|
|
||||||
|
|
||||||
UVG_CLOCK_T hashmap_start_temp;
|
|
||||||
UVG_CLOCK_T hashmap_end_temp;
|
|
||||||
|
|
||||||
|
|
||||||
UVG_CLOCK_T hashmap_start_real_time;
|
UVG_CLOCK_T hashmap_start_real_time;
|
||||||
UVG_CLOCK_T hashmap_end_real_time;
|
UVG_CLOCK_T hashmap_end_real_time;
|
||||||
UVG_GET_TIME(&hashmap_start_real_time);
|
UVG_GET_TIME(&hashmap_start_real_time);
|
||||||
|
@ -1194,7 +1186,7 @@ static int uvg_search_hash_cu_ibc(encoder_state_t* const state,
|
||||||
if (full_block) {
|
if (full_block) {
|
||||||
double cost = ibc_cost, bits = ibc_bitcost;
|
double cost = ibc_cost, bits = ibc_bitcost;
|
||||||
vector2d_t mv = { best_mv_x, best_mv_y};
|
vector2d_t mv = { best_mv_x, best_mv_y};
|
||||||
cost = calc_ibc_mvd_cost(state, mv_x, mv_y,INTERNAL_MV_PREC,info.mv_cand, info.merge_cand, info.num_merge_cand, NULL, &bits);
|
cost = calc_ibc_mvd_cost(state, mv_x, mv_y,INTERNAL_MV_PREC,info.mv_cand, info.merge_cand, info.num_merge_cand, 0, &bits);
|
||||||
//double cost = get_ibc_mvd_coding_cost(state, &state->cabac, mv_x,mv_y) * state->lambda_sqrt;
|
//double cost = get_ibc_mvd_coding_cost(state, &state->cabac, mv_x,mv_y) * state->lambda_sqrt;
|
||||||
//cost +=
|
//cost +=
|
||||||
bool better_mv = cost < ibc_cost;
|
bool better_mv = cost < ibc_cost;
|
||||||
|
@ -1221,7 +1213,7 @@ static int uvg_search_hash_cu_ibc(encoder_state_t* const state,
|
||||||
//if (x > state->tile->frame->width-64 && y > state->tile->frame->height-64)
|
//if (x > state->tile->frame->width-64 && y > state->tile->frame->height-64)
|
||||||
//fprintf(stderr, "Hashmap time: %f (crc: %f, search: %f) Evaluations: %d Hits: %d, hashed in this block: %d\n", time_spent,crc_time, search_time, evaluations, hits,hashes_found);
|
//fprintf(stderr, "Hashmap time: %f (crc: %f, search: %f) Evaluations: %d Hits: %d, hashed in this block: %d\n", time_spent,crc_time, search_time, evaluations, hits,hashes_found);
|
||||||
|
|
||||||
if (!found_block) return;
|
if (!found_block) return 0;
|
||||||
|
|
||||||
*inter_cost = ibc_cost;
|
*inter_cost = ibc_cost;
|
||||||
*inter_bitcost = ibc_bitcost;
|
*inter_bitcost = ibc_bitcost;
|
||||||
|
@ -1250,7 +1242,7 @@ static int uvg_search_hash_cu_ibc(encoder_state_t* const state,
|
||||||
cur_pu->skipped = merged;
|
cur_pu->skipped = merged;
|
||||||
|
|
||||||
|
|
||||||
const int ibc_flag = CTX_ENTROPY_FBITS(&state->search_cabac.ctx.ibc_flag[0], 1);
|
const float ibc_flag = CTX_ENTROPY_FBITS(&state->search_cabac.ctx.ibc_flag[0], 1);
|
||||||
ibc_cost += ibc_flag * state->lambda;
|
ibc_cost += ibc_flag * state->lambda;
|
||||||
ibc_bitcost += ibc_flag;
|
ibc_bitcost += ibc_flag;
|
||||||
|
|
||||||
|
@ -1267,7 +1259,7 @@ static int uvg_search_hash_cu_ibc(encoder_state_t* const state,
|
||||||
cur_pu->inter.mv[0][0],
|
cur_pu->inter.mv[0][0],
|
||||||
cur_pu->inter.mv[0][1]));
|
cur_pu->inter.mv[0][1]));
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1313,7 +1305,6 @@ void uvg_search_cu_ibc(encoder_state_t * const state,
|
||||||
|
|
||||||
search_pu_ibc(state,
|
search_pu_ibc(state,
|
||||||
cu_loc,
|
cu_loc,
|
||||||
SIZE_2Nx2N, 0,
|
|
||||||
amvp,
|
amvp,
|
||||||
&merge,
|
&merge,
|
||||||
&info);
|
&info);
|
||||||
|
|
Loading…
Reference in a new issue