intel-media-driver: Fix corruption issue for no background colorfill cases

Set sRGB color space for non-video wall and no background
colorfill cases

Signed-off-by: Chan, Xu Pian <xu.pian.chan@intel.com>
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
This commit is contained in:
Chan, Xu Pian 2023-10-12 20:24:52 +08:00 committed by Anuj Mittal
parent 6883d43ace
commit dc5a3429cb
2 changed files with 96 additions and 0 deletions

View File

@ -0,0 +1,95 @@
From b2c514337d2bc6015292aac5b57a603f8ad4fed5 Mon Sep 17 00:00:00 2001
From: Lu-Anxiao <anxiao.lu@intel.com>
Date: Mon, 9 Oct 2023 20:47:44 +0800
Subject: [PATCH] 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: Chan, Xu Pian <xu.pian.chan@intel.com>
---
.../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 2ef610d35..4e10905ff 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 fa02bf147..fe64bb8ae 100644
--- a/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp
+++ b/media_softlet/linux/common/vp/ddi/ddi_vp_functions.cpp
@@ -2085,8 +2085,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)
{
@@ -2095,10 +2096,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.25.1

View File

@ -29,6 +29,7 @@ SRC_URI = "git://github.com/intel/media-driver.git;protocol=https;nobranch=1 \
file://0004-Disable-vp9-padding-on-mtl.patch \
file://0001-Fix-FC-Corruption-When-Blending-without-Colorfill.patch \
file://0001-Fix-FC-Corruption-When-Blending-without-Colorfill-in.patch \
file://0001-Set-sRGB-color-space-for-non-video-wall-and-no-backg.patch \
"
SRCREV = "cf942344b9e439d19873f1d47c0c890d7c63b6ad"