summaryrefslogtreecommitdiffstats
path: root/recipes-multimedia/libva/files/0004-Set-sRGB-color-space-for-non-video-wall-and-no-backg.patch
blob: 501bde3c4ad59f7a47418fe53f42f5064b096d0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
From 9b74d435324cc61e1d63709e13e1ad755fa4ce63 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 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 <siew.hoon.lim@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 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