xref: /aosp_15_r20/external/intel-media-driver/media_driver/agnostic/Xe_M/Xe_HPM/hw/mhw_vebox_xe_hpm.cpp (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
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