mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-24 02:24:07 +00:00
[ibc] Calculate hashes every 4 pixels and change the IBC costs a bit
This commit is contained in:
parent
0fefd3f621
commit
20875a9819
|
@ -761,8 +761,8 @@ static void encoder_state_worker_encode_lcu_search(void * opaque)
|
||||||
const uint32_t ibc_block_height = MIN(LCU_WIDTH, (state->tile->frame->height-lcu->position_px.y));
|
const uint32_t ibc_block_height = MIN(LCU_WIDTH, (state->tile->frame->height-lcu->position_px.y));
|
||||||
int items = 0;
|
int items = 0;
|
||||||
// Hash the current LCU to the IBC hashmap
|
// Hash the current LCU to the IBC hashmap
|
||||||
for (int32_t xx = 0; xx < (int32_t)(ibc_block_width)-7; xx+=UVG_HASHMAP_BLOCKSIZE) {
|
for (int32_t xx = 0; xx < (int32_t)(ibc_block_width)-7; xx+=UVG_HASHMAP_BLOCKSIZE>>1) {
|
||||||
for (int32_t yy = 0; yy < (int32_t)(ibc_block_height)-7; yy+=UVG_HASHMAP_BLOCKSIZE) {
|
for (int32_t yy = 0; yy < (int32_t)(ibc_block_height)-7; yy+=UVG_HASHMAP_BLOCKSIZE>>1) {
|
||||||
int cur_x = lcu->position_px.x + xx;
|
int cur_x = lcu->position_px.x + xx;
|
||||||
int cur_y = lcu->position_px.y + yy;
|
int cur_y = lcu->position_px.y + yy;
|
||||||
|
|
||||||
|
@ -782,12 +782,6 @@ static void encoder_state_worker_encode_lcu_search(void * opaque)
|
||||||
if (xx % UVG_HASHMAP_BLOCKSIZE == 0 && yy % UVG_HASHMAP_BLOCKSIZE == 0) {
|
if (xx % UVG_HASHMAP_BLOCKSIZE == 0 && yy % UVG_HASHMAP_BLOCKSIZE == 0) {
|
||||||
state->tile->frame->ibc_hashmap_pos_to_hash[(cur_y / UVG_HASHMAP_BLOCKSIZE)*state->tile->frame->ibc_hashmap_pos_to_hash_stride + cur_x / UVG_HASHMAP_BLOCKSIZE] = crc;
|
state->tile->frame->ibc_hashmap_pos_to_hash[(cur_y / UVG_HASHMAP_BLOCKSIZE)*state->tile->frame->ibc_hashmap_pos_to_hash_stride + cur_x / UVG_HASHMAP_BLOCKSIZE] = crc;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if (state->encoder_control->chroma_format != UVG_CSP_400) {
|
|
||||||
crc ^= uvg_crc32c_4x4(&frame->rec->u[(cur_y>>1) * (frame->rec->stride>>1) + (cur_x>>1)],frame->rec->stride>>1);
|
|
||||||
crc ^= uvg_crc32c_4x4(&frame->rec->v[(cur_y>>1) * (frame->rec->stride>>1) + (cur_x>>1)],frame->rec->stride>>1);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
uvg_hashmap_insert(frame->ibc_hashmap_row[ctu_row], crc, ((cur_x&0xffff)<<16) | (cur_y&0xffff));
|
uvg_hashmap_insert(frame->ibc_hashmap_row[ctu_row], crc, ((cur_x&0xffff)<<16) | (cur_y&0xffff));
|
||||||
items++;
|
items++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -489,7 +489,7 @@ static double calc_ibc_mvd_cost(const encoder_state_t *state,
|
||||||
temp_bitcost += mvd_cost;
|
temp_bitcost += mvd_cost;
|
||||||
}
|
}
|
||||||
*bitcost = temp_bitcost;
|
*bitcost = temp_bitcost;
|
||||||
return temp_bitcost * state->lambda_sqrt;
|
return temp_bitcost * state->lambda;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1008,7 +1008,7 @@ static void search_pu_ibc(encoder_state_t * const state,
|
||||||
info->width,
|
info->width,
|
||||||
(best_mv.x >> INTERNAL_MV_PREC),
|
(best_mv.x >> INTERNAL_MV_PREC),
|
||||||
(best_mv.y >> INTERNAL_MV_PREC));
|
(best_mv.y >> INTERNAL_MV_PREC));
|
||||||
best_cost += best_bits * info->state->lambda_sqrt;
|
best_cost += best_bits * info->state->lambda;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1069,7 +1069,7 @@ static void search_pu_ibc(encoder_state_t * const state,
|
||||||
if(amvp[0].size > 0) {
|
if(amvp[0].size > 0) {
|
||||||
const uint8_t best_key = amvp[0].keys[0];
|
const uint8_t best_key = amvp[0].keys[0];
|
||||||
amvp[0].bits[best_key] += total_bits;
|
amvp[0].bits[best_key] += total_bits;
|
||||||
amvp[0].cost[best_key] += (total_bits)* state->lambda_sqrt;
|
amvp[0].cost[best_key] += (total_bits)* state->lambda;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1240,7 +1240,7 @@ static int uvg_search_hash_cu_ibc(encoder_state_t* const state,
|
||||||
|
|
||||||
if (!found_block) return;
|
if (!found_block) return;
|
||||||
|
|
||||||
*inter_cost = 2;
|
*inter_cost = ibc_cost;
|
||||||
*inter_bitcost = ibc_bitcost;
|
*inter_bitcost = ibc_bitcost;
|
||||||
|
|
||||||
uint32_t merge_idx;
|
uint32_t merge_idx;
|
||||||
|
@ -1268,7 +1268,7 @@ static int uvg_search_hash_cu_ibc(encoder_state_t* const state,
|
||||||
|
|
||||||
|
|
||||||
const int ibc_flag = CTX_ENTROPY_FBITS(&state->search_cabac.ctx.ibc_flag[0], 1);
|
const int ibc_flag = CTX_ENTROPY_FBITS(&state->search_cabac.ctx.ibc_flag[0], 1);
|
||||||
ibc_cost += ibc_flag * state->lambda_sqrt;
|
ibc_cost += ibc_flag * state->lambda;
|
||||||
ibc_bitcost += ibc_flag;
|
ibc_bitcost += ibc_flag;
|
||||||
|
|
||||||
uvg_inter_recon_cu(
|
uvg_inter_recon_cu(
|
||||||
|
|
Loading…
Reference in a new issue