blob: 01440be3b91db42012bc5c0e16b614ea54eb5788 [file] [log] [blame]
/*
* Copyright (c) 2019, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
//!
//! \file vp_vebox_cmd_packet_g12.cpp
//! \brief vebox packet which used in by mediapipline.
//! \details vebox packet provide the structures and generate the cmd buffer which mediapipline will used.
//!
#include "vp_vebox_cmd_packet_g12.h"
#include "vp_render_sfc_m12.h"
#include "vp_utils.h"
const uint32_t dwDenoiseASDThreshold[NOISEFACTOR_MAX + 1] = {
512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542,
544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574,
576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606,
608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638,
640 };
const uint32_t dwDenoiseHistoryDelta[NOISEFACTOR_MAX + 1] = {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
8 };
const uint32_t dwDenoiseMaximumHistory[NOISEFACTOR_MAX + 1] = {
144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208 };
const uint32_t dwDenoiseSTADThreshold[NOISEFACTOR_MAX + 1] = {
2048, 2052, 2056, 2060, 2064, 2068, 2072, 2076, 2080, 2084, 2088, 2092, 2096, 2100, 2104, 2108,
2112, 2116, 2120, 2124, 2128, 2132, 2136, 2140, 2144, 2148, 2152, 2156, 2160, 2164, 2168, 2172,
2176, 2180, 2184, 2188, 2192, 2196, 2200, 2204, 2208, 2212, 2216, 2220, 2224, 2228, 2232, 2236,
2240, 2244, 2248, 2252, 2256, 2260, 2264, 2268, 2272, 2276, 2280, 2284, 2288, 2292, 2296, 2300,
2304 };
const uint32_t dwDenoiseSCMThreshold[NOISEFACTOR_MAX + 1] = {
512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542,
544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566, 568, 570, 572, 574,
576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596, 598, 600, 602, 604, 606,
608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638,
640 };
const uint32_t dwDenoiseMPThreshold[NOISEFACTOR_MAX + 1] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2 };
const uint32_t dwLTDThreshold[NOISEFACTOR_MAX + 1] = {
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, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
128 };
const uint32_t dwTDThreshold[NOISEFACTOR_MAX + 1] = {
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
192 };
const uint32_t dwGoodNeighborThreshold[NOISEFACTOR_MAX + 1] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0 };
const uint32_t dwPixRangeThreshold0[NOISEFACTOR_MAX + 1] = {
32, 37, 42, 47, 52, 57, 62, 67, 72, 77, 82, 87, 92, 97, 102, 107,
112, 117, 122, 127, 132, 137, 142, 147, 152, 157, 162, 167, 172, 177, 182, 187,
192, 198, 204, 210, 216, 222, 228, 234, 240, 246, 252, 258, 264, 270, 276, 282,
288, 294, 300, 306, 312, 318, 324, 330, 336, 342, 348, 354, 360, 366, 372, 378,
384 };
const uint32_t dwPixRangeThreshold1[NOISEFACTOR_MAX + 1] = {
64, 70, 76, 82, 88, 94, 100, 106, 112, 118, 124, 130, 136, 142, 148, 154,
160, 166, 172, 178, 184, 190, 196, 202, 208, 214, 220, 226, 232, 238, 244, 250,
256, 266, 276, 286, 296, 306, 316, 326, 336, 346, 356, 366, 376, 386, 396, 406,
416, 426, 436, 446, 456, 466, 476, 486, 496, 506, 516, 526, 536, 546, 556, 566,
576 };
const uint32_t dwPixRangeThreshold2[NOISEFACTOR_MAX + 1] = {
128, 140, 152, 164, 176, 188, 200, 212, 224, 236, 248, 260, 272, 284, 296, 308,
320, 332, 344, 356, 368, 380, 392, 404, 416, 428, 440, 452, 464, 476, 488, 500,
512, 524, 536, 548, 560, 572, 584, 596, 608, 620, 632, 644, 656, 668, 680, 692,
704, 716, 728, 740, 752, 764, 776, 788, 800, 812, 824, 836, 848, 860, 872, 884,
896 };
const uint32_t dwPixRangeThreshold3[NOISEFACTOR_MAX + 1] = {
128, 144, 160, 176, 192, 208, 224, 240, 256, 272, 288, 304, 320, 336, 352, 368,
384, 400, 416, 432, 448, 464, 480, 496, 512, 528, 544, 560, 576, 592, 608, 624,
640, 660, 680, 700, 720, 740, 760, 780, 800, 820, 840, 860, 880, 900, 920, 940,
960, 980, 1000, 1020, 1040, 1060, 1080, 1100, 1120, 1140, 1160, 1180, 1200, 1220, 1240, 1260,
1280 };
const uint32_t dwPixRangeThreshold4[NOISEFACTOR_MAX + 1] = {
128, 152, 176, 200, 224, 248, 272, 296, 320, 344, 368, 392, 416, 440, 464, 488,
512, 536, 560, 584, 608, 632, 656, 680, 704, 728, 752, 776, 800, 824, 848, 872,
896, 928, 960, 992, 1024, 1056, 1088, 1120, 1152, 1184, 1216, 1248, 1280, 1312, 1344, 1376,
1408, 1440, 1472, 1504, 1536, 1568, 1600, 1632, 1664, 1696, 1728, 1760, 1792, 1824, 1856, 1888,
1920 };
const uint32_t dwPixRangeThreshold5[NOISEFACTOR_MAX + 1] = {
128, 164, 200, 236, 272, 308, 344, 380, 416, 452, 488, 524, 560, 596, 632, 668,
704, 740, 776, 812, 848, 884, 920, 956, 992, 1028, 1064, 1100, 1136, 1172, 1208, 1244,
1280, 1320, 1360, 1400, 1440, 1480, 1520, 1560, 1600, 1640, 1680, 1720, 1760, 1800, 1840, 1880,
1920, 1960, 2000, 2040, 2080, 2120, 2160, 2200, 2240, 2280, 2320, 2360, 2400, 2440, 2480, 2520,
2560 };
const uint32_t dwPixRangeWeight0[NOISEFACTOR_MAX + 1] = {
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16 };
const uint32_t dwPixRangeWeight1[NOISEFACTOR_MAX + 1] = {
9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11,
11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
15 };
const uint32_t dwPixRangeWeight2[NOISEFACTOR_MAX + 1] = {
2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5,
6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
13 };
const uint32_t dwPixRangeWeight3[NOISEFACTOR_MAX + 1] = {
0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2,
2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7,
7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
10 };
const uint32_t dwPixRangeWeight4[NOISEFACTOR_MAX + 1] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4,
4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
7 };
const uint32_t dwPixRangeWeight5[NOISEFACTOR_MAX + 1] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
4 };
const uint32_t dwLTDThresholdUV[NOISEFACTOR_MAX + 1] = {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
8 };
const uint32_t dwTDThresholdUV[NOISEFACTOR_MAX + 1] = {
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
14 };
const uint32_t dwSTADThresholdUV[NOISEFACTOR_MAX + 1] = {
128, 128, 128, 128, 129, 129, 129, 129, 130, 130, 130, 130, 131, 131, 131, 131,
132, 132, 132, 132, 133, 133, 133, 133, 134, 134, 134, 134, 135, 135, 135, 135,
136, 136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 138, 139, 139, 139, 139,
140, 140, 140, 140, 141, 141, 141, 141, 142, 142, 142, 142, 143, 143, 143, 143,
144 };
namespace vp {
VpVeboxCmdPacketG12::VpVeboxCmdPacketG12(MediaTask * task, PVP_MHWINTERFACE hwInterface, PVpAllocator &allocator, VPMediaMemComp *mmc) :
CmdPacket(task),
VpVeboxCmdPacket(task, hwInterface, allocator, mmc)
{
}
VpVeboxCmdPacketG12::~VpVeboxCmdPacketG12()
{
}
void VpVeboxCmdPacketG12::GetLumaDefaultValue(
PVP_SAMPLER_STATE_DN_PARAM pLumaParams)
{
VP_RENDER_ASSERT(pLumaParams);
pLumaParams->dwDenoiseASDThreshold = NOISE_ABSSUMTEMPORALDIFF_THRESHOLD_DEFAULT_G12;
pLumaParams->dwDenoiseHistoryDelta = NOISE_HISTORY_DELTA_DEFAULT;
pLumaParams->dwDenoiseMaximumHistory = NOISE_HISTORY_MAX_DEFAULT_G12;
pLumaParams->dwDenoiseSTADThreshold = NOISE_SUMABSTEMPORALDIFF_THRESHOLD_DEFAULT_G12;
pLumaParams->dwDenoiseSCMThreshold = NOISE_SPATIALCOMPLEXITYMATRIX_THRESHOLD_DEFAULT_G12;
pLumaParams->dwDenoiseMPThreshold = NOISE_NUMMOTIONPIXELS_THRESHOLD_DEFAULT_G12;
pLumaParams->dwLTDThreshold = NOISE_LOWTEMPORALPIXELDIFF_THRESHOLD_DEFAULT_G12;
pLumaParams->dwTDThreshold = NOISE_TEMPORALPIXELDIFF_THRESHOLD_DEFAULT_G12;
}
MOS_STATUS VpVeboxCmdPacketG12::GetDnLumaParams(bool bDnEnabled, bool bAutoDetect, float fDnFactor, bool bRefValid, PVP_SAMPLER_STATE_DN_PARAM pLumaParams)
{
VpVeboxRenderData *pRenderData = GetLastExecRenderData();
VP_PUBLIC_CHK_NULL_RETURN(pRenderData);
VP_PUBLIC_CHK_NULL_RETURN(pLumaParams);
if (!bDnEnabled)
{
return MOS_STATUS_SUCCESS;
}
if (bAutoDetect)
{
GetLumaDefaultValue(pLumaParams);
}
else
{
uint32_t dwDenoiseFactor = (uint32_t)fDnFactor;
if (dwDenoiseFactor > NOISEFACTOR_MAX)
{
dwDenoiseFactor = NOISEFACTOR_MAX;
}
pLumaParams->dwDenoiseHistoryDelta = dwDenoiseHistoryDelta[dwDenoiseFactor];
pLumaParams->dwDenoiseMaximumHistory = dwDenoiseMaximumHistory[dwDenoiseFactor];
pLumaParams->dwDenoiseASDThreshold = dwDenoiseASDThreshold[dwDenoiseFactor];
pLumaParams->dwDenoiseSCMThreshold = dwDenoiseSCMThreshold[dwDenoiseFactor];
pLumaParams->dwDenoiseMPThreshold = dwDenoiseMPThreshold[dwDenoiseFactor];
pLumaParams->dwLTDThreshold = dwLTDThreshold[dwDenoiseFactor];
pLumaParams->dwTDThreshold = dwTDThreshold[dwDenoiseFactor];
pLumaParams->dwDenoiseSTADThreshold = dwDenoiseSTADThreshold[dwDenoiseFactor];
}
if (!bRefValid)
{
// setting LTDThreshold = TDThreshold = 0 forces SpatialDenoiseOnly
pLumaParams->dwLTDThreshold = 0;
pLumaParams->dwTDThreshold = 0;
}
return MOS_STATUS_SUCCESS;
}
MOS_STATUS VpVeboxCmdPacketG12::GetDnChromaParams(bool bChromaDenoise, bool bAutoDetect, float fDnFactor, PVPHAL_DNUV_PARAMS pChromaParams)
{
VpVeboxRenderData *pRenderData = GetLastExecRenderData();
VP_PUBLIC_CHK_NULL_RETURN(pRenderData);
VP_PUBLIC_CHK_NULL_RETURN(pChromaParams);
if (!bChromaDenoise)
{
return MOS_STATUS_SUCCESS;
}
pChromaParams->dwHistoryDeltaUV = NOISE_HISTORY_DELTA_DEFAULT;
pChromaParams->dwHistoryMaxUV = NOISE_HISTORY_MAX_DEFAULT;
if (bAutoDetect)
{
// Place holder: Add config for default chroma params.
}
else
{
uint32_t dwDenoiseFactor = (uint32_t)fDnFactor;
if (dwDenoiseFactor > NOISEFACTOR_MAX)
{
dwDenoiseFactor = NOISEFACTOR_MAX;
}
pChromaParams->dwLTDThresholdU =
pChromaParams->dwLTDThresholdV = dwLTDThresholdUV[dwDenoiseFactor];
pChromaParams->dwTDThresholdU =
pChromaParams->dwTDThresholdV = dwTDThresholdUV[dwDenoiseFactor];
pChromaParams->dwSTADThresholdU =
pChromaParams->dwSTADThresholdV = dwSTADThresholdUV[dwDenoiseFactor];
}
return MOS_STATUS_SUCCESS;
}
MOS_STATUS VpVeboxCmdPacketG12::ConfigLumaPixRange(bool bDnEnabled, bool bAutoDetect, float fDnFactor)
{
VpVeboxRenderData *pRenderData = GetLastExecRenderData();
uint32_t dwDenoiseFactor = (uint32_t)fDnFactor;
const uint32_t idxDefault = 0, idxMin = 1, idxMid = 2, idxMax = 3;
VP_PUBLIC_CHK_NULL_RETURN(pRenderData);
if (!bDnEnabled)
{
return MOS_STATUS_SUCCESS;
}
MHW_VEBOX_DNDI_PARAMS &dndiParams = pRenderData->GetDNDIParams();
uint32_t *dwPixRangeThrs = dndiParams.dwPixRangeThreshold;
uint32_t *dwPixRangeWgts = dndiParams.dwPixRangeWeight;
if (bAutoDetect)
{
// Initialize pixel range threshold array
dwPixRangeThrs[0] = NOISE_BLF_RANGE_THRESHOLD_S0_DEFAULT;
dwPixRangeThrs[1] = NOISE_BLF_RANGE_THRESHOLD_S1_DEFAULT;
dwPixRangeThrs[2] = NOISE_BLF_RANGE_THRESHOLD_S2_DEFAULT;
dwPixRangeThrs[3] = NOISE_BLF_RANGE_THRESHOLD_S3_DEFAULT;
dwPixRangeThrs[4] = NOISE_BLF_RANGE_THRESHOLD_S4_DEFAULT;
dwPixRangeThrs[5] = NOISE_BLF_RANGE_THRESHOLD_S5_DEFAULT;
// Initialize pixel range weight array
dwPixRangeWgts[0] = NOISE_BLF_RANGE_WGTS0_DEFAULT;
dwPixRangeWgts[1] = NOISE_BLF_RANGE_WGTS1_DEFAULT;
dwPixRangeWgts[2] = NOISE_BLF_RANGE_WGTS2_DEFAULT;
dwPixRangeWgts[3] = NOISE_BLF_RANGE_WGTS3_DEFAULT;
dwPixRangeWgts[4] = NOISE_BLF_RANGE_WGTS4_DEFAULT;
dwPixRangeWgts[5] = NOISE_BLF_RANGE_WGTS5_DEFAULT;
}
else
{
dwPixRangeThrs[0] = dwPixRangeThreshold0[dwDenoiseFactor];
dwPixRangeThrs[1] = dwPixRangeThreshold1[dwDenoiseFactor];
dwPixRangeThrs[2] = dwPixRangeThreshold2[dwDenoiseFactor];
dwPixRangeThrs[3] = dwPixRangeThreshold3[dwDenoiseFactor];
dwPixRangeThrs[4] = dwPixRangeThreshold4[dwDenoiseFactor];
dwPixRangeThrs[5] = dwPixRangeThreshold5[dwDenoiseFactor];
dwPixRangeWgts[0] = dwPixRangeWeight0[dwDenoiseFactor];
dwPixRangeWgts[1] = dwPixRangeWeight1[dwDenoiseFactor];
dwPixRangeWgts[2] = dwPixRangeWeight2[dwDenoiseFactor];
dwPixRangeWgts[3] = dwPixRangeWeight3[dwDenoiseFactor];
dwPixRangeWgts[4] = dwPixRangeWeight4[dwDenoiseFactor];
dwPixRangeWgts[5] = dwPixRangeWeight5[dwDenoiseFactor];
}
return MOS_STATUS_SUCCESS;
}
MOS_STATUS VpVeboxCmdPacketG12::ConfigChromaPixRange(bool bChromaDenoise, bool bAutoDetect, float fDnFactor)
{
// Place hold: Add config for chroma pix range.
return MOS_STATUS_SUCCESS;
}
MOS_STATUS VpVeboxCmdPacketG12::SetDIParams(
PVPHAL_SURFACE pSrcSurface)
{
// Place Hold: Add it back when enabling DI.
//PVPHAL_VEBOX_RENDER_DATA pRenderData = GetLastExecRenderData();
//VP_RENDER_CHK_NULL_RETURN(pRenderData);
//if (!m_PacketCaps.bDI)
//{
// VP_RENDER_NORMALMESSAGE("DI for Output is enabled in Vebox, pls recheck the features enabling in Vebox");
// return MOS_STATUS_INVALID_PARAMETER;
//}
//// Set DI params
//if (pRenderData->bDeinterlace)
//{
// pRenderData->VeboxDNDIParams.dwLumaTDMWeight = VPHAL_VEBOX_DI_LUMA_TDM_WEIGHT_NATUAL;
// pRenderData->VeboxDNDIParams.dwChromaTDMWeight = VPHAL_VEBOX_DI_CHROMA_TDM_WEIGHT_NATUAL;
// pRenderData->VeboxDNDIParams.dwSHCMDelta = VPHAL_VEBOX_DI_SHCM_DELTA_NATUAL;
// pRenderData->VeboxDNDIParams.dwSHCMThreshold = VPHAL_VEBOX_DI_SHCM_THRESHOLD_NATUAL;
// pRenderData->VeboxDNDIParams.dwSVCMDelta = VPHAL_VEBOX_DI_SVCM_DELTA_NATUAL;
// pRenderData->VeboxDNDIParams.dwSVCMThreshold = VPHAL_VEBOX_DI_SVCM_THRESHOLD_NATUAL;
// pRenderData->VeboxDNDIParams.bFasterConvergence = false;
// pRenderData->VeboxDNDIParams.bTDMLumaSmallerWindow = false;
// pRenderData->VeboxDNDIParams.bTDMChromaSmallerWindow = false;
// pRenderData->VeboxDNDIParams.dwLumaTDMCoringThreshold = VPHAL_VEBOX_DI_LUMA_TDM_CORING_THRESHOLD_NATUAL;
// pRenderData->VeboxDNDIParams.dwChromaTDMCoringThreshold = VPHAL_VEBOX_DI_CHROMA_TDM_CORING_THRESHOLD_NATUAL;
// pRenderData->VeboxDNDIParams.bBypassDeflickerFilter = true;
// pRenderData->VeboxDNDIParams.bUseSyntheticContentMedian = false;
// pRenderData->VeboxDNDIParams.bLocalCheck = true;
// pRenderData->VeboxDNDIParams.bSyntheticContentCheck = false;
// pRenderData->VeboxDNDIParams.dwDirectionCheckThreshold = VPHAL_VEBOX_DI_DIRECTION_CHECK_THRESHOLD_NATUAL;
// pRenderData->VeboxDNDIParams.dwTearingLowThreshold = VPHAL_VEBOX_DI_TEARING_LOW_THRESHOLD_NATUAL;
// pRenderData->VeboxDNDIParams.dwTearingHighThreshold = VPHAL_VEBOX_DI_TEARING_HIGH_THRESHOLD_NATUAL;
// pRenderData->VeboxDNDIParams.dwDiffCheckSlackThreshold = VPHAL_VEBOX_DI_DIFF_CHECK_SLACK_THRESHOLD_NATUAL;
// pRenderData->VeboxDNDIParams.dwSADWT0 = VPHAL_VEBOX_DI_SAD_WT0_NATUAL;
// pRenderData->VeboxDNDIParams.dwSADWT1 = VPHAL_VEBOX_DI_SAD_WT1_NATUAL;
// pRenderData->VeboxDNDIParams.dwSADWT2 = VPHAL_VEBOX_DI_SAD_WT2_NATUAL;
// pRenderData->VeboxDNDIParams.dwSADWT3 = VPHAL_VEBOX_DI_SAD_WT3_NATUAL;
// pRenderData->VeboxDNDIParams.dwSADWT4 = VPHAL_VEBOX_DI_SAD_WT4_NATUAL;
// pRenderData->VeboxDNDIParams.dwSADWT6 = VPHAL_VEBOX_DI_SAD_WT6_NATUAL;
// if (pSrcSurface && pSrcSurface->pDeinterlaceParams)
// {
// pRenderData->VeboxDNDIParams.bSCDEnable = pSrcSurface->pDeinterlaceParams->bSCDEnable;
// }
// else
// {
// pRenderData->VeboxDNDIParams.bSCDEnable = false;
// }
// VP_RENDER_CHK_NULL_RETURN(pSrcSurface);
// if (MEDIA_IS_HDCONTENT(pSrcSurface->dwWidth, pSrcSurface->dwHeight))
// {
// pRenderData->VeboxDNDIParams.dwLPFWtLUT0 = VPHAL_VEBOX_DI_LPFWTLUT0_HD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT1 = VPHAL_VEBOX_DI_LPFWTLUT1_HD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT2 = VPHAL_VEBOX_DI_LPFWTLUT2_HD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT3 = VPHAL_VEBOX_DI_LPFWTLUT3_HD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT4 = VPHAL_VEBOX_DI_LPFWTLUT4_HD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT5 = VPHAL_VEBOX_DI_LPFWTLUT5_HD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT6 = VPHAL_VEBOX_DI_LPFWTLUT6_HD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT7 = VPHAL_VEBOX_DI_LPFWTLUT7_HD_NATUAL;
// }
// else
// {
// pRenderData->VeboxDNDIParams.dwLPFWtLUT0 = VPHAL_VEBOX_DI_LPFWTLUT0_SD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT1 = VPHAL_VEBOX_DI_LPFWTLUT1_SD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT2 = VPHAL_VEBOX_DI_LPFWTLUT2_SD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT3 = VPHAL_VEBOX_DI_LPFWTLUT3_SD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT4 = VPHAL_VEBOX_DI_LPFWTLUT4_SD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT5 = VPHAL_VEBOX_DI_LPFWTLUT5_SD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT6 = VPHAL_VEBOX_DI_LPFWTLUT6_SD_NATUAL;
// pRenderData->VeboxDNDIParams.dwLPFWtLUT7 = VPHAL_VEBOX_DI_LPFWTLUT7_SD_NATUAL;
// }
//}
return MOS_STATUS_SUCCESS;
}
//!
//! \brief Setup Vebox_DI_IECP Command params
//! \details Setup Vebox_DI_IECP Command params
//! \param [in] bDiScdEnable
//! Is DI/Variances report enabled
//! \param [in,out] pVeboxDiIecpCmdParams
//! Pointer to VEBOX_DI_IECP command parameters
//! \return MOS_STATUS
//! Return MOS_STATUS_SUCCESS if successful, otherwise failed
//!
MOS_STATUS VpVeboxCmdPacketG12::SetupDiIecpState(
bool bDiScdEnable,
PMHW_VEBOX_DI_IECP_CMD_PARAMS pVeboxDiIecpCmdParams)
{
return VpVeboxCmdPacket::SetupDiIecpState(bDiScdEnable, pVeboxDiIecpCmdParams);
}
//!
//! \brief Vebox query statistics surface layout
//! \details Get Specific Layout Info like GNE Offset, size of per frame info inside
//! Vebox Statistics Surface for CNL
//!
//! | Layout of Statistics surface when DI enabled and DN either On or Off on CNL\n
//! | --------------------------------------------------------------\n
//! | | 16 bytes for x=0, Y=0 | 16 bytes for x=16, Y=0 | ...\n
//! | |-------------------------------------------------------------\n
//! | | 16 bytes for x=0, Y=4 | ...\n
//! | |------------------------------\n
//! | | ...\n
//! | |------------------------------\n
//! | | 16 bytes for x=0, Y=height-4| ...\n
//! | |-----------------------------------------------Pitch--------------\n
//! | | 17 DW Reserved | 2 DW STD0 | 2 DW GCC0 | 11 DW Reserved |\n
//! | |------------------------------------------------------------------\n
//! | | 11 DW FMD0 | 6 DW GNE0 | 2 DW STD0 | 2 DW GCC0 | 11 DW Reserved |\n
//! | |------------------------------------------------------------------\n
//! | | 17 DW Reserved | 2 DW STD1 | 2 DW GCC1 | 11 DW Reserved |\n
//! | |------------------------------------------------------------------\n
//! | | 11 DW FMD1 | 6 DW GNE1 | 2 DW STD1 | 2 DW GCC1 | 11 DW Reserved |\n
//! | -------------------------------------------------------------------\n
//! |\n
//! | Layout of Statistics surface when DN enabled and DI disabled\n
//! | --------------------------------------------------------------\n
//! | | 16 bytes for x=0, Y=0 | 16 bytes for x=16, Y=0 | ...\n
//! | |-------------------------------------------------------------\n
//! | | 16 bytes for x=0, Y=4 | ...\n
//! | |------------------------------\n
//! | | ...\n
//! | |------------------------------\n
//! | | 16 bytes for x=0, Y=height-4| ...\n
//! | |-----------------------------------------------Pitch--------------\n
//! | | 11 DW FMD0 | 6 DW GNE0 | 2 DW STD0 | 2 DW GCC0 | 11 DW Reserved |\n
//! | |------------------------------------------------------------------\n
//! | | 11 DW FMD1 | 6 DW GNE1 | 2 DW STD1 | 2 DW GCC1 | 11 DW Reserved |\n
//! | -------------------------------------------------------------------\n
//! |\n
//! | Layout of Statistics surface when both DN and DI are disabled\n
//! | ------------------------------------------------Pitch--------------\n
//! | | 17 DW White Balence0 | 2 DW STD0 | 2 DW GCC0 | 11 DW Reserved |\n
//! | |------------------------------------------------------------------\n
//! | | 17 DW White Balence1 | 2 DW STD1 | 2 DW GCC1 | 11 DW Reserved |\n
//! | -------------------------------------------------------------------\n
//! \param [in] QueryType
//! Query type
//! \param [out] pQuery
//! return layout type
//! \return MOS_STATUS
//! Return MOS_STATUS_SUCCESS if successful, otherwise failed
//!
MOS_STATUS VpVeboxCmdPacketG12::QueryStatLayout(
VEBOX_STAT_QUERY_TYPE QueryType,
uint32_t* pQuery)
{
VP_RENDER_ASSERT(pQuery);
return m_hwInterface->m_vpPlatformInterface->VeboxQueryStatLayout(QueryType, pQuery);
}
}