[NORMATIVE] Film grain chroma_scaling_from_luma bug fix BUG=aomedia:1649 Change-Id: I2638bc1d5e825fcbc8b99bfad57e66b95a3abcec
diff --git a/aom_dsp/grain_synthesis.c b/aom_dsp/grain_synthesis.c index 880144d..81794e5 100644 --- a/aom_dsp/grain_synthesis.c +++ b/aom_dsp/grain_synthesis.c
@@ -443,7 +443,7 @@ if (params->num_y_points > 0) ++num_pos_chroma; int rounding_offset = (1 << (params->ar_coeff_shift - 1)); - if (params->num_cb_points) { + if (params->num_cb_points || params->chroma_scaling_from_luma) { init_random_generator(7 << 5, params->random_seed); for (int i = 0; i < chroma_block_size_y; i++) @@ -453,7 +453,7 @@ ((1 << gauss_sec_shift) >> 1)) >> gauss_sec_shift; } - if (params->num_cr_points) { + if (params->num_cr_points || params->chroma_scaling_from_luma) { init_random_generator(11 << 5, params->random_seed); for (int i = 0; i < chroma_block_size_y; i++) @@ -502,12 +502,12 @@ exit(1); } } - if (params->num_cb_points) + if (params->num_cb_points || params->chroma_scaling_from_luma) cb_grain_block[i * chroma_grain_stride + j] = clamp(cb_grain_block[i * chroma_grain_stride + j] + ((wsum_cb + rounding_offset) >> params->ar_coeff_shift), grain_min, grain_max); - if (params->num_cr_points) + if (params->num_cr_points || params->chroma_scaling_from_luma) cr_grain_block[i * chroma_grain_stride + j] = clamp(cr_grain_block[i * chroma_grain_stride + j] + ((wsum_cr + rounding_offset) >> params->ar_coeff_shift), @@ -571,8 +571,10 @@ int rounding_offset = (1 << (params->scaling_shift - 1)); int apply_y = params->num_y_points > 0 ? 1 : 0; - int apply_cb = params->num_cb_points > 0 ? 1 : 0; - int apply_cr = params->num_cr_points > 0 ? 1 : 0; + int apply_cb = + (params->num_cb_points > 0 || params->chroma_scaling_from_luma) ? 1 : 0; + int apply_cr = + (params->num_cr_points > 0 || params->chroma_scaling_from_luma) ? 1 : 0; if (params->chroma_scaling_from_luma) { cb_mult = 0; // fixed scale @@ -679,8 +681,12 @@ int rounding_offset = (1 << (params->scaling_shift - 1)); int apply_y = params->num_y_points > 0 ? 1 : 0; - int apply_cb = params->num_cb_points > 0 ? 1 : 0; - int apply_cr = params->num_cr_points > 0 ? 1 : 0; + int apply_cb = + (params->num_cb_points > 0 || params->chroma_scaling_from_luma) > 0 ? 1 + : 0; + int apply_cr = + (params->num_cr_points > 0 || params->chroma_scaling_from_luma) > 0 ? 1 + : 0; if (params->chroma_scaling_from_luma) { cb_mult = 0; // fixed scale