mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-24 10:34:05 +00:00
Fixed inter deblocking by setting correct CU residual info on transform split
This commit is contained in:
parent
1b2b3c19bb
commit
7a53bddead
|
@ -1112,7 +1112,15 @@ void encode_coding_tree(encoder_control *encoder, uint16_t x_ctb,
|
||||||
ti.cb_top[2] = (ti.cb[0] & 0x4 || ti.cb[1] & 0x4 || ti.cb[2] & 0x4 || ti.cb[3] & 0x4)?1:0;
|
ti.cb_top[2] = (ti.cb[0] & 0x4 || ti.cb[1] & 0x4 || ti.cb[2] & 0x4 || ti.cb[3] & 0x4)?1:0;
|
||||||
|
|
||||||
residual = ti.cb_top[0] | ti.cb_top[1] | ti.cb_top[2];
|
residual = ti.cb_top[0] | ti.cb_top[1] | ti.cb_top[2];
|
||||||
|
if(depth == 0) {
|
||||||
|
picture_set_block_residual(encoder->in.cur_pic,x_ctb ,y_ctb ,depth+1,ti.cb[0] & 0x1);
|
||||||
|
picture_set_block_residual(encoder->in.cur_pic,x_ctb + 4,y_ctb ,depth+1,ti.cb[1] & 0x1);
|
||||||
|
picture_set_block_residual(encoder->in.cur_pic,x_ctb ,y_ctb + 4,depth+1,ti.cb[2] & 0x1);
|
||||||
|
picture_set_block_residual(encoder->in.cur_pic,x_ctb + 4,y_ctb + 4,depth+1,ti.cb[3] & 0x1);
|
||||||
|
} else {
|
||||||
picture_set_block_residual(encoder->in.cur_pic,x_ctb,y_ctb,depth,ti.cb_top[0]);
|
picture_set_block_residual(encoder->in.cur_pic,x_ctb,y_ctb,depth,ti.cb_top[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
cabac.ctx = &g_cu_qt_root_cbf_model;
|
cabac.ctx = &g_cu_qt_root_cbf_model;
|
||||||
CABAC_BIN(&cabac, residual, "rqt_root_cbf");
|
CABAC_BIN(&cabac, residual, "rqt_root_cbf");
|
||||||
|
|
|
@ -190,8 +190,8 @@ void filter_deblock_edge_luma(encoder_control *encoder,
|
||||||
if((block_idx & 1) == 0)
|
if((block_idx & 1) == 0)
|
||||||
{
|
{
|
||||||
// CU in the side we are filtering, update every 8-pixels
|
// CU in the side we are filtering, update every 8-pixels
|
||||||
cu_p = &encoder->in.cur_pic->cu_array[MAX_DEPTH][(x_cu - (dir == EDGE_VER) + (dir == EDGE_HOR ? block_idx/2 : 0)) +
|
cu_p = &encoder->in.cur_pic->cu_array[MAX_DEPTH][(x_cu - (dir == EDGE_VER) + (dir == EDGE_HOR ? block_idx>>1 : 0)) +
|
||||||
(y_cu - (dir == EDGE_HOR) + (dir == EDGE_VER ? block_idx/2 : 0))
|
(y_cu - (dir == EDGE_HOR) + (dir == EDGE_VER ? block_idx>>1 : 0))
|
||||||
* (encoder->in.width_in_lcu << MAX_DEPTH)];
|
* (encoder->in.width_in_lcu << MAX_DEPTH)];
|
||||||
// Filter strength
|
// Filter strength
|
||||||
strength = 0;
|
strength = 0;
|
||||||
|
@ -199,12 +199,11 @@ void filter_deblock_edge_luma(encoder_control *encoder,
|
||||||
if(cu_q->type == CU_INTRA || cu_p->type == CU_INTRA) {
|
if(cu_q->type == CU_INTRA || cu_p->type == CU_INTRA) {
|
||||||
strength = 2;
|
strength = 2;
|
||||||
// Non-zero residual and transform boundary
|
// Non-zero residual and transform boundary
|
||||||
} else if((cu_q->residual || cu_p->residual) && (cu_q->depth==0 ? !((dir == EDGE_VER ? y_cu + (block_idx>>1) : x_cu + (block_idx>>1) )&0x3) : 1 ) ) {
|
} else if(cu_q->residual || cu_p->residual) {
|
||||||
strength = 1;
|
strength = 1;
|
||||||
// Absolute motion vector diff between blocks >= 1 (Integer pixel)
|
// Absolute motion vector diff between blocks >= 1 (Integer pixel)
|
||||||
} else if((abs(cu_q->inter.mv[0] - cu_p->inter.mv[0]) >= 4) || (abs(cu_q->inter.mv[1] - cu_p->inter.mv[1]) >= 4)) {
|
} else if((abs(cu_q->inter.mv[0] - cu_p->inter.mv[0]) >= 4) || (abs(cu_q->inter.mv[1] - cu_p->inter.mv[1]) >= 4)) {
|
||||||
strength = 1;
|
strength = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
tc_index = CLIP(0, 51 + 2, (int32_t)(qp + 2*(strength - 1) + (tc_offset_div2 << 1)));
|
tc_index = CLIP(0, 51 + 2, (int32_t)(qp + 2*(strength - 1) + (tc_offset_div2 << 1)));
|
||||||
tc = g_tc_table_8x8[tc_index] * bitdepth_scale;
|
tc = g_tc_table_8x8[tc_index] * bitdepth_scale;
|
||||||
|
|
Loading…
Reference in a new issue