1 /*
2 * Copyright (c) 2014-2020, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file vphal_render_vebox_util_base.c
24 //! \brief Common utility interface used in Vebox
25 //! \details Common utility interface used in Vebox which are platform independent
26 //!
27 #include "vphal_render_vebox_util_base.h"
28
VPHal_VpHalCspace2MhwCspace(VPHAL_CSPACE cspace)29 MHW_CSPACE VPHal_VpHalCspace2MhwCspace(VPHAL_CSPACE cspace)
30 {
31 switch (cspace)
32 {
33 case CSpace_Source:
34 return MHW_CSpace_Source;
35
36 case CSpace_RGB:
37 return MHW_CSpace_RGB;
38
39 case CSpace_YUV:
40 return MHW_CSpace_YUV;
41
42 case CSpace_Gray:
43 return MHW_CSpace_Gray;
44
45 case CSpace_Any:
46 return MHW_CSpace_Any;
47
48 case CSpace_sRGB:
49 return MHW_CSpace_sRGB;
50
51 case CSpace_stRGB:
52 return MHW_CSpace_stRGB;
53
54 case CSpace_BT601:
55 return MHW_CSpace_BT601;
56
57 case CSpace_BT601_FullRange:
58 return MHW_CSpace_BT601_FullRange;
59
60 case CSpace_BT709:
61 return MHW_CSpace_BT709;
62
63 case CSpace_BT709_FullRange:
64 return MHW_CSpace_BT709_FullRange;
65
66 case CSpace_xvYCC601:
67 return MHW_CSpace_xvYCC601;
68
69 case CSpace_xvYCC709:
70 return MHW_CSpace_xvYCC709;
71
72 case CSpace_BT601Gray:
73 return MHW_CSpace_BT601Gray;
74
75 case CSpace_BT601Gray_FullRange:
76 return MHW_CSpace_BT601Gray_FullRange;
77
78 case CSpace_BT2020:
79 return MHW_CSpace_BT2020;
80
81 case CSpace_BT2020_RGB:
82 return MHW_CSpace_BT2020_RGB;
83
84 case CSpace_BT2020_FullRange:
85 return MHW_CSpace_BT2020_FullRange;
86
87 case CSpace_BT2020_stRGB:
88 return MHW_CSpace_BT2020_stRGB;
89
90 case CSpace_None:
91 default:
92 return MHW_CSpace_None;
93 }
94 }
95
VpHal_InitVeboxSurfaceParams(PVPHAL_SURFACE pVpHalVeboxSurface,PMHW_VEBOX_SURFACE_PARAMS pMhwVeboxSurface)96 MOS_STATUS VpHal_InitVeboxSurfaceParams(
97 PVPHAL_SURFACE pVpHalVeboxSurface,
98 PMHW_VEBOX_SURFACE_PARAMS pMhwVeboxSurface)
99 {
100 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
101
102 VPHAL_RENDER_CHK_NULL(pVpHalVeboxSurface);
103 VPHAL_RENDER_CHK_NULL(pMhwVeboxSurface);
104
105 MOS_ZeroMemory(pMhwVeboxSurface, sizeof(*pMhwVeboxSurface));
106 pMhwVeboxSurface->bActive = true;
107 pMhwVeboxSurface->Format = pVpHalVeboxSurface->Format;
108 pMhwVeboxSurface->dwWidth = pVpHalVeboxSurface->dwWidth;
109 pMhwVeboxSurface->dwHeight = pVpHalVeboxSurface->dwHeight;
110 pMhwVeboxSurface->dwPitch = pVpHalVeboxSurface->dwPitch;
111 pMhwVeboxSurface->dwBitDepth = pVpHalVeboxSurface->dwDepth;
112 pMhwVeboxSurface->TileType = pVpHalVeboxSurface->TileType;
113 pMhwVeboxSurface->TileModeGMM = pVpHalVeboxSurface->TileModeGMM;
114 pMhwVeboxSurface->bGMMTileEnabled = pVpHalVeboxSurface->bGMMTileEnabled;
115 pMhwVeboxSurface->rcSrc = pVpHalVeboxSurface->rcSrc;
116 pMhwVeboxSurface->rcMaxSrc = pVpHalVeboxSurface->rcMaxSrc;
117 pMhwVeboxSurface->bVEBOXCroppingUsed = pVpHalVeboxSurface->bVEBOXCroppingUsed;
118 pMhwVeboxSurface->pOsResource = &pVpHalVeboxSurface->OsResource;
119 pMhwVeboxSurface->bIsCompressed = pVpHalVeboxSurface->bIsCompressed;
120 pMhwVeboxSurface->dwCompressionFormat = pVpHalVeboxSurface->CompressionFormat;
121 pMhwVeboxSurface->CompressionMode = pVpHalVeboxSurface->CompressionMode;
122
123 if (pVpHalVeboxSurface->dwPitch > 0)
124 {
125 pMhwVeboxSurface->dwUYoffset = ((pVpHalVeboxSurface->UPlaneOffset.iSurfaceOffset - pVpHalVeboxSurface->YPlaneOffset.iSurfaceOffset) / pVpHalVeboxSurface->dwPitch) + pVpHalVeboxSurface->UPlaneOffset.iYOffset;
126 }
127
128 finish:
129 return eStatus;
130 }
131
VpHal_InitVeboxSurfaceStateCmdParams(PVPHAL_VEBOX_SURFACE_STATE_CMD_PARAMS pVpHalVeboxSurfaceStateCmdParams,PMHW_VEBOX_SURFACE_STATE_CMD_PARAMS pMhwVeboxSurfaceStateCmdParams)132 MOS_STATUS VpHal_InitVeboxSurfaceStateCmdParams(
133 PVPHAL_VEBOX_SURFACE_STATE_CMD_PARAMS pVpHalVeboxSurfaceStateCmdParams,
134 PMHW_VEBOX_SURFACE_STATE_CMD_PARAMS pMhwVeboxSurfaceStateCmdParams)
135 {
136 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
137
138 VPHAL_RENDER_CHK_NULL(pVpHalVeboxSurfaceStateCmdParams);
139 VPHAL_RENDER_CHK_NULL(pMhwVeboxSurfaceStateCmdParams);
140
141 MOS_ZeroMemory(pMhwVeboxSurfaceStateCmdParams, sizeof(*pMhwVeboxSurfaceStateCmdParams));
142
143 pMhwVeboxSurfaceStateCmdParams->bDIEnable = pVpHalVeboxSurfaceStateCmdParams->bDIEnable;
144 pMhwVeboxSurfaceStateCmdParams->b3DlutEnable = pVpHalVeboxSurfaceStateCmdParams->b3DlutEnable;
145
146 if (pVpHalVeboxSurfaceStateCmdParams->pSurfInput)
147 {
148 VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
149 pVpHalVeboxSurfaceStateCmdParams->pSurfInput,
150 &pMhwVeboxSurfaceStateCmdParams->SurfInput));
151 pMhwVeboxSurfaceStateCmdParams->SurfInput.dwYoffset = pVpHalVeboxSurfaceStateCmdParams->pSurfInput->YPlaneOffset.iYOffset;
152 }
153 if (pVpHalVeboxSurfaceStateCmdParams->pSurfOutput)
154 {
155 pMhwVeboxSurfaceStateCmdParams->bOutputValid = true;
156 VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
157 pVpHalVeboxSurfaceStateCmdParams->pSurfOutput,
158 &pMhwVeboxSurfaceStateCmdParams->SurfOutput));
159 pMhwVeboxSurfaceStateCmdParams->SurfOutput.dwYoffset = pVpHalVeboxSurfaceStateCmdParams->pSurfOutput->YPlaneOffset.iYOffset;
160 }
161 if (pVpHalVeboxSurfaceStateCmdParams->pSurfSTMM)
162 {
163 VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
164 pVpHalVeboxSurfaceStateCmdParams->pSurfSTMM,
165 &pMhwVeboxSurfaceStateCmdParams->SurfSTMM));
166 }
167 if (pVpHalVeboxSurfaceStateCmdParams->pSurfDNOutput)
168 {
169 VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
170 pVpHalVeboxSurfaceStateCmdParams->pSurfDNOutput,
171 &pMhwVeboxSurfaceStateCmdParams->SurfDNOutput));
172 }
173
174 if (pVpHalVeboxSurfaceStateCmdParams->pSurfSkinScoreOutput)
175 {
176 VPHAL_RENDER_CHK_STATUS(VpHal_InitVeboxSurfaceParams(
177 pVpHalVeboxSurfaceStateCmdParams->pSurfSkinScoreOutput,
178 &pMhwVeboxSurfaceStateCmdParams->SurfSkinScoreOutput));
179 }
180
181 finish:
182 return eStatus;
183 }
184