xref: /aosp_15_r20/external/intel-media-driver/media_softlet/agnostic/common/vp/hal/packet/vp_render_sfc_base.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /* Copyright (c) 2022-2024, Intel Corporation
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a
4 * copy of this software and associated documentation files (the "Software"),
5 * to deal in the Software without restriction, including without limitation
6 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
7 * and/or sell copies of the Software, and to permit persons to whom the
8 * Software is furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included
11 * in all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
17 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
18 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
19 * OTHER DEALINGS IN THE SOFTWARE.
20 */
21 //!
22 //! \file     vp_render_sfc_base.h
23 //! \brief    The header file of the base class of SFC rendering component
24 //! \details  The SFC renderer supports Scaling, IEF, CSC/ColorFill and Rotation.
25 //!           It's responsible for setting up HW states and generating the SFC
26 //!           commands.
27 //!
28 
29 #ifndef __VP_RENDER_SFC_BASE_H__
30 #define __VP_RENDER_SFC_BASE_H__
31 
32 #include "vp_sfc_common.h"
33 #include "vp_vebox_common.h"
34 #include "vp_allocator.h"
35 #include "media_defs.h"
36 #include "mhw_sfc_itf.h"
37 #include "media_feature.h"
38 
39 namespace vp {
40 
41 class VpIef;
42 
43 class SfcRenderBase
44 {
45 
46 public:
47     SfcRenderBase(VP_MHWINTERFACE &vpMhwinterface, PVpAllocator &allocator, bool disbaleSfcDithering);
48     virtual ~SfcRenderBase();
49 
50     //!
51     //! \brief    Initialize the object
52     //! \return   MOS_STATUS
53     //!
54     virtual MOS_STATUS Init();
55 
56     virtual MOS_STATUS Init(VIDEO_PARAMS& videoParams);
57 
58     //!
59     //! \brief    Setup CSC parameters of the SFC State
60     //! \param    [in,out] sfcStateParams
61     //!           Pointer to SFC_STATE params
62     //! \param    [out] iEFStateParams
63     //!           MHW IEF state params
64     //! \return   void
65     //!
66     virtual MOS_STATUS SetIefStateCscParams(
67         mhw::sfc::SFC_STATE_PAR              *pSfcStateParams,
68         mhw::sfc::SFC_IEF_STATE_PAR          *pIEFStateParams);
69 
70     //!
71     //! \brief    Setup parameters related to SFC_IEF State
72     //! \details  Setup the IEF and CSC params of the SFC_IEF State
73     //! \param    [in,out] sfcStateParams
74     //!           Pointer to SFC_STATE params
75     //! \return   void
76     //!
77     virtual MOS_STATUS SetIefStateParams(
78         mhw::sfc::SFC_STATE_PAR           *pSfcStateParams);
79 
80     //!
81     //! \brief    Setup parameters related to SFC_AVS State
82     //! \details  Setup the 8x8 table of SFC sampler
83     //! \return   MOS_STATUS
84     //!
85     virtual MOS_STATUS SetAvsStateParams();
86 
87     //!
88     //! \brief    Send SFC pipe commands
89     //! \details  Register the surfaces and send the commands needed by SFC pipe
90     //! \param    [in] pRenderData
91     //!           Pointer to Vebox Render data
92     //! \param    [in,out] pCmdBuffer
93     //!           Pointer to command buffer
94     //! \return   MOS_STATUS_SUCCESS if successful, otherwise failed
95     //!
96     virtual MOS_STATUS SendSfcCmd(
97         bool                            bOutputToMemory,
98         PMOS_COMMAND_BUFFER             pCmdBuffer);
99 
100     //!
101     //! \brief    Setup SFC states and parameters
102     //! \details  Setup SFC states and parameters including SFC State, AVS
103     //!           and IEF parameters
104     //! \param    [in] targetSurface
105     //!           Pointer to Output Surface
106     //! \return   Return MOS_STATUS_SUCCESS if successful, otherwise failed
107     //!
108     virtual MOS_STATUS SetupSfcState(PVP_SURFACE targetSurface);
109 
110     virtual MOS_STATUS UpdateCscParams(FeatureParamCsc &cscParams);
111 
112     //!
113     //! \brief    check whether SFC Write have offset which may hit compresed write limitation
114     //! \details  check whether SFC Write have offset which may hit compresed write limitation
115     //! \param    [in] targetSurface
116     //!           Pointer to targetSurface
117     //! \return   the output pipe compression state
118     //!
IsSFCUncompressedWriteNeeded(PVP_SURFACE targetSurface)119     virtual bool IsSFCUncompressedWriteNeeded(PVP_SURFACE targetSurface)
120     {
121         VP_FUNC_CALL();
122         return false;
123     }
124 
125     //!
126     //! \brief    Set scaling parameters
127     //! \details  Set scaling parameters
128     //! \param    [in] scalingParams
129     //!           Scaling parameters
130     //! \return   MOS_STATUS_SUCCESS if successful, otherwise failed
131     //!
132     virtual MOS_STATUS SetScalingParams(PSFC_SCALING_PARAMS scalingParams);
133 
134     //!
135     //! \brief    Set csc parameters
136     //! \details  Set csc parameters
137     //! \param    [in] cscParams
138     //!           Csc parameters
139     //! \return   MOS_STATUS_SUCCESS if successful, otherwise failed
140     //!
141     virtual MOS_STATUS SetCSCParams(PSFC_CSC_PARAMS cscParams);
142 
143     //!
144     //! \brief    Set rotation and mirror parameters
145     //! \details  Set rotation and mirror parameters
146     //! \param    [in] rotMirParams
147     //!           rotation and mirror parameters
148     //! \return   MOS_STATUS_SUCCESS if successful, otherwise failed
149     //!
150     virtual MOS_STATUS SetRotMirParams(PSFC_ROT_MIR_PARAMS rotMirParams);
151 
152     //!
153     //! \brief    Set mmc parameters
154     //! \details  Set mmc parameters
155     //! \param    [in] renderTarget
156     //!           render target surface
157     //! \param    [in] isFormalMmcSupported
158     //!           Is format supported by mmc
159     //! \param    [in] isMmcEnabled
160     //!           Is mmc enabled
161     //! \return   MOS_STATUS_SUCCESS if successful, otherwise failed
162     //!
163     virtual MOS_STATUS SetMmcParams(PMOS_SURFACE renderTarget, bool isFormatMmcSupported, bool isMmcEnabled);
164 
165     //!
166     //! \brief    Check whether VDBOX-SFC Input Format Supported
167     //! \details  Check whether VDBOX-SFC Input Format Supported.
168     //! \param    codecStandard
169     //!           [in] Codec Standard.
170     //! \param    inputFormat
171     //!           [in] Format of Input Frame
172     //! \return   bool
173     //!           Return true if supported, otherwise failed
174     //!
175     virtual bool IsVdboxSfcInputFormatSupported(
176     CODECHAL_STANDARD           codecStandard,
177     MOS_FORMAT                  inputFormat);
178 
179     //!
180     //! \brief    Check whether VDBOX-SFC Output Format Supported
181     //! \details  Check whether VDBOX-SFC Output Format Supported.
182     //! \param    codecStandard
183     //!           [in] Codec Standard.
184     //! \param    outputFormat
185     //!           [in] Format of Output Frame
186     //! \return   bool
187     //!           Return true if supported, otherwise failed
188     //!
189     virtual bool IsVdboxSfcOutputFormatSupported(
190         CODECHAL_STANDARD           codecStandard,
191         MOS_FORMAT                  outputFormat,
192         MOS_TILE_TYPE               tileType);
193 
IsCSC()194     bool IsCSC() { return m_renderData.bCSC; }
IsScaling()195     bool IsScaling() { return m_renderData.bScaling; }
196 
197     //!
198     //! \brief    Get Sfc's input format
199     //! \return   MOS_FORMAT
200     //!
GetInputFormat()201     MOS_FORMAT GetInputFormat()
202     {
203         return m_renderData.SfcInputFormat;
204     }
205 
SetIefObj(VpIef * iefObj)206     MOS_STATUS SetIefObj(VpIef *iefObj)
207     {
208         VP_PUBLIC_CHK_NULL_RETURN(iefObj);
209         m_iefObj = iefObj;
210         return MOS_STATUS_SUCCESS;
211     }
212 
GetIefParams()213     PVPHAL_IEF_PARAMS GetIefParams()
214     {
215         return m_renderData.pIefParams;
216     }
217 
218     MOS_STATUS SetHistogramBuf(PMOS_BUFFER histogramBuf);
219 
220     //!
221     //! \brief    Set sfc pipe selected with vebox
222     //! \details  Set sfc pipe selected with vebox
223     //! \param    [in] dwSfcPipe
224     //!           Sfc pipe selected with vebox
225     //! \param    [in] dwSfcNum
226     //!           Sfc pipe num in total
227     //! \return   MOS_STATUS
228     //!           MOS_STATUS_SUCCESS if success, else fail reason
SetSfcPipe(uint32_t dwSfcPipe,uint32_t dwSfcNum)229     virtual MOS_STATUS SetSfcPipe(uint32_t dwSfcPipe, uint32_t dwSfcNum)
230     {
231         MOS_STATUS eStatus = MOS_STATUS_UNKNOWN;
232         MOS_UNUSED(dwSfcPipe);
233         MOS_UNUSED(dwSfcNum);
234         return eStatus;
235     }
236 
237     virtual MOS_STATUS UpdateIefParams(PVPHAL_IEF_PARAMS iefParams);
238 
239 protected:
240     //!
241     //! \brief    Initialize SfcState parameters
242     //! \return   MOS_STATUS_SUCCESS if successful, otherwise failed
243     //!
244     virtual MOS_STATUS InitSfcStateParams() = 0;
245 
246     //!
247     //! \brief    Set SFC input chroma subsampling
248     //! \details  Set SFC input chroma subsampling according to
249     //!           pipe mode
250     //! \param    [out] sfcStateParams
251     //!           Pointer to SFC state params
252     //! \return   MOS_STATUS
253     //!
254     virtual MOS_STATUS SetSfcStateInputChromaSubSampling(
255         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
256 
257     //!
258     //! \brief    Set SFC input ordering mode
259     //! \details  SFC input ordering mode according to
260     //!           pipe mode
261     //! \param    [out] sfcStateParams
262     //!           Pointer to SFC_STATE params
263     //! \return   MOS_STATUS
264     //!
265     virtual MOS_STATUS SetSfcStateInputOrderingMode(
266         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
267     virtual MOS_STATUS SetSfcStateInputOrderingModeJpeg(
268         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
269     virtual MOS_STATUS SetSfcStateInputOrderingModeVdbox(
270         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
271     virtual MOS_STATUS SetSfcStateInputOrderingModeHcp(
272         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
273 
274     //!
275     //! \brief    Set codec pipe mode
276     //! \details  Set codec pipe mode
277     //! \param    [in] codecStandard
278     //!           codec standard
279     //! \return   MOS_STATUS
280     virtual MOS_STATUS SetCodecPipeMode(CODECHAL_STANDARD codecStandard);
281     //!
282     //! \brief    Setup ColorFill parameters
283     //! \details  Setup ColorFill parameters
284     //! \param    [in] sfcStateParams
285     //!           Pointer to SFC_STATE params
286     //! \return   void
287     void SetColorFillParams(
288         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
289 
290     //!
291     //! \brief    Setup Rotation and Mirrow params
292     //! \details  Setup Rotation and Mirrow params
293     //! \param    [in,out] sfcStateParams
294     //!           Pointer to SFC_STATE params
295     //! \return   void
296     //!
297     void SetRotationAndMirrowParams(
298         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
299 
300     //!
301     //! \brief    Setup Chromasting params
302     //! \details  Setup Chromasting params
303     //! \param    [in,out] sfcStateParams
304     //!           Pointer to SFC_STATE params
305     //! \return   void
306     //!
307     void SetChromasitingParams(
308         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
309 
310     //!
311     //! \brief    Setup Bypass X & Y AdaptiveFilter params
312     //! \details  Setup Bypass X & Y AdaptiveFilter params
313     //! \param    [in,out] sfcStateParams
314     //!           Pointer to SFC_STATE params
315     //! \return   void
316     //!
317     void SetXYAdaptiveFilter(
318         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
319 
320     //!
321     //! \brief    Setup RGB Adaptive params
322     //! \details  Setup RGB Adaptive params
323     //! \param    [in,out] sfcStateParams
324     //!           Pointer to SFC_STATE params
325     //! \return   void
326     //!
327     void SetRGBAdaptive(
328         mhw::sfc::SFC_STATE_PAR       *pSfcStateParams);
329 
330     //!
331     //! \brief    Initialize SFC Output Surface Command parameters
332     //! \details  Initialize MHW SFC Output Surface Command parameters from SFC Pipe output Surface
333     //! \param    [in] pSfcPipeOutSurface
334     //!           pointer to SFC Pipe output Surface
335     //! \param    [out] pMhwOutSurfParams
336     //!           pointer to SFC Output Surface Command parameters
337     //! \return   MOS_STATUS
338     //!
339     MOS_STATUS InitMhwOutSurfParams(
340         PVP_SURFACE                     pSfcPipeOutSurface,
341         PMHW_SFC_OUT_SURFACE_PARAMS     pMhwOutSurfParams);
342 
343     //!
344     //! \brief    Initialize AVS parameters shared by Renderers
345     //! \details  Initialize the members of the AVS parameter and allocate memory for its coefficient tables
346     //! \param    [in,out] pAVS_Params
347     //!           Pointer to MHW AVS parameter
348     //! \param    [in] uiYCoeffTableSize
349     //!           Size of the Y coefficient table
350     //! \param    [in] uiUVCoeffTableSize
351     //!           Size of the UV coefficient table
352     //! \return   void
353     //!
354     //!
355     void InitAVSParams(
356         PMHW_AVS_PARAMS     pAVS_Params,
357         uint32_t            uiYCoeffTableSize,
358         uint32_t            uiUVCoeffTableSize);
359 
360     //!
361     //! \brief    Destroy AVS parameters shared by Renderers
362     //! \details  Free the memory of AVS parameter's coefficient tables
363     //! \param    [in,out] pAVS_Params
364     //!           Pointer to VPHAL AVS parameter
365     //! \return   void
366     //!
367     void DestroyAVSParams(
368         PMHW_AVS_PARAMS   pAVS_Params);
369 
370     //!
371     //! \brief    Get Avs line buffer size
372     //! \details  Get Avs line buffer size according to height of input surface
373     //! \param    [in] lineTiledBuffer
374     //!           ture if avs line tile buffer, otherwise, avs line buffer.
375     //! \param    [in] b8tapChromafiltering
376     //!           ture if 8-tap UV, otherwise, 4-tap UV.
377     //! \param    [in] width
378     //!           The width of input surface
379     //! \param    [in] height
380     //!           The height of input surface
381     //! \return   uint32_t
382     //!
383     uint32_t GetAvsLineBufferSize(bool lineTiledBuffer, bool b8tapChromafiltering, uint32_t width, uint32_t height);
384 
385     //!
386     //! \brief    Get Ief line buffer size
387     //! \details  Get Ief line buffer size according to height of scaled surface
388     //! \param    [in] lineTiledBuffer
389     //!           ture if ief line tile buffer, otherwise, ief line buffer.
390     //! \param    [in] heightOutput
391     //!           The height of output surface
392     //! \return   uint32_t
393     //!
394     uint32_t GetIefLineBufferSize(bool lineTiledBuffer, uint32_t heightOutput);
395 
396     //!
397     //! \brief    Get Sfd line buffer size
398     //! \details  Get Sfd line buffer size according to height of scaled surface
399     //! \param    [in] lineTiledBuffer
400     //!           ture if sdf line tile buffer, otherwise, sdf line buffer.
401     //! \param    [in] formatOutput
402     //!           format of output surface.
403     //! \param    [in] widthOutput
404     //!           The width of input surface
405     //! \param    [in] heightOutput
406     //!           The height of input surface
407     //! \return   uint32_t
408     //!
409     virtual uint32_t GetSfdLineBufferSize(bool lineTiledBuffer, MOS_FORMAT formatOutput, uint32_t widthOutput, uint32_t heightOutput);
410 
411     //!
412     //! \brief    Allocate line buffer
413     //! \details  Allocate line buffer
414     //! \param    [in/out] lineBuffer
415     //!           pointer to line buffer.
416     //! \param    [in] size
417     //!           size of line buffer.
418     //! \param    [in] bufName
419     //!           name of line buffer.
420     //! \return   MOS_STATUS
421     //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
422     //!
423     MOS_STATUS AllocateLineBuffer(VP_SURFACE *&lineBuffer, uint32_t size, const char *bufName);
424 
425     //!
426     //! \brief    Allocate line buffer array
427     //! \details  Allocate line buffer
428     //! \param    [in/out] lineBufferArray
429     //!           pointer to line buffer.
430     //! \param    [in] size
431     //!           size of line buffer.
432     //! \param    [in] bufName
433     //!           name of line buffer.
434     //! \return   MOS_STATUS
435     //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
436     //!
437     MOS_STATUS AllocateLineBufferArray(VP_SURFACE **&lineBufferArray, uint32_t size, const char *bufName);
438 
439     //!
440     //! \brief    Destroy line buffer array
441     //! \details  Allocate line buffer
442     //! \param    [in/out] lineBufferArray
443     //!           pointer to line buffer.
444     //! \param    [in] count
445     //!           count of line buffer.
446     //! \return   MOS_STATUS
447     //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
448     //!
449     MOS_STATUS DestroyLineBufferArray(VP_SURFACE **&lineBufferArray, int32_t count);
450 
451     //!
452     //! \brief    Allocate Resources for SFC Pipe
453     //! \details  Allocate the AVS and IEF line buffer surfaces for SFC
454     //! \return   Return MOS_STATUS_SUCCESS if successful, otherwise failed
455     //!
456     virtual MOS_STATUS AllocateResources();
457 
458     //!
459     //! \brief    SFC free resources
460     //! \details  Free resources that are used in Vebox
461     //! \return   MOS_STATUS
462     //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
463     //!
464     virtual MOS_STATUS FreeResources();
465 
466     virtual MOS_STATUS AddSfcLock(
467         PMOS_COMMAND_BUFFER     pCmdBuffer,
468         mhw::sfc::SFC_LOCK_PAR *pSfcLockParams);
469 
470     //!
471     //! \brief    Set resource of line buffer
472     //! \details  Set resource of line buffer
473     //! \param    [out] osResLineBuffer
474     //!           resource to be set
475     //! \param    [in] lineBuffer
476     //!           pointer to line buffer
477     //! \return   MOS_STATUS
478     //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
479     //!
480     MOS_STATUS SetLineBuffer(PMOS_RESOURCE &osResLineBuffer, VP_SURFACE *lineBuffer);
481 
482     virtual MOS_STATUS SetupScalabilityParams() = 0;
483     virtual bool IsInputChannelSwapNeeded(MOS_FORMAT inputFormat);
484     virtual bool IsOutputChannelSwapNeeded(MOS_FORMAT outputFormat) = 0;
485     virtual bool IsCscNeeded(SFC_CSC_PARAMS &cscParams) = 0;
486 
487     virtual MOS_STATUS AddSfcState(
488         PMOS_COMMAND_BUFFER         pCmdBuffer,
489         mhw::sfc::SFC_STATE_PAR     *pSfcStateParams,
490         PMHW_SFC_OUT_SURFACE_PARAMS pOutSurface);
491 
492     virtual MOS_STATUS AddSfcAvsState(
493         PMOS_COMMAND_BUFFER            pCmdBuffer);
494 
495     virtual MOS_STATUS AddSfcIefState(
496         PMOS_COMMAND_BUFFER                 pCmdBuffer);
497 
498     virtual MOS_STATUS AddSfcAvsLumaTable(
499         PMOS_COMMAND_BUFFER                    pCmdBuffer);
500 
501     virtual MOS_STATUS AddSfcAvsChromaTable(
502         PMOS_COMMAND_BUFFER                      pCmdBuffer);
503 
504     virtual MOS_STATUS AddSfcFrameStart(
505         PMOS_COMMAND_BUFFER pCmdBuffer,
506         uint8_t             sfcPipeMode);
507 
508     virtual MOS_STATUS SetSfcAVSScalingMode(
509         MHW_SCALING_MODE  ScalingMode);
510 
511     virtual MOS_STATUS SetSfcSamplerTable(
512         mhw::sfc::SFC_AVS_LUMA_Coeff_Table_PAR    *pLumaTable,
513         mhw::sfc::SFC_AVS_CHROMA_Coeff_Table_PAR  *pChromaTable,
514         PMHW_AVS_PARAMS                 pAvsParams,
515         MOS_FORMAT                      SrcFormat,
516         float                           fScaleX,
517         float                           fScaleY,
518         uint32_t                        dwChromaSiting,
519         bool                            bUse8x8Filter,
520         float                           fHPStrength,
521         float                           fLanczosT);
522 
523 protected:
524 
525     // HW intface to access MHW
526     PMOS_INTERFACE                  m_osInterface  = nullptr;
527     std::shared_ptr<mhw::sfc::Itf>  m_sfcItf       = nullptr;
528     std::shared_ptr<mhw::mi::Itf>   m_miItf       = nullptr;
529     MEDIA_FEATURE_TABLE             *m_skuTable = nullptr;
530     MEDIA_WA_TABLE                  *m_waTable = nullptr;
531 
532     // AVS related params
533     MHW_AVS_PARAMS                  m_AvsParameters = {};                     //!< AVS parameters
534     VPHAL_SFC_AVS_STATE             m_avsState = {};                          //!< AVS State and Coeff. table
535     static const uint32_t           k_YCoefficientTableSize = 256 * sizeof(int32_t);
536     static const uint32_t           k_UVCoefficientTableSize = 128 * sizeof(int32_t);
537 
538     mhw::sfc::SFC_STATE_PAR         *m_sfcStateParams = nullptr;               //!< Pointer to sfc state parameters
539     VP_SFC_RENDER_DATA              m_renderData = {};                        //!< Transient Render data populated for every BLT call
540     //VP_SFC_RENDER_DATA              *m_renderData = nullptr;                        //!< Transient Render data populated for every BLT call
541 
542     VPHAL_CSPACE                    m_cscRTCspace = {};                       //!< Cspace of Render Target
543     VPHAL_CSPACE                    m_cscInputCspace = {};                    //!< Cspace of input frame
544     bool                            m_cscInputSwapNeeded  = false;
545 
546     mhw::sfc::SFC_IEF_STATE_PAR     m_IefStateParams = {};                    //!< IEF Params state
547     float                           m_cscCoeff[9] = {};                       //!< [3x3] Coeff matrix
548     float                           m_cscInOffset[3] = {};                    //!< [3x1] Input Offset matrix
549     float                           m_cscOutOffset[3] = {};                   //!< [3x1] Output Offset matrix
550     uint32_t                        m_currentChannel = 0;                     //!< 0=StereoLeft or nonStereo, 1=StereoRight. N/A in nonStereo
551 
552     VP_SURFACE                      **m_AVSLineBufferSurfaceArray = nullptr;  //!< AVS Line Buffer Surface for SFC
553     VP_SURFACE                      **m_IEFLineBufferSurfaceArray = nullptr;  //!< IEF Line Buffer Surface for SFC
554     VP_SURFACE                      **m_SFDLineBufferSurfaceArray = nullptr;  //!< SFD Line Buffer Surface for SFC
555 
556     VP_SURFACE                      *m_AVSLineTileBufferSurface = nullptr;    //!< AVS Line Tile Buffer Surface for SFC
557     VP_SURFACE                      *m_IEFLineTileBufferSurface = nullptr;    //!< IEF Line Tile Buffer Surface for SFC
558     VP_SURFACE                      *m_SFDLineTileBufferSurface = nullptr;    //!< SFD Line Tile Buffer Surface for SFC
559 
560     // Allocator interface
561     PVpAllocator                    m_allocator = nullptr;                                //!< vp pipeline allocator
562     VpIef                           *m_iefObj = nullptr;
563     uint8_t                         m_pipeMode = MhwSfcInterface::SFC_PIPE_MODE_VEBOX; //!< which FE engine pipe used
564 
565     bool                            m_bVdboxToSfc = false;
566     VIDEO_PARAMS                    m_videoConfig = {};
567 
568     int                             m_lineBufferAllocatedInArray    = 1;        //!< Line buffer allocated in array
569 
570     SCALABILITY_PARAMS              m_scalabilityParams             = {};
571 
572     MOS_SURFACE                     m_histogramSurf = {};   //!< Histogram buffer
573 
574     MHW_SFC_OUT_SURFACE_PARAMS      m_outSurfaceParam = {};
575 
576     bool                            m_disableSfcDithering = false;
577 
578     VP_SURFACE                      **m_AVSLineBufferSurfaceArrayfor1stPassofSfc2Pass = nullptr;  //!< AVS Line Buffer Surface for SFC 1st Pass of Sfc 2Pass
579     VP_SURFACE                      **m_IEFLineBufferSurfaceArrayfor1stPassofSfc2Pass = nullptr;  //!< IEF Line Buffer Surface for SFC 1st Pass of Sfc 2Pass
580     VP_SURFACE                      **m_SFDLineBufferSurfaceArrayfor1stPassofSfc2Pass = nullptr;  //!< SFD Line Buffer Surface for SFC 1st Pass of Sfc 2Pass
581     int                             m_lineBufferAllocatedInArrayfor1stPassofSfc2Pass  = 1;        //!< Line buffer allocated in array for SFC 1st Pass of Sfc 2Pass
582 
583 MEDIA_CLASS_DEFINE_END(vp__SfcRenderBase)
584 };
585 
586 
587 }
588 #endif // !__VP_RENDER_SFC_BASE_H__
589