From 9b74d435324cc61e1d63709e13e1ad755fa4ce63 Mon Sep 17 00:00:00 2001 From: Lu-Anxiao Date: Mon, 9 Oct 2023 20:47:44 +0800 Subject: [PATCH 4/7] Set sRGB color space for non-video wall and no background colorfill cases. * [VP] Set sRGB color space for non-video wall and no background colorfill cases. This solves the regression caused by https://github.com/intel/media-driver/commit/a9c2df7b01c2f33775c676f5490ea274410e9db2. Upstream-Status: Backport [https://github.com/intel/media-driver/commit/509ab5f6c6d447575c61e32d323aa4e7aa212fbd] Signed-off-by: Lim Siew Hoon --- .../linux/common/vp/ddi/media_libva_vp.c | 18 +++++++++++++----- .../linux/common/vp/ddi/ddi_vp_functions.cpp | 19 ++++++++++++++----- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/media_driver/linux/common/vp/ddi/media_libva_vp.c b/media_driver/linux/common/vp/ddi/media_libva_vp.c index 3c7407249..dcff2555a 100644 --- a/media_driver/linux/common/vp/ddi/media_libva_vp.c +++ b/media_driver/linux/common/vp/ddi/media_libva_vp.c @@ -1148,7 +1148,7 @@ DdiVp_SetProcPipelineParams( // Background Colorfill // According to libva definition, if alpha in output background color is zero, then colorfill is not needed - if ((pPipelineParam->output_background_color >> 24) != 0) + if ((pPipelineParam->output_background_color >> 24) != 0 || pVpHalTgtSurf->ColorSpace == CSpace_sRGB) { if (pVpHalRenderParams->pColorFillParams == nullptr) { @@ -1157,10 +1157,18 @@ DdiVp_SetProcPipelineParams( DDI_CHK_NULL(pVpHalRenderParams->pColorFillParams, "Null pColorFillParams.", VA_STATUS_ERROR_UNKNOWN); - // set background colorfill option - pVpHalRenderParams->pColorFillParams->Color = pPipelineParam->output_background_color; - pVpHalRenderParams->pColorFillParams->bYCbCr = false; - pVpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB; + if (pVpHalTgtSurf->ColorSpace == CSpace_sRGB && (pPipelineParam->output_background_color >> 24) == 0) + { + // set color space for sRGB output + pVpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB; + } + else + { + // set background colorfill option + pVpHalRenderParams->pColorFillParams->Color = pPipelineParam->output_background_color; + pVpHalRenderParams->pColorFillParams->bYCbCr = false; + pVpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB; + } }else { MOS_FreeMemAndSetNull(pVpHalRenderParams->pColorFillParams); diff --git a/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp b/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp index 7ebad0b59..7c2e4a0e5 100644 --- a/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp +++ b/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp @@ -2111,8 +2111,9 @@ VAStatus DdiVpFunctions::SetBackgroundColorfill( { DDI_VP_FUNC_ENTER; DDI_VP_CHK_NULL(vpHalRenderParams, "nullptr vpHalRenderParams.", VA_STATUS_ERROR_INVALID_PARAMETER); + DDI_VP_CHK_NULL(vpHalRenderParams->pTarget[0],"nullptr pTarget[0].", VA_STATUS_ERROR_INVALID_PARAMETER); - if ((outBackGroundcolor >> 24) != 0) + if ((outBackGroundcolor >> 24) != 0 || vpHalRenderParams->pTarget[0]->ColorSpace == CSpace_sRGB) { if (vpHalRenderParams->pColorFillParams == nullptr) { @@ -2121,10 +2122,18 @@ VAStatus DdiVpFunctions::SetBackgroundColorfill( DDI_VP_CHK_NULL(vpHalRenderParams->pColorFillParams, "nullptr pColorFillParams.", VA_STATUS_ERROR_UNKNOWN); - // set background colorfill option - vpHalRenderParams->pColorFillParams->Color = outBackGroundcolor; - vpHalRenderParams->pColorFillParams->bYCbCr = false; - vpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB; + if (vpHalRenderParams->pTarget[0]->ColorSpace == CSpace_sRGB && (outBackGroundcolor >> 24) == 0) + { + // set color space for sRGB output + vpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB; + } + else + { + // set background colorfill option + vpHalRenderParams->pColorFillParams->Color = outBackGroundcolor; + vpHalRenderParams->pColorFillParams->bYCbCr = false; + vpHalRenderParams->pColorFillParams->CSpace = CSpace_sRGB; + } } else { -- 2.40.1