1 /*
2 # Copyright (c) 2024, 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     mhw_vdbox_avp_impl_xe2_lpm_base.h
24 //! \brief    MHW VDBOX AVP interface common base for Xe2_LPM+ platforms
25 //! \details
26 //!
27 
28 #ifndef __MHW_VDBOX_AVP_IMPL_XE2_LPM_BASE_H__
29 #define __MHW_VDBOX_AVP_IMPL_XE2_LPM_BASE_H__
30 
31 #include "mhw_vdbox_avp_impl.h"
32 #include "mhw_sfc_hwcmd_xe2_lpm_base_next.h"
33 #include "mhw_mi_hwcmd_xe2_lpm_base_next.h"
34 #include "mhw_mi_itf.h"
35 
36 namespace mhw
37 {
38 namespace vdbox
39 {
40 namespace avp
41 {
42 namespace xe2_lpm_base
43 {
44 template <typename cmd_t>
45 class BaseImpl : public avp::Impl<cmd_t>
46 {
47 public:
GetAvpStateCmdSize(uint32_t * commandsSize,uint32_t * patchListSize,PMHW_VDBOX_STATE_CMDSIZE_PARAMS params)48     MOS_STATUS GetAvpStateCmdSize(uint32_t* commandsSize, uint32_t* patchListSize, PMHW_VDBOX_STATE_CMDSIZE_PARAMS params) override
49     {
50         MHW_FUNCTION_ENTER;
51 
52         MHW_MI_CHK_NULL(commandsSize);
53         MHW_MI_CHK_NULL(patchListSize);
54 
55         uint32_t maxSize          = 0;
56         uint32_t patchListMaxSize = 0;
57 
58         maxSize =
59             8 +
60             mhw::mi::xe2_lpm_base_next::Cmd::MI_FLUSH_DW_CMD::byteSize +
61             cmd_t::AVP_PIPE_MODE_SELECT_CMD::byteSize +
62             cmd_t::AVP_SURFACE_STATE_CMD::byteSize * 11 +
63             cmd_t::AVP_PIPE_BUF_ADDR_STATE_CMD::byteSize +
64             cmd_t::AVP_IND_OBJ_BASE_ADDR_STATE_CMD::byteSize +
65             cmd_t::AVP_SEGMENT_STATE_CMD::byteSize * 8 +
66             cmd_t::AVP_INLOOP_FILTER_STATE_CMD::byteSize +
67             cmd_t::AVP_INTER_PRED_STATE_CMD::byteSize +
68             cmd_t::AVP_FILM_GRAIN_STATE_CMD::byteSize;
69 
70         patchListMaxSize =
71             PATCH_LIST_COMMAND(avp::Itf::VD_PIPELINE_FLUSH_CMD) +
72             PATCH_LIST_COMMAND(mi::Itf::MI_FLUSH_DW_CMD) +
73             PATCH_LIST_COMMAND(avp::Itf::AVP_PIPE_MODE_SELECT_CMD) +
74             PATCH_LIST_COMMAND(avp::Itf::AVP_SURFACE_STATE_CMD) * 11 +
75             PATCH_LIST_COMMAND(avp::Itf::AVP_PIPE_BUF_ADDR_STATE_CMD) +
76             PATCH_LIST_COMMAND(avp::Itf::AVP_IND_OBJ_BASE_ADDR_STATE_CMD) +
77             PATCH_LIST_COMMAND(avp::Itf::AVP_SEGMENT_STATE_CMD) * 8 +
78             PATCH_LIST_COMMAND(avp::Itf::AVP_INTER_PRED_STATE_CMD) +
79             PATCH_LIST_COMMAND(avp::Itf::AVP_INLOOP_FILTER_STATE_CMD) +
80             PATCH_LIST_COMMAND(avp::Itf::AVP_FILM_GRAIN_STATE_CMD);
81 
82         if (params->bDecodeInUse)
83         {
84             maxSize +=
85                 cmd_t::AVP_PIC_STATE_CMD::byteSize +
86                 mhw::mi::xe2_lpm_base_next::Cmd::VD_CONTROL_STATE_CMD::byteSize * 2;
87 
88             patchListMaxSize += PATCH_LIST_COMMAND(avp::Itf::AVP_PIC_STATE_CMD);
89         }
90         if (params->bSfcInUse)
91         {
92             maxSize +=
93                 mhw::sfc::xe2_lpm_base_next::Cmd::SFC_LOCK_CMD::byteSize +
94                 2 * mhw::mi::xe2_lpm_base_next::Cmd::VD_CONTROL_STATE_CMD::byteSize +
95                 mhw::sfc::xe2_lpm_base_next::Cmd::SFC_STATE_CMD::byteSize +
96                 mhw::sfc::xe2_lpm_base_next::Cmd::SFC_AVS_STATE_CMD::byteSize +
97                 mhw::sfc::xe2_lpm_base_next::Cmd::SFC_AVS_LUMA_Coeff_Table_CMD::byteSize +
98                 mhw::sfc::xe2_lpm_base_next::Cmd::SFC_AVS_CHROMA_Coeff_Table_CMD::byteSize +
99                 mhw::sfc::xe2_lpm_base_next::Cmd::SFC_IEF_STATE_CMD::byteSize +
100                 mhw::sfc::xe2_lpm_base_next::Cmd::SFC_FRAME_START_CMD::byteSize;
101         }
102         *commandsSize  = maxSize;
103         *patchListSize = patchListMaxSize;
104 
105         return MOS_STATUS_SUCCESS;
106     }
107 
108 
GetAvpPrimitiveCmdSize(uint32_t * commandsSize,uint32_t * patchListSize,PMHW_VDBOX_STATE_CMDSIZE_PARAMS params)109     MOS_STATUS GetAvpPrimitiveCmdSize(uint32_t* commandsSize, uint32_t* patchListSize, PMHW_VDBOX_STATE_CMDSIZE_PARAMS params) override
110     {
111         MHW_FUNCTION_ENTER;
112 
113         MHW_MI_CHK_NULL(commandsSize);
114         MHW_MI_CHK_NULL(patchListSize);
115 
116         uint32_t maxSize          = 0;
117         uint32_t patchListMaxSize = 0;
118 
119         if (params->bDecodeInUse)
120         {
121             maxSize =
122                 cmd_t::AVP_TILE_CODING_CMD::byteSize +
123                 cmd_t::AVP_BSD_OBJECT_CMD::byteSize +
124                 mhw::mi::xe2_lpm_base_next::Cmd::MI_BATCH_BUFFER_END_CMD::byteSize;
125 
126             patchListMaxSize =
127                 PATCH_LIST_COMMAND(avp::Itf::AVP_TILE_CODING_CMD) +
128                 PATCH_LIST_COMMAND(avp::Itf::AVP_BSD_OBJECT_CMD);
129         }
130 
131         *commandsSize  = maxSize;
132         *patchListSize = patchListMaxSize;
133 
134         return MOS_STATUS_SUCCESS;
135     }
136 
137 protected:
138     using base_t = avp::Impl<cmd_t>;
139 
BaseImpl(PMOS_INTERFACE osItf)140     BaseImpl(PMOS_INTERFACE osItf) : base_t(osItf){};
141 
_MHW_SETCMD_OVERRIDE_DECL(AVP_PIPE_MODE_SELECT)142     _MHW_SETCMD_OVERRIDE_DECL(AVP_PIPE_MODE_SELECT)
143     {
144         _MHW_SETCMD_CALLBASE(AVP_PIPE_MODE_SELECT);
145 
146 #define DO_FIELDS()                                                                            \
147     DO_FIELD(DW1, TileStatisticsStreamoutEnable, params.tileStatsStreamoutEnable ? 1 : 0);     \
148     DO_FIELD(DW6, DownscaledSourcePixelPrefetchLength, params.srcPixelPrefetchLen);            \
149     DO_FIELD(DW6, DownscaledSourcePixelPrefetchEnable, params.srcPixelPrefetchEnable ? 1 : 0); \
150     DO_FIELD(DW6, OriginalSourcePixelPrefetchLength, params.srcPixelPrefetchLen);              \
151     DO_FIELD(DW6, OriginalSourcePixelPrefetchEnable, params.srcPixelPrefetchEnable ? 1 : 0)
152 
153 #include "mhw_hwcmd_process_cmdfields.h"
154     }
155 
_MHW_SETCMD_OVERRIDE_DECL(AVP_FILM_GRAIN_STATE)156     _MHW_SETCMD_OVERRIDE_DECL(AVP_FILM_GRAIN_STATE)
157     {
158         _MHW_SETCMD_CALLBASE(AVP_FILM_GRAIN_STATE);
159 
160         MOS_SecureMemcpy(cmd.PointLumaValueI0To13,
161             sizeof(params.pointYValue),
162             params.pointYValue,
163             sizeof(params.pointYValue));
164 
165         MOS_SecureMemcpy(cmd.PointLumaScalingI0To13,
166             sizeof(params.pointYScaling),
167             params.pointYScaling,
168             sizeof(params.pointYScaling));
169 
170         MOS_SecureMemcpy(cmd.PointCbValueI0To9,
171             sizeof(params.pointCbValue),
172             params.pointCbValue,
173             sizeof(params.pointCbValue));
174 
175         MOS_SecureMemcpy(cmd.PointCbScalingI0To9,
176             sizeof(params.pointCbScaling),
177             params.pointCbScaling,
178             sizeof(params.pointCbScaling));
179 
180         MOS_SecureMemcpy(cmd.PointCrValueI0To9,
181             sizeof(params.pointCrValue),
182             params.pointCrValue,
183             sizeof(params.pointCrValue));
184 
185         MOS_SecureMemcpy(cmd.PointCrScalingI0To9,
186             sizeof(params.pointCrScaling),
187             params.pointCrScaling,
188             sizeof(params.pointCrScaling));
189 
190         MOS_SecureMemcpy(cmd.ArCoeffLumaPlus128I023,
191             sizeof(params.arCoeffsY),
192             params.arCoeffsY,
193             sizeof(params.arCoeffsY));
194 
195         MOS_SecureMemcpy(cmd.ArCoeffChromaCbPlus128I024,
196             sizeof(params.arCoeffsCb),
197             params.arCoeffsCb,
198             sizeof(params.arCoeffsCb));
199 
200         MOS_SecureMemcpy(cmd.ArCoeffChromaCrPlus128I024,
201             sizeof(params.arCoeffsCr),
202             params.arCoeffsCr,
203             sizeof(params.arCoeffsCr));
204 
205 #define DO_FIELDS()                                                                                 \
206         DO_FIELD(DW1, GrainRandomSeed, params.grainRandomSeed);                                     \
207         DO_FIELD(DW1, ClipToRestrictedRangeFlag, params.clipToRestrictedRange);                     \
208         DO_FIELD(DW1, NumberOfLumaPoints, params.numOfYPoints);                                     \
209         DO_FIELD(DW1, NumberOfChromaCbPoints, params.numOfCbPoints);                                \
210         DO_FIELD(DW1, NumberOfChromaCrPoints, params.numOfCrPoints);                                \
211         DO_FIELD(DW1, McIdentityFlag, params.matrixCoefficients);                                   \
212         DO_FIELD(DW2, GrainScalingMinus8, params.grainScalingMinus8);                               \
213         DO_FIELD(DW2, ArCoeffLag, params.arCoeffLag);                                               \
214         DO_FIELD(DW2, ArCoeffShiftMinus6, params.arCoeffShiftMinus6);                               \
215         DO_FIELD(DW2, GrainScaleShift, params.grainScaleShift);                                     \
216         DO_FIELD(DW2, ChromaScalingFromLumaFlag, params.chromaScalingFromLuma);                     \
217         DO_FIELD(DW2, GrainNoiseOverlapFlag, params.grainNoiseOverlap);                             \
218                                                                                                     \
219         DO_FIELD(DW43, CbMult, params.cbMult);                                                      \
220         DO_FIELD(DW43, CbLumaMult, params.cbLumaMult);                                              \
221         DO_FIELD(DW43, CbOffset, params.cbOffset);                                                  \
222         DO_FIELD(DW44, CrMult, params.crMult);                                                      \
223         DO_FIELD(DW44, CrLumaMult, params.crLumaMult);                                              \
224         DO_FIELD(DW44, CrOffset, params.crOffset)
225 
226 #include "mhw_hwcmd_process_cmdfields.h"
227     }
228 
_MHW_SETCMD_OVERRIDE_DECL(AVP_TILE_CODING)229     _MHW_SETCMD_OVERRIDE_DECL(AVP_TILE_CODING)
230     {
231         _MHW_SETCMD_CALLBASE(AVP_TILE_CODING);
232 
233 #if (_DEBUG || _RELEASE_INTERNAL)
234 #define DO_FIELDS()                                                                             \
235     DO_FIELD(DW1, FrameTileId, params.tileId);                                                  \
236     DO_FIELD(DW1, TgTileNum, params.tgTileNum);                                                   \
237     DO_FIELD(DW1, TileGroupId, params.tileGroupId);                                             \
238                                                                                                 \
239     DO_FIELD(DW2, TileColumnPositionInSbUnit, params.tileColPositionInSb);                      \
240     DO_FIELD(DW2, TileRowPositionInSbUnit, params.tileRowPositionInSb);                         \
241                                                                                                 \
242     DO_FIELD(DW3, TileWidthInSuperblockUnitMinus1, params.tileWidthInSbMinus1);                 \
243     DO_FIELD(DW3, TileHeightInSuperblockUnitMinus1, params.tileHeightInSbMinus1);               \
244     DO_FIELD(DW4, FirstTileInAFrame, params.firstTileInAFrame ? 1 : 0);                         \
245     DO_FIELD(DW4, AvpCrcEnable, params.enableAvpDebugMode ? 1 : 0);                             \
246     DO_FIELD(DW4, IslasttileofcolumnFlag, params.lastTileOfColumn ? 1 : 0);                     \
247     DO_FIELD(DW4, IslasttileofrowFlag, params.lastTileOfRow ? 1 : 0);                           \
248     DO_FIELD(DW4, IsstarttileoftilegroupFlag, params.firstTileOfTileGroup ? 1 : 0);             \
249     DO_FIELD(DW4, IsendtileoftilegroupFlag, params.lastTileOfTileGroup ? 1 : 0);                \
250     DO_FIELD(DW4, IslasttileofframeFlag, params.lastTileOfFrame ? 1 : 0);                       \
251     DO_FIELD(DW4, DisableCdfUpdateFlag, params.disableCdfUpdateFlag ? 1 : 0);                   \
252     DO_FIELD(DW4, DisableFrameContextUpdateFlag, params.disableFrameContextUpdateFlag ? 1 : 0); \
253                                                                                                 \
254     DO_FIELD(DW5, NumberOfActiveBePipes, params.numOfActiveBePipes);                            \
255     DO_FIELD(DW5, NumOfTileColumnsMinus1InAFrame, params.numOfTileColumnsInFrame - 1);          \
256     DO_FIELD(DW5, NumOfTileRowsMinus1InAFrame, params.numOfTileRowsInFrame - 1);                \
257                                                                                                 \
258     DO_FIELD(DW6, OutputDecodedTileColumnPositionInSbUnit, params.outputDecodedTileColPos);     \
259     DO_FIELD(DW6, OutputDecodedTileRowPositionInSbUnit, params.outputDecodedTileRowPos)
260 #else
261 #define DO_FIELDS()                                                                             \
262     DO_FIELD(DW1, FrameTileId, params.tileId);                                                  \
263     DO_FIELD(DW1, TgTileNum, params.tgTileNum);                                                   \
264     DO_FIELD(DW1, TileGroupId, params.tileGroupId);                                             \
265                                                                                                 \
266     DO_FIELD(DW2, TileColumnPositionInSbUnit, params.tileColPositionInSb);                      \
267     DO_FIELD(DW2, TileRowPositionInSbUnit, params.tileRowPositionInSb);                         \
268                                                                                                 \
269     DO_FIELD(DW3, TileWidthInSuperblockUnitMinus1, params.tileWidthInSbMinus1);                 \
270     DO_FIELD(DW3, TileHeightInSuperblockUnitMinus1, params.tileHeightInSbMinus1);               \
271     DO_FIELD(DW4, FirstTileInAFrame, params.firstTileInAFrame ? 1 : 0);                         \
272     DO_FIELD(DW4, IslasttileofcolumnFlag, params.lastTileOfColumn ? 1 : 0);                     \
273     DO_FIELD(DW4, IslasttileofrowFlag, params.lastTileOfRow ? 1 : 0);                           \
274     DO_FIELD(DW4, IsstarttileoftilegroupFlag, params.firstTileOfTileGroup ? 1 : 0);             \
275     DO_FIELD(DW4, IsendtileoftilegroupFlag, params.lastTileOfTileGroup ? 1 : 0);                \
276     DO_FIELD(DW4, IslasttileofframeFlag, params.lastTileOfFrame ? 1 : 0);                       \
277     DO_FIELD(DW4, DisableCdfUpdateFlag, params.disableCdfUpdateFlag ? 1 : 0);                   \
278     DO_FIELD(DW4, DisableFrameContextUpdateFlag, params.disableFrameContextUpdateFlag ? 1 : 0); \
279                                                                                                 \
280     DO_FIELD(DW5, NumberOfActiveBePipes, params.numOfActiveBePipes);                            \
281     DO_FIELD(DW5, NumOfTileColumnsMinus1InAFrame, params.numOfTileColumnsInFrame - 1);          \
282     DO_FIELD(DW5, NumOfTileRowsMinus1InAFrame, params.numOfTileRowsInFrame - 1);                \
283                                                                                                 \
284     DO_FIELD(DW6, OutputDecodedTileColumnPositionInSbUnit, params.outputDecodedTileColPos);     \
285     DO_FIELD(DW6, OutputDecodedTileRowPositionInSbUnit, params.outputDecodedTileRowPos)
286 #endif
287 
288 #include "mhw_hwcmd_process_cmdfields.h"
289     }
290 
_MHW_SETCMD_OVERRIDE_DECL(AVP_PIPE_BUF_ADDR_STATE)291     _MHW_SETCMD_OVERRIDE_DECL(AVP_PIPE_BUF_ADDR_STATE)
292     {
293         _MHW_SETCMD_CALLBASE(AVP_PIPE_BUF_ADDR_STATE);
294 
295         MHW_RESOURCE_PARAMS resourceParams = {};
296 
297         resourceParams.dwLsbNum      = MHW_VDBOX_HCP_GENERAL_STATE_SHIFT;
298         resourceParams.HwCommandType = MOS_MFX_PIPE_BUF_ADDR;
299 
300         // Film grain related
301         if (!Mos_ResourceIsNull(params.filmGrainOutputSurface))
302         {
303             MOS_SURFACE details = {};
304             MOS_ZeroMemory(&details, sizeof(details));
305             details.Format = Format_Invalid;
306             MHW_MI_CHK_STATUS(this->m_osItf->pfnGetResourceInfo(this->m_osItf, params.filmGrainOutputSurface, &details));
307 
308             cmd.FilmGrainInjectedOutputFrameBufferAddressAttributes.DW0.BaseAddressIndexToMemoryObjectControlStateMocsTables = 0;
309             cmd.FilmGrainInjectedOutputFrameBufferAddressAttributes.DW0.TileMode                                             = this->GetHwTileType(params.filmGrainOutputSurface->TileType,
310                 params.filmGrainOutputSurface->TileModeGMM,
311                 params.filmGrainOutputSurface->bGMMTileEnabled);
312 
313             MOS_MEMCOMP_STATE mmcState = MOS_MEMCOMP_DISABLED;
314             MHW_MI_CHK_STATUS(this->m_osItf->pfnGetMemoryCompressionMode(this->m_osItf,
315                 params.filmGrainOutputSurface,
316                 &mmcState));
317             cmd.FilmGrainInjectedOutputFrameBufferAddressAttributes.DW0.BaseAddressMemoryCompressionEnable = this->MmcEnabled(mmcState);
318             cmd.FilmGrainInjectedOutputFrameBufferAddressAttributes.DW0.CompressionType                    = this->MmcRcEnabled(mmcState);
319 
320             resourceParams.presResource    = params.filmGrainOutputSurface;
321             resourceParams.dwOffset        = details.RenderOffset.YUV.Y.BaseOffset;
322             resourceParams.pdwCmd          = (cmd.FilmGrainInjectedOutputFrameBufferAddress.DW0_1.Value);
323             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(FilmGrainInjectedOutputFrameBufferAddress);  // 21;
324             resourceParams.bIsWritable     = true;
325 
326             MHW_MI_CHK_STATUS(this->AddResourceToCmd(
327                 this->m_osItf,
328                 this->m_currentCmdBuf,
329                 &resourceParams));
330         }
331 
332         if (!Mos_ResourceIsNull(params.filmGrainSampleTemplateBuffer))
333         {
334             cmd.FilmGrainSampleTemplateAddressAttributes.DW0.BaseAddressIndexToMemoryObjectControlStateMocsTables = 0;
335 
336             resourceParams.presResource    = params.filmGrainSampleTemplateBuffer;
337             resourceParams.dwOffset        = 0;
338             resourceParams.pdwCmd          = (cmd.FilmGrainSampleTemplateAddress.DW0_1.Value);
339             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(FilmGrainSampleTemplateAddress);  // 59;
340             resourceParams.bIsWritable     = true;
341 
342             MHW_MI_CHK_STATUS(this->AddResourceToCmd(
343                 this->m_osItf,
344                 this->m_currentCmdBuf,
345                 &resourceParams));
346         }
347 
348         if (!Mos_ResourceIsNull(params.lrTileColumnAlignBuffer))
349         {
350             cmd.LoopRestorationFilterTileColumnAlignmentReadWriteBufferAddressAttributes.DW0.BaseAddressIndexToMemoryObjectControlStateMocsTables = 0;
351 
352             resourceParams.presResource    = params.lrTileColumnAlignBuffer;
353             resourceParams.dwOffset        = 0;
354             resourceParams.pdwCmd          = (cmd.LoopRestorationFilterTileColumnAlignmentReadWriteBufferAddress.DW0_1.Value);
355             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(LoopRestorationFilterTileColumnAlignmentReadWriteBufferAddress);  // 170;
356             resourceParams.bIsWritable     = true;
357 
358             MHW_MI_CHK_STATUS(this->AddResourceToCmd(
359                 this->m_osItf,
360                 this->m_currentCmdBuf,
361                 &resourceParams));
362         }
363 
364         if (!Mos_ResourceIsNull(params.filmGrainTileColumnDataBuffer))
365         {
366             cmd.FilmGrainTileColumnDataReadWriteBufferAddressAttributes.DW0.BaseAddressIndexToMemoryObjectControlStateMocsTables = 0;
367 
368             resourceParams.presResource    = params.filmGrainTileColumnDataBuffer;
369             resourceParams.dwOffset        = 0;
370             resourceParams.pdwCmd          = (cmd.FilmGrainTileColumnDataReadWriteBufferAddress.DW0_1.Value);
371             resourceParams.dwLocationInCmd = _MHW_CMD_DW_LOCATION(FilmGrainTileColumnDataReadWriteBufferAddress);  // 173;
372             resourceParams.bIsWritable     = true;
373 
374             MHW_MI_CHK_STATUS(this->AddResourceToCmd(
375                 this->m_osItf,
376                 this->m_currentCmdBuf,
377                 &resourceParams));
378         }
379 
380         return MOS_STATUS_SUCCESS;
381     }
382 MEDIA_CLASS_DEFINE_END(mhw__vdbox__avp__xe2_lpm_base__BaseImpl)
383 };
384 }  // namespace xe2_lpm_base
385 }  // namespace avp
386 }  // namespace vdbox
387 }  // namespace mhw
388 
389 #endif  // __MHW_VDBOX_AVP_IMPL_XE2_LPM_BASE_H__
390