1 /*===================== begin_copyright_notice ==================================
2
3 * Copyright (c) 2021, Intel Corporation
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included
13 * in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21 * OTHER DEALINGS IN THE SOFTWARE.
22
23 ======================= end_copyright_notice ==================================*/
24 //!
25 //! \file mhw_vebox_xe_hpm.cpp
26 //! \brief Constructs vebox commands on Xe_HPM based platforms
27 //! \details Each client facing function both creates a HW command and adds
28 //! that command to a command or batch buffer.
29 //!
30
31 #include "mhw_vebox_xe_hpm.h"
32 #include "mhw_utilities_xe_xpm.h"
33 #include "mos_solo_generic.h"
34
MhwVeboxInterfaceXe_Hpm(PMOS_INTERFACE pOsInterface)35 MhwVeboxInterfaceXe_Hpm::MhwVeboxInterfaceXe_Hpm(PMOS_INTERFACE pOsInterface)
36 : MhwVeboxInterfaceXe_Xpm(pOsInterface)
37 {
38 MHW_FUNCTION_ENTER;
39
40 dwLumaStadTh = 3200;
41 dwChromaStadTh = 1600;
42 bTGNEEnable = false;
43 bHVSAutoBdrateEnable = false;
44 dw4X4TGNEThCnt = 576;
45
46 if (pOsInterface && pOsInterface->pfnGetSkuTable)
47 {
48 MEDIA_FEATURE_TABLE *m_skuTable = pOsInterface->pfnGetSkuTable(pOsInterface);
49
50 if (m_skuTable)
51 {
52 m_veboxScalabilitywith4K = MEDIA_IS_SKU(m_skuTable, FtrVeboxScalabilitywith4K);
53 }
54 else
55 {
56 MHW_ASSERTMESSAGE("m_skuTable is null ptr");
57 }
58 }
59 else
60 {
61 MHW_ASSERTMESSAGE("pOsInterface or pfnGetSkuTable is null ptr");
62 }
63 }
64
~MhwVeboxInterfaceXe_Hpm()65 MhwVeboxInterfaceXe_Hpm::~MhwVeboxInterfaceXe_Hpm()
66 {
67 MHW_FUNCTION_ENTER;
68 }
69
ForceGNEParams(uint8_t * pDnDiSate)70 MOS_STATUS MhwVeboxInterfaceXe_Hpm::ForceGNEParams(uint8_t *pDnDiSate)
71 {
72 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
73 mhw_vebox_xe_xpm::VEBOX_DNDI_STATE_CMD* pVeboxDndiState = (mhw_vebox_xe_xpm::VEBOX_DNDI_STATE_CMD *)pDnDiSate;
74
75 MHW_CHK_NULL(pDnDiSate);
76
77 //used by both SGNE and TGNE
78 pVeboxDndiState->DW6.BlockNoiseEstimateEdgeThreshold = 900;
79 pVeboxDndiState->DW4.BlockNoiseEstimateNoiseThreshold = 720;
80 pVeboxDndiState->DW30.EightDirectionEdgeThreshold = 1800;
81
82 //SGNE
83 pVeboxDndiState->DW31.LargeSobelThreshold = 1290;
84 pVeboxDndiState->DW33.MaxSobelThreshold = 1440;
85 pVeboxDndiState->DW31.SmallSobelThreshold = 480;
86 pVeboxDndiState->DW32.BlockSigmaDiffThreshold = dwBSDThreshold;
87 pVeboxDndiState->DW31.SmallSobelCountThreshold = 6;
88 pVeboxDndiState->DW32.LargeSobelCountThreshold = 6;
89 pVeboxDndiState->DW32.MedianSobelCountThreshold = 40;
90
91 //TGNE
92 pVeboxDndiState->DW50.LumaUniformityLowTh1 = 1;
93 pVeboxDndiState->DW50.LumaUniformityLowTh2 = 1;
94 pVeboxDndiState->DW50.LumaUniformityHighTh1 = 6;
95 pVeboxDndiState->DW50.LumaUniformityHighTh2 = 0;
96 pVeboxDndiState->DW49.LumaStadTh = 250;
97
98 //Chroma
99 pVeboxDndiState->DW8.ChromaDenoiseMovingPixelThreshold = 2; //m_chromaParams.dwHotPixelThresholdChromaV;
100 pVeboxDndiState->DW8.ChromaDenoiseAsdThreshold = 512;
101 pVeboxDndiState->DW8.ChromaDenoiseThresholdForSumOfComplexityMeasure = 512;
102
103 finish:
104 return eStatus;
105 }
106
DumpDNDIStates(uint8_t * pDnDiSate)107 MOS_STATUS MhwVeboxInterfaceXe_Hpm::DumpDNDIStates(uint8_t *pDnDiSate)
108 {
109 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
110 mhw_vebox_xe_xpm::VEBOX_DNDI_STATE_CMD *pVeboxDndiState = (mhw_vebox_xe_xpm::VEBOX_DNDI_STATE_CMD *)pDnDiSate;
111
112 MHW_CHK_NULL(pDnDiSate);
113
114 MHW_VERBOSEMESSAGE("VeboxDndiState, DW 34-47 is DI related DW, others is DN.");
115 MHW_VERBOSEMESSAGE("DW0:DenoiseMaximumHistory %d, DenoiseStadThreshold %d", pVeboxDndiState->DW0.DenoiseMaximumHistory, pVeboxDndiState->DW0.DenoiseStadThreshold);
116 MHW_VERBOSEMESSAGE("DW1:DenoiseAsdThreshold %d, DenoiseHistoryIncrease %d, DenoiseMovingPixelThreshold %d", pVeboxDndiState->DW1.DenoiseAsdThreshold, pVeboxDndiState->DW1.DenoiseHistoryIncrease, pVeboxDndiState->DW1.DenoiseMovingPixelThreshold);
117 MHW_VERBOSEMESSAGE("DW2:InitialDenoiseHistory %d, TemporalDifferenceThreshold %d", pVeboxDndiState->DW2.InitialDenoiseHistory, pVeboxDndiState->DW2.TemporalDifferenceThreshold);
118 MHW_VERBOSEMESSAGE("DW3:HotPixelCountLuma %d, LowTemporalDifferenceThreshold %d, ProgressiveDn %d, TemporalGneEnable %d", pVeboxDndiState->DW3.HotPixelCountLuma, pVeboxDndiState->DW3.LowTemporalDifferenceThreshold, pVeboxDndiState->DW3.ProgressiveDn, pVeboxDndiState->DW3.TemporalGneEnable);
119 MHW_VERBOSEMESSAGE("DW4:BlockNoiseEstimateNoiseThreshold %d, DenoiseThresholdForSumOfComplexityMeasureLuma %d, DW4.HotPixelThresholdLuma %d", pVeboxDndiState->DW4.BlockNoiseEstimateNoiseThreshold, pVeboxDndiState->DW4.DenoiseThresholdForSumOfComplexityMeasureLuma, pVeboxDndiState->DW4.HotPixelThresholdLuma);
120 MHW_VERBOSEMESSAGE("DW5:ChromaDenoiseStadThreshold %d, HotPixelCountChromaU %d, HotPixelThresholdChromaU %d", pVeboxDndiState->DW5.ChromaDenoiseStadThreshold, pVeboxDndiState->DW5.HotPixelCountChromaU, pVeboxDndiState->DW5.HotPixelThresholdChromaU);
121 MHW_VERBOSEMESSAGE("DW6:BlockNoiseEstimateEdgeThreshold %d, ChromaDenoiseEnable %d, ChromaTemporalDifferenceThreshold %d", pVeboxDndiState->DW6.BlockNoiseEstimateEdgeThreshold, pVeboxDndiState->DW6.ChromaDenoiseEnable, pVeboxDndiState->DW6.ChromaTemporalDifferenceThreshold);
122 MHW_VERBOSEMESSAGE("DW7:ChromaLowTemporalDifferenceThreshold %d, HotPixelCountChromaV %d, HotPixelThresholdChromaV %d", pVeboxDndiState->DW7.ChromaLowTemporalDifferenceThreshold, pVeboxDndiState->DW7.HotPixelCountChromaV, pVeboxDndiState->DW7.HotPixelThresholdChromaV);
123 MHW_VERBOSEMESSAGE("DW8:ChromaDenoiseAsdThreshold %d, ChromaDenoiseMovingPixelThreshold %d, ChromaDenoiseThresholdForSumOfComplexityMeasure %d", pVeboxDndiState->DW8.ChromaDenoiseAsdThreshold, pVeboxDndiState->DW8.ChromaDenoiseMovingPixelThreshold, pVeboxDndiState->DW8.ChromaDenoiseThresholdForSumOfComplexityMeasure);
124 MHW_VERBOSEMESSAGE("DW9:DnyWr040 %d, DnyWr140 %d, DnyWr240 %d, DnyWr340 %d, DnyWr440 %d, DnyWr540 %d", pVeboxDndiState->DW9.DnyWr040, pVeboxDndiState->DW9.DnyWr140, pVeboxDndiState->DW9.DnyWr240, pVeboxDndiState->DW9.DnyWr340, pVeboxDndiState->DW9.DnyWr440, pVeboxDndiState->DW9.DnyWr540);
125 MHW_VERBOSEMESSAGE("DW10:DnyThmax120 %d, DnyThmin120 %d, DW11: DnyDynThmin120 %d, DnyPrt5120 %d", pVeboxDndiState->DW10.DnyThmax120, pVeboxDndiState->DW10.DnyThmin120, pVeboxDndiState->DW11.DnyDynThmin120, pVeboxDndiState->DW11.DnyPrt5120);
126 MHW_VERBOSEMESSAGE("DW12:DnyPrt3120 %d, DnyPrt4120 %d, DW13:DnyPrt1120 %d, DnyPrt2120 %d", pVeboxDndiState->DW12.DnyPrt3120, pVeboxDndiState->DW12.DnyPrt4120, pVeboxDndiState->DW13.DnyPrt1120, pVeboxDndiState->DW13.DnyPrt2120);
127 MHW_VERBOSEMESSAGE("DW14:DnyPrt0120 %d, DnyWd2040 %d, DnyWd2140 %d, DnyWd2240 %d", pVeboxDndiState->DW14.DnyPrt0120, pVeboxDndiState->DW14.DnyWd2040, pVeboxDndiState->DW14.DnyWd2140, pVeboxDndiState->DW14.DnyWd2240);
128 MHW_VERBOSEMESSAGE("DW15:DnyWd0040 %d, DnyWd0140 %d, DnyWd0240 %d, DnyWd1040 %d, DnyWd1140 %d, DnyWd1240 %d", pVeboxDndiState->DW15.DnyWd0040, pVeboxDndiState->DW15.DnyWd0140, pVeboxDndiState->DW15.DnyWd0240, pVeboxDndiState->DW15.DnyWd1040, pVeboxDndiState->DW15.DnyWd1140, pVeboxDndiState->DW15.DnyWd1240);
129 MHW_VERBOSEMESSAGE("DW16:DnuWr040 %d, DnuWr140 %d, DnuWr240 %d, DnuWr340 %d, DnuWr440 %d, DnuWr540 %d", pVeboxDndiState->DW16.DnuWr040, pVeboxDndiState->DW16.DnuWr140, pVeboxDndiState->DW16.DnuWr240, pVeboxDndiState->DW16.DnuWr340, pVeboxDndiState->DW16.DnuWr440, pVeboxDndiState->DW16.DnuWr540);
130 MHW_VERBOSEMESSAGE("DW17:DnuThmax120 %d, DnuThmin120 %d", pVeboxDndiState->DW17.DnuThmax120, pVeboxDndiState->DW17.DnuThmin120);
131 MHW_VERBOSEMESSAGE("DW18:DnuDynThmin120 %d, DnuPrt5120 %d", pVeboxDndiState->DW18.DnuDynThmin120, pVeboxDndiState->DW18.DnuPrt5120);
132 MHW_VERBOSEMESSAGE("DW19:DnuPrt3120 %d, DnuPrt4120 %d, DW20:DnuPrt1120 %d, DnuPrt2120 %d", pVeboxDndiState->DW19.DnuPrt3120, pVeboxDndiState->DW19.DnuPrt4120, pVeboxDndiState->DW20.DnuPrt1120, pVeboxDndiState->DW20.DnuPrt2120);
133 MHW_VERBOSEMESSAGE("DW21:DnuPrt0120 %d, DnuWd2040 %d, DnuWd2140 %d, DnuWd2240 %d", pVeboxDndiState->DW21.DnuPrt0120, pVeboxDndiState->DW21.DnuWd2040, pVeboxDndiState->DW21.DnuWd2140, pVeboxDndiState->DW21.DnuWd2240);
134 MHW_VERBOSEMESSAGE("DW22:DnuWd0040 %d, DnuWd0140 %d, DnuWd0240 %d, DnuWd1040 %d, DnuWd1140 %d, DnuWd1240 %d", pVeboxDndiState->DW22.DnuWd0040, pVeboxDndiState->DW22.DnuWd0140, pVeboxDndiState->DW22.DnuWd0240, pVeboxDndiState->DW22.DnuWd1040, pVeboxDndiState->DW22.DnuWd1140, pVeboxDndiState->DW22.DnuWd1240);
135 MHW_VERBOSEMESSAGE("DW23:DnvWr040 %d, DnvWr240 %d, DnvWr340 %d, DnvWr440 %d, DnvWr5140 %d, DnvWr540", pVeboxDndiState->DW23.DnvWr040, pVeboxDndiState->DW23.DnvWr240, pVeboxDndiState->DW23.DnvWr340, pVeboxDndiState->DW23.DnvWr440, pVeboxDndiState->DW23.DnvWr5140, pVeboxDndiState->DW23.DnvWr540);
136 MHW_VERBOSEMESSAGE("DW24:DnvThmax120 %d, DnvThmin120 %d, DW25:DnvDynThmin120 %d, DnvPrt5120 %d", pVeboxDndiState->DW24.DnvThmax120, pVeboxDndiState->DW24.DnvThmin120, pVeboxDndiState->DW25.DnvDynThmin120, pVeboxDndiState->DW25.DnvPrt5120);
137 MHW_VERBOSEMESSAGE("DW26:DnvPrt3120 %d, DnvPrt4120 %d, DW27:DnvPrt1120 %d, DnvPrt2120 %d", pVeboxDndiState->DW26.DnvPrt3120, pVeboxDndiState->DW26.DnvPrt4120, pVeboxDndiState->DW27.DnvPrt1120, pVeboxDndiState->DW27.DnvPrt2120);
138 MHW_VERBOSEMESSAGE("DW28:DnvPrt0120 %d, DnvWd2040 %d, DnvWd2140 %d, DnvWd2240 %d", pVeboxDndiState->DW28.DnvPrt0120, pVeboxDndiState->DW28.DnvWd2040, pVeboxDndiState->DW28.DnvWd2140, pVeboxDndiState->DW28.DnvWd2240);
139 MHW_VERBOSEMESSAGE("DW29:DnvWd0040 %d, DnvWd0140 %d, DnvWd0240 %d, DnvWd1040 %d, DnvWd1140 %d, DnvWd1240 %d", pVeboxDndiState->DW29.DnvWd0040, pVeboxDndiState->DW29.DnvWd0140, pVeboxDndiState->DW29.DnvWd0240, pVeboxDndiState->DW29.DnvWd1040, pVeboxDndiState->DW29.DnvWd1140, pVeboxDndiState->DW29.DnvWd1240);
140 MHW_VERBOSEMESSAGE("DW30:EightDirectionEdgeThreshold %d, ValidPixelThreshold %d", pVeboxDndiState->DW30.EightDirectionEdgeThreshold, pVeboxDndiState->DW30.ValidPixelThreshold);
141 MHW_VERBOSEMESSAGE("DW31:LargeSobelThreshold %d, SmallSobelCountThreshold %d, SmallSobelThreshold %d", pVeboxDndiState->DW31.LargeSobelThreshold, pVeboxDndiState->DW31.SmallSobelCountThreshold, pVeboxDndiState->DW31.SmallSobelThreshold);
142 MHW_VERBOSEMESSAGE("DW32:BlockSigmaDiffThreshold %d, LargeSobelCountThreshold %d, MedianSobelCountThreshold %d, DW33:MaxSobelThreshold %d", pVeboxDndiState->DW32.BlockSigmaDiffThreshold, pVeboxDndiState->DW32.LargeSobelCountThreshold, pVeboxDndiState->DW32.MedianSobelCountThreshold, pVeboxDndiState->DW33.MaxSobelThreshold);
143 MHW_VERBOSEMESSAGE("DW34:SmoothMvThreshold %d, SadTightThreshold %d, ContentAdaptiveThresholdSlope %d, StmmC2 %d, SignBitForSmoothMvThreshold %d, SignBitForMaximumStmm %d, SignBitForMinimumStmm %d, Reserved1104 %d",
144 pVeboxDndiState->DW34.SmoothMvThreshold,pVeboxDndiState->DW34.SadTightThreshold,pVeboxDndiState->DW34.ContentAdaptiveThresholdSlope,pVeboxDndiState->DW34.StmmC2,pVeboxDndiState->DW34.SignBitForSmoothMvThreshold,pVeboxDndiState->DW34.SignBitForMaximumStmm, pVeboxDndiState->DW34.SignBitForMinimumStmm,pVeboxDndiState->DW34.Reserved1104);
145 MHW_VERBOSEMESSAGE("DW35:MaximumStmm %d, MultiplierForVecm %d, Reserved1134 %d, BlendingConstantAcrossTimeForSmallValuesOfStmm %d, BlendingConstantAcrossTimeForLargeValuesOfStmm %d, StmmBlendingConstantSelect %d",
146 pVeboxDndiState->DW35.MaximumStmm,pVeboxDndiState->DW35.MultiplierForVecm,pVeboxDndiState->DW35.Reserved1134,pVeboxDndiState->DW35.BlendingConstantAcrossTimeForSmallValuesOfStmm,pVeboxDndiState->DW35.BlendingConstantAcrossTimeForLargeValuesOfStmm,pVeboxDndiState->DW35.StmmBlendingConstantSelect);
147 MHW_VERBOSEMESSAGE("DW36:FmdTemporalDifferenceThreshold %d, LumatdmWt %d, ChromatdmWt %d, StmmOutputShift %d, StmmShiftUp %d, StmmShiftDown %d, MinimumStmm %d",
148 pVeboxDndiState->DW36.FmdTemporalDifferenceThreshold,pVeboxDndiState->DW36.LumatdmWt,pVeboxDndiState->DW36.ChromatdmWt,pVeboxDndiState->DW36.StmmOutputShift,pVeboxDndiState->DW36.StmmShiftUp,pVeboxDndiState->DW36.StmmShiftDown,pVeboxDndiState->DW36.MinimumStmm);
149 MHW_VERBOSEMESSAGE("DW37:CoringThresholdForSvcm %d, DeltabitValueForSvcm %d, Reserved1196 %d, CoringThresholdForShcm %d, DeltabitValueForShcm %d, Reserved1212 %d",
150 pVeboxDndiState->DW37.CoringThresholdForSvcm,pVeboxDndiState->DW37.DeltabitValueForSvcm,pVeboxDndiState->DW37.Reserved1196,pVeboxDndiState->DW37.CoringThresholdForShcm,pVeboxDndiState->DW37.DeltabitValueForShcm,pVeboxDndiState->DW37.Reserved1212);
151 MHW_VERBOSEMESSAGE("DW38:Reserved1216 %d, DnDiTopFirst %d, Reserved1220 %d, McdiEnable %d, FmdTearThreshold %d, CatThreshold %d, Fmd2VerticalDifferenceThreshold %d, Fmd1VerticalDifferenceThreshold %d",
152 pVeboxDndiState->DW38.Reserved1216,pVeboxDndiState->DW38.DnDiTopFirst,pVeboxDndiState->DW38.Reserved1220,pVeboxDndiState->DW38.McdiEnable,pVeboxDndiState->DW38.FmdTearThreshold,pVeboxDndiState->DW38.CatThreshold,pVeboxDndiState->DW38.Fmd2VerticalDifferenceThreshold,pVeboxDndiState->DW38.Fmd1VerticalDifferenceThreshold);
153 MHW_VERBOSEMESSAGE("DW39:SadTha %d, SadThb %d, ProgressiveCadenceReconstructionFor1StFieldOfCurrentFrame %d, McPixelConsistencyThreshold %d, ProgressiveCadenceReconstructionForSecondFieldOfPreviousFrame %d, Reserved1266 %d, NeighborPixelThreshold %d, ChromaSmallerWindowForTdm %d, LumaSmallerWindowForTdm %d, Fastercovergence %d, Reserved1274 %d",
154 pVeboxDndiState->DW39.SadTha,pVeboxDndiState->DW39.SadThb,pVeboxDndiState->DW39.ProgressiveCadenceReconstructionFor1StFieldOfCurrentFrame,pVeboxDndiState->DW39.McPixelConsistencyThreshold,pVeboxDndiState->DW39.ProgressiveCadenceReconstructionForSecondFieldOfPreviousFrame,
155 pVeboxDndiState->DW39.Reserved1266,pVeboxDndiState->DW39.NeighborPixelThreshold,pVeboxDndiState->DW39.ChromaSmallerWindowForTdm, pVeboxDndiState->DW39.LumaSmallerWindowForTdm,pVeboxDndiState->DW39.Fastercovergence,pVeboxDndiState->DW39.Reserved1274);
156 MHW_VERBOSEMESSAGE("DW40:SadWt0 %d, SadWt1 %d, SadWt2 %d, SadWt3 %d", pVeboxDndiState->DW40.SadWt0, pVeboxDndiState->DW40.SadWt1, pVeboxDndiState->DW40.SadWt2, pVeboxDndiState->DW40.SadWt3);
157 MHW_VERBOSEMESSAGE("DW41:SadWt4 %d, SadWt6 %d, CoringThresholdForLumaSadCalculation %d, CoringThresholdForChromaSadCalculation %d", pVeboxDndiState->DW41.SadWt4, pVeboxDndiState->DW41.SadWt6, pVeboxDndiState->DW41.CoringThresholdForLumaSadCalculation, pVeboxDndiState->DW41.CoringThresholdForChromaSadCalculation);
158 MHW_VERBOSEMESSAGE("DW42:ParDiffcheckslackthreshold %d, ParTearinghighthreshold %d, ParTearinglowthreshold %d, ParDirectioncheckth %d, ParSyntheticcontentcheck %d, ParLocalcheck %d, ParUsesyntheticcontentmedian %d, BypassDeflicker %d, Reserved1375 %d",
159 pVeboxDndiState->DW42.ParDiffcheckslackthreshold,pVeboxDndiState->DW42.ParTearinghighthreshold,pVeboxDndiState->DW42.ParTearinglowthreshold,pVeboxDndiState->DW42.ParDirectioncheckth,pVeboxDndiState->DW42.ParSyntheticcontentcheck,
160 pVeboxDndiState->DW42.ParLocalcheck,pVeboxDndiState->DW42.ParUsesyntheticcontentmedian,pVeboxDndiState->DW42.BypassDeflicker, pVeboxDndiState->DW42.Reserved1375);
161 MHW_VERBOSEMESSAGE("DW43:Lpfwtlut0 %d, Lpfwtlut1 %d, Lpfwtlut2 %d, Lpfwtlut3 %d", pVeboxDndiState->DW43.Lpfwtlut0, pVeboxDndiState->DW43.Lpfwtlut1, pVeboxDndiState->DW43.Lpfwtlut2, pVeboxDndiState->DW43.Lpfwtlut3);
162 MHW_VERBOSEMESSAGE("DW44:Lpfwtlut4 %d, Lpfwtlut5 %d, Lpfwtlut6 %d, Lpfwtlut7 %d", pVeboxDndiState->DW44.Lpfwtlut4, pVeboxDndiState->DW44.Lpfwtlut5, pVeboxDndiState->DW44.Lpfwtlut6, pVeboxDndiState->DW44.Lpfwtlut7);
163 MHW_VERBOSEMESSAGE("DW45:TdmUvThreshold %d, HvUvThreshold %d, TdmHarmonicFactorSynthetic %d, TdmHarmonicFactorNatural %d, SynthticFrame %d, SyntheticContentThreshold %d", pVeboxDndiState->DW45.TdmUvThreshold, pVeboxDndiState->DW45.HvUvThreshold, pVeboxDndiState->DW45.TdmHarmonicFactorSynthetic, pVeboxDndiState->DW45.TdmHarmonicFactorNatural, pVeboxDndiState->DW45.SynthticFrame, pVeboxDndiState->DW45.SyntheticContentThreshold);
164 MHW_VERBOSEMESSAGE("DW46:SvcmHarmonicFactorSynthetic %d, ShcmHarmonicFactorSynthetic %d, SvcmHarmonicFactorNatural %d, ShcmHarmonicFactorNatural %d, HarmonicCounterThreshold %d, MaxHarmonicCounterThreshold %d, NaturalContentThreshold %d, Reserved1501 %d",
165 pVeboxDndiState->DW46.SvcmHarmonicFactorSynthetic, pVeboxDndiState->DW46.ShcmHarmonicFactorSynthetic, pVeboxDndiState->DW46.SvcmHarmonicFactorNatural, pVeboxDndiState->DW46.ShcmHarmonicFactorNatural, pVeboxDndiState->DW46.HarmonicCounterThreshold, pVeboxDndiState->DW46.MaxHarmonicCounterThreshold, pVeboxDndiState->DW46.NaturalContentThreshold, pVeboxDndiState->DW46.Reserved1501);
166 MHW_VERBOSEMESSAGE("DW47:MaximumValue %d, DW48:ShiftingValue %d, HvYThreshold %d, NumInlinerNumeratorThreshold %d, NumInlinerDenominatorThreshold %d, Reserved1556 %d", pVeboxDndiState->DW47.MaximumValue, pVeboxDndiState->DW48.ShiftingValue, pVeboxDndiState->DW48.HvYThreshold, pVeboxDndiState->DW48.NumInlinerNumeratorThreshold, pVeboxDndiState->DW48.NumInlinerDenominatorThreshold, pVeboxDndiState->DW48.Reserved1556);
167 MHW_VERBOSEMESSAGE("DW49:ChromaStadTh %d, LumaStadTh %d", pVeboxDndiState->DW49.ChromaStadTh, pVeboxDndiState->DW49.LumaStadTh);
168 MHW_VERBOSEMESSAGE("DW50:LumaUniformityHighTh1 %d, LumaUniformityHighTh2 %d, LumaUniformityLowTh1 %d, LumaUniformityLowTh2 %d", pVeboxDndiState->DW50.LumaUniformityHighTh1, pVeboxDndiState->DW50.LumaUniformityHighTh2, pVeboxDndiState->DW50.LumaUniformityLowTh1, pVeboxDndiState->DW50.LumaUniformityLowTh2);
169 MHW_VERBOSEMESSAGE("DW51: ChromaUniformityHighTh1 %d, ChromaUniformityHighTh2 %d, ChromaUniformityLowTh1 %d, ChromaUniformityLowTh2 %d", pVeboxDndiState->DW51.ChromaUniformityHighTh1, pVeboxDndiState->DW51.ChromaUniformityHighTh2, pVeboxDndiState->DW51.ChromaUniformityLowTh1, pVeboxDndiState->DW51.ChromaUniformityLowTh2);
170 MHW_VERBOSEMESSAGE("DW52:_4X4TemporalGneThresholdCount %d", pVeboxDndiState->DW52._4X4TemporalGneThresholdCount);
171
172 finish:
173 return eStatus;
174 }
175
AddVeboxDndiState(PMHW_VEBOX_DNDI_PARAMS pVeboxDndiParams)176 MOS_STATUS MhwVeboxInterfaceXe_Hpm::AddVeboxDndiState(
177 PMHW_VEBOX_DNDI_PARAMS pVeboxDndiParams)
178 {
179 PMHW_VEBOX_HEAP pVeboxHeap;
180 uint32_t uiOffset;
181 MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
182
183 mhw_vebox_xe_xpm::VEBOX_DNDI_STATE_CMD *pVeboxDndiState, mVeboxDndiState;
184
185 MHW_CHK_NULL(pVeboxDndiParams);
186 MHW_CHK_NULL(m_veboxHeap);
187 pVeboxHeap = m_veboxHeap;
188
189 uiOffset = pVeboxHeap->uiCurState * pVeboxHeap->uiInstanceSize;
190 pVeboxDndiState =
191 (mhw_vebox_xe_xpm::VEBOX_DNDI_STATE_CMD *)(pVeboxHeap->pLockedDriverResourceMem +
192 pVeboxHeap->uiDndiStateOffset +
193 uiOffset);
194 MHW_CHK_NULL(pVeboxDndiState);
195 *pVeboxDndiState = mVeboxDndiState;
196
197 eStatus = MhwVeboxInterfaceXe_Xpm::AddVeboxDndiState(pVeboxDndiParams);
198
199 if (bHVSAutoBdrateEnable)
200 {
201 if (bTGNEEnable)
202 {
203 pVeboxDndiState->DW3.TemporalGneEnable = bTGNEEnable;
204 pVeboxDndiState->DW30.ValidPixelThreshold = 336;
205 pVeboxDndiState->DW52._4X4TemporalGneThresholdCount = dw4X4TGNEThCnt;
206 pVeboxDndiState->DW2.InitialDenoiseHistory = dwHistoryInit;
207 pVeboxDndiState->DW33.MaxSobelThreshold = 448; //for SGNE
208 //for chroma
209 pVeboxDndiState->DW49.ChromaStadTh = dwChromaStadTh;
210 pVeboxDndiState->DW51.ChromaUniformityHighTh2 = 0;
211 pVeboxDndiState->DW51.ChromaUniformityHighTh1 = 9;
212 pVeboxDndiState->DW51.ChromaUniformityLowTh2 = 2;
213 pVeboxDndiState->DW51.ChromaUniformityLowTh1 = 1;
214
215 ForceGNEParams((uint8_t*)pVeboxDndiState);
216 pVeboxDndiState->DW2.InitialDenoiseHistory = dwHistoryInit;
217 }
218 else
219 {
220 pVeboxDndiState->DW3.TemporalGneEnable = 0;
221 pVeboxDndiState->DW30.ValidPixelThreshold = 336;
222 pVeboxDndiState->DW33.MaxSobelThreshold = 448;
223 pVeboxDndiState->DW2.InitialDenoiseHistory = dwHistoryInit;
224
225 pVeboxDndiState->DW49.ChromaStadTh = 0;
226 pVeboxDndiState->DW51.ChromaUniformityHighTh2 = 0;
227 pVeboxDndiState->DW51.ChromaUniformityHighTh1 = 0;
228 pVeboxDndiState->DW51.ChromaUniformityLowTh2 = 0;
229 pVeboxDndiState->DW51.ChromaUniformityLowTh1 = 0;
230 pVeboxDndiState->DW52._4X4TemporalGneThresholdCount = 0;
231
232 ForceGNEParams((uint8_t *)pVeboxDndiState);
233
234 pVeboxDndiState->DW49.LumaStadTh = 0;
235 pVeboxDndiState->DW50.LumaUniformityHighTh2 = 0;
236 pVeboxDndiState->DW50.LumaUniformityHighTh1 = 0;
237 pVeboxDndiState->DW50.LumaUniformityLowTh2 = 0;
238 pVeboxDndiState->DW50.LumaUniformityLowTh1 = 0;
239 }
240
241 }
242 else if (bHVSAutoSubjectiveEnable)
243 {
244 if (bTGNEEnable)
245 {
246 pVeboxDndiState->DW3.TemporalGneEnable = bTGNEEnable;
247 pVeboxDndiState->DW4.BlockNoiseEstimateNoiseThreshold = 720;
248 pVeboxDndiState->DW6.BlockNoiseEstimateEdgeThreshold = 200;
249 pVeboxDndiState->DW30.EightDirectionEdgeThreshold = 3200;
250 pVeboxDndiState->DW30.ValidPixelThreshold = 336;
251 pVeboxDndiState->DW33.MaxSobelThreshold = 1440;
252 pVeboxDndiState->DW49.ChromaStadTh = dwChromaStadTh;
253 pVeboxDndiState->DW49.LumaStadTh = dwLumaStadTh;
254 pVeboxDndiState->DW50.LumaUniformityHighTh2 = 50;
255 pVeboxDndiState->DW50.LumaUniformityHighTh1 = 15;
256 pVeboxDndiState->DW50.LumaUniformityLowTh2 = 2;
257 pVeboxDndiState->DW50.LumaUniformityLowTh1 = 2;
258 pVeboxDndiState->DW51.ChromaUniformityHighTh2 = 30;
259 pVeboxDndiState->DW51.ChromaUniformityHighTh1 = 15;
260 pVeboxDndiState->DW51.ChromaUniformityLowTh2 = 2;
261 pVeboxDndiState->DW51.ChromaUniformityLowTh1 = 1;
262 pVeboxDndiState->DW52._4X4TemporalGneThresholdCount = dw4X4TGNEThCnt;
263 }
264 else
265 {
266 pVeboxDndiState->DW3.TemporalGneEnable = 0;
267 pVeboxDndiState->DW4.BlockNoiseEstimateNoiseThreshold = 720;
268 pVeboxDndiState->DW6.BlockNoiseEstimateEdgeThreshold = 200;
269 pVeboxDndiState->DW30.EightDirectionEdgeThreshold = 3200;
270 pVeboxDndiState->DW30.ValidPixelThreshold = 336;
271 pVeboxDndiState->DW33.MaxSobelThreshold = 1440;
272 pVeboxDndiState->DW49.ChromaStadTh = 0;
273 pVeboxDndiState->DW49.LumaStadTh = 0;
274 pVeboxDndiState->DW50.LumaUniformityHighTh2 = 0;
275 pVeboxDndiState->DW50.LumaUniformityHighTh1 = 0;
276 pVeboxDndiState->DW50.LumaUniformityLowTh2 = 0;
277 pVeboxDndiState->DW50.LumaUniformityLowTh1 = 0;
278 pVeboxDndiState->DW51.ChromaUniformityHighTh2 = 0;
279 pVeboxDndiState->DW51.ChromaUniformityHighTh1 = 0;
280 pVeboxDndiState->DW51.ChromaUniformityLowTh2 = 0;
281 pVeboxDndiState->DW51.ChromaUniformityLowTh1 = 0;
282 pVeboxDndiState->DW52._4X4TemporalGneThresholdCount = 0;
283 }
284 }
285 else
286 {
287 if (bTGNEEnable)
288 {
289 pVeboxDndiState->DW3.TemporalGneEnable = bTGNEEnable;
290 pVeboxDndiState->DW4.BlockNoiseEstimateNoiseThreshold = 320;
291 pVeboxDndiState->DW49.ChromaStadTh = dwChromaStadTh;
292 pVeboxDndiState->DW49.LumaStadTh = dwLumaStadTh;
293 pVeboxDndiState->DW50.LumaUniformityHighTh2 = 50;
294 pVeboxDndiState->DW50.LumaUniformityHighTh1 = 10;
295 pVeboxDndiState->DW50.LumaUniformityLowTh2 = 2;
296 pVeboxDndiState->DW50.LumaUniformityLowTh1 = 1;
297 pVeboxDndiState->DW51.ChromaUniformityHighTh2 = 30;
298 pVeboxDndiState->DW51.ChromaUniformityHighTh1 = 15;
299 pVeboxDndiState->DW51.ChromaUniformityLowTh2 = 2;
300 pVeboxDndiState->DW51.ChromaUniformityLowTh1 = 1;
301 pVeboxDndiState->DW52._4X4TemporalGneThresholdCount = dw4X4TGNEThCnt;
302 }
303 else
304 {
305 pVeboxDndiState->DW3.TemporalGneEnable = 0;
306 pVeboxDndiState->DW4.BlockNoiseEstimateNoiseThreshold = 320;
307 pVeboxDndiState->DW49.ChromaStadTh = 0;
308 pVeboxDndiState->DW49.LumaStadTh = 0;
309 pVeboxDndiState->DW50.LumaUniformityHighTh2 = 0;
310 pVeboxDndiState->DW50.LumaUniformityHighTh1 = 0;
311 pVeboxDndiState->DW50.LumaUniformityLowTh2 = 0;
312 pVeboxDndiState->DW50.LumaUniformityLowTh1 = 0;
313 pVeboxDndiState->DW51.ChromaUniformityHighTh2 = 0;
314 pVeboxDndiState->DW51.ChromaUniformityHighTh1 = 0;
315 pVeboxDndiState->DW51.ChromaUniformityLowTh2 = 0;
316 pVeboxDndiState->DW51.ChromaUniformityLowTh1 = 0;
317 pVeboxDndiState->DW52._4X4TemporalGneThresholdCount = 0;
318 }
319 }
320 DumpDNDIStates((uint8_t *)pVeboxDndiState);
321 finish:
322 return eStatus;
323 }
324
325