Commit d5d07b18 authored by Fiona Glaser's avatar Fiona Glaser Committed by Loren Merritt
Browse files

omit delta_quant in i16x16 blocks with no residual

(all other block types were already covered, but i16x16 cbp is special)
parent bfa2eac7
......@@ -304,6 +304,15 @@ static void x264_cabac_mb_qp_delta( x264_t *h, x264_cabac_t *cb )
int i_dqp = h->mb.i_qp - h->mb.i_last_qp;
int ctx;
/* Avoid writing a delta quant if we have an empty i16x16 block, e.g. in a completely flat background area */
if( h->mb.i_type == I_16x16 && !h->mb.cbp[h->mb.i_mb_xy] )
{
#ifndef RD_SKIP_BS
h->mb.i_qp = h->mb.i_last_qp;
#endif
i_dqp = 0;
}
/* No need to test for PCM / SKIP */
if( h->mb.i_last_dqp &&
( h->mb.type[i_mbn_xy] == I_16x16 || (h->mb.cbp[i_mbn_xy]&0x3f) ) )
......
......@@ -220,6 +220,17 @@ static void block_residual_write_cavlc( x264_t *h, bs_t *s, int i_idx, int16_t *
static void cavlc_qp_delta( x264_t *h, bs_t *s )
{
int i_dqp = h->mb.i_qp - h->mb.i_last_qp;
/* Avoid writing a delta quant if we have an empty i16x16 block, e.g. in a completely flat background area */
if( h->mb.i_type == I_16x16 && !(h->mb.i_cbp_luma | h->mb.i_cbp_chroma)
&& !array_non_zero(h->dct.luma16x16_dc) )
{
#ifndef RD_SKIP_BS
h->mb.i_qp = h->mb.i_last_qp;
#endif
i_dqp = 0;
}
if( i_dqp )
{
if( i_dqp < -26 )
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment