diff options
author | Samson Tam <[email protected]> | 2024-05-15 17:32:29 -0400 |
---|---|---|
committer | Alex Deucher <[email protected]> | 2024-06-05 11:25:14 -0400 |
commit | 5d74be8c3a941993299c78f7d3d70c27f826af0b (patch) | |
tree | cd63edc09e88e009ff32e4b40a41f4cca159ec56 | |
parent | dbe2c4c8ab92211a57ca4d23bf8eaf6f23e31a54 (diff) |
drm/amd/display: fix YUV video color corruption in DCN401
[Why]
Missing check causes sequence error which results in chroma
filter coefficients not being updated in certain modes
when we display YUV video in fullscreen. This results in
color corruption in video
[How]
Add back chroma_coef_mode check in dscl_set_scl_filter
so that filter coefficients are calculated and updated when
we have YUV surface
Reviewed-by: Alvin Lee <[email protected]>
Acked-by: Zaeem Mohamed <[email protected]>
Signed-off-by: Samson Tam <[email protected]>
Tested-by: Daniel Wheeler <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c b/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c index 6cb3fa4b585c..505929800426 100644 --- a/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c +++ b/drivers/gpu/drm/amd/display/dc/dpp/dcn401/dcn401_dpp_dscl.c @@ -297,17 +297,21 @@ static void dpp401_dscl_set_scl_filter( if ((dpp->base.ctx->dc->config.use_spl) && (!dpp->base.ctx->dc->debug.disable_spl)) { filter_h = scl_data->dscl_prog_data.filter_h; filter_v = scl_data->dscl_prog_data.filter_v; - filter_h_c = scl_data->dscl_prog_data.filter_h_c; - filter_v_c = scl_data->dscl_prog_data.filter_v_c; + if (chroma_coef_mode) { + filter_h_c = scl_data->dscl_prog_data.filter_h_c; + filter_v_c = scl_data->dscl_prog_data.filter_v_c; + } } else { filter_h = dpp401_dscl_get_filter_coeffs_64p( scl_data->taps.h_taps, scl_data->ratios.horz); filter_v = dpp401_dscl_get_filter_coeffs_64p( scl_data->taps.v_taps, scl_data->ratios.vert); - filter_h_c = dpp401_dscl_get_filter_coeffs_64p( - scl_data->taps.h_taps_c, scl_data->ratios.horz_c); - filter_v_c = dpp401_dscl_get_filter_coeffs_64p( - scl_data->taps.v_taps_c, scl_data->ratios.vert_c); + if (chroma_coef_mode) { + filter_h_c = dpp401_dscl_get_filter_coeffs_64p( + scl_data->taps.h_taps_c, scl_data->ratios.horz_c); + filter_v_c = dpp401_dscl_get_filter_coeffs_64p( + scl_data->taps.v_taps_c, scl_data->ratios.vert_c); + } } h_2tap_hardcode_coef_en = scl_data->taps.h_taps < 3 |