blob: 38e8d0d422c6949bdbb414474d9d73fdc7a75a77 [file] [log] [blame]
/*
* Copyright (c) 2014-2017, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
//!
//! \file mhw_sfc.h
//! \brief MHW interface for constructing commands for the SFC
//! \details Impelements the functionalities common across all platforms for MHW_SFC
//!
#ifndef __MHW_SFC_H__
#define __MHW_SFC_H__
#include "mhw_cp_interface.h"
#include "mhw_state_heap.h"
#include "mhw_utilities.h"
#include "mos_os.h"
#include "codec_def_common.h"
#include "codec_def_decode_jpeg.h"
static const int MHW_SFC_CACHELINE_SIZE = 64;
static const int MHW_SFC_MIN_HEIGHT = 128;
static const int MHW_SFC_MIN_WIDTH = 128;
static const int MHW_SFC_MAX_HEIGHT = 4096;
static const int MHW_SFC_MAX_WIDTH = 4096;
static const int MHW_SFC_VE_HEIGHT_ALIGN = 4;
static const int MHW_SFC_VE_WIDTH_ALIGN = 16;
static const float MHW_SFC_MIN_SCALINGFACTOR = (1.0F / 8.0F);
static const float MHW_SFC_MAX_SCALINGFACTOR = 8.0F;
static const uint32_t MHW_SFC_SFD_BUFF_HEIGHT_BAR = 4160;
#define NEED_SFD_LINE_BUFFER(_SURFACE_HEIGHT) ((_SURFACE_HEIGHT) > MHW_SFC_SFD_BUFF_HEIGHT_BAR)
#define SFD_LINE_BUFFER_SIZE(_SURFACE_HEIGHT) (NEED_SFD_LINE_BUFFER(_SURFACE_HEIGHT) ? (uint32_t)ceil((_SURFACE_HEIGHT) * MHW_SFC_CACHELINE_SIZE / 10) : 0)
typedef class MhwSfcInterface MHW_SFC_INTERFACE, *PMHW_SFC_INTERFACE;
typedef enum _SFC_AVS_INPUT_SITING_COEF
{
SFC_AVS_INPUT_SITING_COEF_0_OVER_8 = 0x0,
SFC_AVS_INPUT_SITING_COEF_1_OVER_8 = 0x1,
SFC_AVS_INPUT_SITING_COEF_2_OVER_8 = 0x2,
SFC_AVS_INPUT_SITING_COEF_3_OVER_8 = 0x3,
SFC_AVS_INPUT_SITING_COEF_4_OVER_8 = 0x4,
SFC_AVS_INPUT_SITING_COEF_5_OVER_8 = 0x5,
SFC_AVS_INPUT_SITING_COEF_6_OVER_8 = 0x6,
SFC_AVS_INPUT_SITING_COEF_7_OVER_8 = 0x7,
SFC_AVS_INPUT_SITING_COEF_8_OVER_8 = 0x8
} SFC_AVS_INPUT_SITING_COEF, *PSFC_AVS_INPUT_SITING_COEF;
//!
//! \brief Structure to hold AVS Luma Filter Coeff, same as SFC_AVS_LUMA_FILTER_COEFF_G9
//!
typedef struct _SFC_AVS_LUMA_FILTER_COEFF
{
// DWORD 0
union
{
struct
{
uint32_t Table0XFilterCoefficient0 : MHW_BITFIELD_RANGE(0,7);
uint32_t Table0YFilterCoefficient0 : MHW_BITFIELD_RANGE(8,15);
uint32_t Table0XFilterCoefficient1 : MHW_BITFIELD_RANGE(16,23);
uint32_t Table0YFilterCoefficient1 : MHW_BITFIELD_RANGE(24,31);
};
struct
{
uint32_t Value;
};
} DW0;
// DWORD 1
union
{
struct
{
uint32_t Table0XFilterCoefficient2 : MHW_BITFIELD_RANGE(0,7);
uint32_t Table0YFilterCoefficient2 : MHW_BITFIELD_RANGE(8,15);
uint32_t Table0XFilterCoefficient3 : MHW_BITFIELD_RANGE(16,23);
uint32_t Table0YFilterCoefficient3 : MHW_BITFIELD_RANGE(24,31);
};
struct
{
uint32_t Value;
};
} DW1;
// DWORD 2
union
{
struct
{
uint32_t Table0XFilterCoefficient4 : MHW_BITFIELD_RANGE(0,7);
uint32_t Table0YFilterCoefficient4 : MHW_BITFIELD_RANGE(8,15);
uint32_t Table0XFilterCoefficient5 : MHW_BITFIELD_RANGE(16,23);
uint32_t Table0YFilterCoefficient5 : MHW_BITFIELD_RANGE(24,31);
};
struct
{
uint32_t Value;
};
} DW2;
// DWORD 3
union
{
struct
{
uint32_t Table0XFilterCoefficient6 : MHW_BITFIELD_RANGE(0,7);
uint32_t Table0YFilterCoefficient6 : MHW_BITFIELD_RANGE(8,15);
uint32_t Table0XFilterCoefficient7 : MHW_BITFIELD_RANGE(16,23);
uint32_t Table0YFilterCoefficient7 : MHW_BITFIELD_RANGE(24,31);
};
struct
{
uint32_t Value;
};
} DW3;
} SFC_AVS_LUMA_FILTER_COEFF, *PSFC_AVS_LUMA_FILTER_COEFF;
//!
//! \brief Structure to hold AVS Chroma Filter Coeff, same as SFC_AVS_CHROMA_FILTER_COEFF_G9
//!
typedef struct _SFC_AVS_CHROMA_FILTER_COEFF
{
// DWORD 0
union
{
struct
{
uint32_t Table1XFilterCoefficient2 : MHW_BITFIELD_RANGE(0,7);
uint32_t Table1YFilterCoefficient2 : MHW_BITFIELD_RANGE(8,15);
uint32_t Table1XFilterCoefficient3 : MHW_BITFIELD_RANGE(16,23);
uint32_t Table1YFilterCoefficient3 : MHW_BITFIELD_RANGE(24,31);
};
struct
{
uint32_t Value;
};
} DW0;
// DWORD 1
union
{
struct
{
uint32_t Table1XFilterCoefficient4 : MHW_BITFIELD_RANGE(0,7);
uint32_t Table1YFilterCoefficient4 : MHW_BITFIELD_RANGE(8,15);
uint32_t Table1XFilterCoefficient5 : MHW_BITFIELD_RANGE(16,23);
uint32_t Table1YFilterCoefficient5 : MHW_BITFIELD_RANGE(24,31);
};
struct
{
uint32_t Value;
};
} DW1;
} SFC_AVS_CHROMA_FILTER_COEFF, *PSFC_AVS_CHROMA_FILTER_COEFF;
//!
//! \brief Structure to hold AVS Luma Coeff tables
//!
typedef struct _MHW_SFC_AVS_LUMA_TABLE
{
uint8_t sfcPipeMode; //!< SFC Pipe Mode
SFC_AVS_LUMA_FILTER_COEFF LumaTable[NUM_HW_POLYPHASE_TABLES];
} MHW_SFC_AVS_LUMA_TABLE, *PMHW_SFC_AVS_LUMA_TABLE;
//!
//! \brief Structure to hold AVS Chroma Coeff tables
//!
typedef struct _MHW_SFC_AVS_CHROMA_TABLE
{
uint8_t sfcPipeMode; //!< SFC Pipe Mode
SFC_AVS_CHROMA_FILTER_COEFF ChromaTable[NUM_HW_POLYPHASE_TABLES];
} MHW_SFC_AVS_CHROMA_TABLE, *PMHW_SFC_AVS_CHROMA_TABLE;
//!
//! \brief Structure to hold AVS State
//!
typedef struct _MHW_SFC_AVS_STATE
{
uint8_t sfcPipeMode; //!< SFC Pipe Mode
uint32_t dwInputHorizontalSiting;
uint32_t dwInputVerticalSitting;
uint32_t dwAVSFilterMode; // Bilinear, 5x5 or 8x8
} MHW_SFC_AVS_STATE, *PMHW_SFC_AVS_STATE;
//!
//! \brief SFC State Command parameters
//!
typedef struct _MHW_SFC_STATE_PARAMS
{
uint8_t sfcPipeMode; //!< SFC Pipe Mode: VD-to-SFC or VE-to-SFC
uint32_t dwVDVEInputOrderingMode;
uint32_t dwInputChromaSubSampling; // Chroma subsampling at SFC input
float fAlphaPixel; // Alpha pixel
float fChromaSubSamplingXSiteOffset; // Chroma siting X offset
float fChromaSubSamplingYSiteOffset; // Chroma siting Y offset
uint32_t dwChromaDownSamplingMode; // Chroma Downsampling Mode
uint32_t dwChromaDownSamplingVerticalCoef; // Chomra Downsampling Vertical Coef
uint32_t dwChromaDownSamplingHorizontalCoef; // Chomra Downsampling Horizontal Coef
uint32_t dwOutputFrameHeight; // Output Frame Height
uint32_t dwOutputFrameWidth; // Output Frame Width
MOS_FORMAT OutputFrameFormat; // Output Frame Format
uint32_t dwInputFrameHeight; // Input Frame Height
uint32_t dwInputFrameWidth; // Input Frame Width
MOS_FORMAT InputFrameFormat; // Input Frame Format
// Scaling parameters
uint32_t dwAVSFilterMode; // Bilinear, 5x5 or 8x8
uint32_t dwSourceRegionHeight; // Source/Crop region height
uint32_t dwSourceRegionWidth; // Source/Crop region width
uint32_t dwSourceRegionVerticalOffset; // Source/Crop region vertical offset
uint32_t dwSourceRegionHorizontalOffset; // Source/Crop region horizontal offset
uint32_t dwScaledRegionHeight; // Scaled region height
uint32_t dwScaledRegionWidth; // Scaled region width
uint32_t dwScaledRegionVerticalOffset; // Scaled region vertical offset
uint32_t dwScaledRegionHorizontalOffset; // Scaled region horizontal offset
float fAVSXScalingRatio; // X Scaling Ratio
float fAVSYScalingRatio; // Y Scaling Ratio
bool bBypassXAdaptiveFilter; // If true, X direction will use Default Sharpness level to blend
// b/w smooth and sharp filters rather than the calculated value
bool bBypassYAdaptiveFilter; // If true, Y direction will use Default Sharpness level to blend
// b/w smooth and sharp filters rather than the calculated value
bool bRGBAdaptive; // If true, Enable the RGB Adaptive filter
// IEF params
bool bIEFEnable; // IEF Filter enable
bool bSkinToneTunedIEFEnable; // Skin Tone Tuned IEF enable
bool bAVSChromaUpsamplingEnable; // Up sample chroma prior to IEF filter
bool b8tapChromafiltering; // This bit enables 8 tap filtering for Chroma Channels
// Rotation Params
MHW_ROTATION RotationMode; // Rotation mode -- 0, 90, 180 or 270
uint32_t dwMirrorType; // Mirror Type -- vert/horiz
bool bMirrorEnable; // Mirror mode -- enable/disable
// ColorFill params
bool bColorFillEnable; // ColorFill enable
float fColorFillYRPixel; // ColorFill Y/R pixel
float fColorFillUGPixel; // ColorFill U/G pixel
float fColorFillVBPixel; // ColorFill V/B pixel
float fColorFillAPixel; // ColorFill A pixel
// CSC Params
bool bCSCEnable; // YUV->RGB/YUV->YUV CSC enable
bool bRGBASwapEnable; // R, B Channel Swap enable
bool bInputColorSpace; //0: YUV color space, 1:RGB color space
// Memory compression Enable Flag
bool bMMCEnable; // Flag used to decide whether sfc output should be compressed
MOS_RESOURCE_MMC_MODE MMCMode; // Memory compression mode
// Resources used by SFC
PMOS_RESOURCE pOsResOutputSurface; // Output Frame written by SFC
PMOS_RESOURCE pOsResAVSLineBuffer; // AVS Line buffer used by SFC
PMOS_RESOURCE pOsResIEFLineBuffer; // IEF Line buffer used by SFC
uint32_t dwOutputSurfaceOffset; // Output Frame offset (page based offset)
uint16_t wOutputSurfaceUXOffset; // Output Frame offset (page internal U offset for X axis)
uint16_t wOutputSurfaceUYOffset; // Output Frame offset (page internal U offset for Y axis)
uint16_t wOutputSurfaceVXOffset; // Output Frame offset (page internal V offset for X axis)
uint16_t wOutputSurfaceVYOffset; // Output Frame offset (page internal V offset for Y axis)
} MHW_SFC_STATE_PARAMS, *PMHW_SFC_STATE_PARAMS;
//!
//! \brief SFC Output Surface Command parameters
//!
typedef struct _MHW_SFC_OUT_SURFACE_PARAMS
{
uint32_t ChromaSiting; //!< Chroma siting
MOS_FORMAT Format; //!< Surface format
uint32_t dwWidth; //!< Surface width
uint32_t dwHeight; //!< Surface height
uint32_t dwPitch; //!< Surface pitch
MOS_TILE_TYPE TileType; //!< Tile Type
MOS_TILE_MODE_GMM TileModeGMM; //!< Tile Type from GMM Definition
bool bGMMTileEnabled; //!< GMM defined tile mode flag
uint32_t dwStreamID; //!< Surface StreamID
uint32_t dwSurfaceXOffset; //!< Surface X offset
uint32_t dwSurfaceYOffset; //!< Surface Y offset
uint32_t dwUYoffset; //!< Surface Uoffset in Vertical
PMOS_RESOURCE pOsResource; //!< Surface resource
bool bCompressible; //!< Surface can be compressed
uint32_t dwCompressionFormat;//!< Surface Compression format
} MHW_SFC_OUT_SURFACE_PARAMS, *PMHW_SFC_OUT_SURFACE_PARAMS;
//!
//! \brief SFC Lock Command parameters
//!
typedef struct _MHW_SFC_LOCK_PARAMS
{
uint8_t sfcPipeMode; //!< SFC Pipe Mode
uint32_t dwGaClientId; // Ga Client Id
bool bOutputToMemory; // Write Vebox or Vdbox o/p to memory
} MHW_SFC_LOCK_PARAMS, *PMHW_SFC_LOCK_PARAMS;
//!
//! \brief SFC IEF State parameters
//!
typedef struct _MHW_SFC_IEF_STATE_PARAMS
{
uint8_t sfcPipeMode; //!< SFC Pipe Mode
// IEF params
bool bSkinDetailFactor; // Skin Detail Factor
bool bVYSTDEnable; // Enable STD in VY subspace
bool bIEFEnable; // Enable IEF
uint8_t StrongEdgeWeight;
uint8_t RegularWeight;
uint8_t StrongEdgeThreshold;
uint32_t dwGainFactor;
uint32_t dwR5xCoefficient;
uint32_t dwR5cxCoefficient;
uint32_t dwR5cCoefficient;
uint32_t dwR3xCoefficient;
uint32_t dwR3cCoefficient;
// CSC params
bool bCSCEnable; // Enable CSC transform
float *pfCscCoeff; // [3x3] CSC Coeff matrix
float *pfCscInOffset; // [3x1] CSC Input Offset matrix
float *pfCscOutOffset; // [3x1] CSC Output Offset matrix
} MHW_SFC_IEF_STATE_PARAMS, *PMHW_SFC_IEF_STATE_PARAMS;
class MhwSfcInterface
{
public:
virtual ~MhwSfcInterface()
{
}
//!
//! \brief Adds a resource to the command buffer or indirect state (SSH)
//! \details Internal MHW function to add either a graphics address of a resource or
//! add the resource to the patch list for the requested buffer or state
//! \param [in] pOsInterface
//! OS interface
//! \param [in] pCmdBuffer
//! If adding a resource to the command buffer, the buffer to which the resource
//! is added
//! \param [in] pParams
//! Parameters necessary to add the graphics address
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
MOS_STATUS(*pfnAddResourceToCmd) (
PMOS_INTERFACE pOsInterface,
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_RESOURCE_PARAMS pParams);
//!
//! \brief Add SFC Lock
//! \param [in] pCmdBuffer
//! Pointer to Command buffer
//! \param [in] pSfcLockParams
//! Pointer to SFC_LOCK params
//! \return MOS_STATUS
//!
virtual MOS_STATUS AddSfcLock (
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_SFC_LOCK_PARAMS pSfcLockParams) = 0;
//!
//! \brief Add SFC State
//! \param [in] pCmdBuffer
//! Pointer to Command Buffer
//! \param [in] pSfcStateParams
//! Pointer to SFC_STATE params
//! \param [in] pOutSurface
//! Pointer to Output surface params
//! \return MOS_STATUS
//!
virtual MOS_STATUS AddSfcState(
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_SFC_STATE_PARAMS pSfcStateParams,
PMHW_SFC_OUT_SURFACE_PARAMS pOutSurface) = 0;
//!
//! \brief Add SFC AVS State command
//! \param [in] pCmdBuffer
//! Pointer to Command Buffer
//! \param [in] pSfcAvsState
//! Pointer to SFC AVS State
//! \return MOS_STATUS
//!
virtual MOS_STATUS AddSfcAvsState(
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_SFC_AVS_STATE pSfcAvsState) = 0;
//!
//! \brief Add SFC Frame Start command
//! \param [in] pCmdBuffer
//! Pointer to Command Buffer
//! \param [in] sfcPipeMode
//! SFC pipe mode
//! \return MOS_STATUS
//!
virtual MOS_STATUS AddSfcFrameStart (
PMOS_COMMAND_BUFFER pCmdBuffer,
uint8_t sfcPipeMode) = 0;
//!
//! \brief Add SFC IEF State command
//! \param [in] pCmdBuffer
//! Pointer to Command Buffer
//! \param [in] pSfcIefStateParams
//! Pointer to IEF State params
//! \return MOS_STATUS
//!
virtual MOS_STATUS AddSfcIefState(
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_SFC_IEF_STATE_PARAMS pSfcIefStateParams) = 0;
//!
//! \brief Add SFC AVS Chroma Table command
//! \param [in] pCmdBuffer
//! Pointer to Command Buffer
//! \param [in] pChromaTable
//! Pointer to Chroma Coefficient table
//! \return MOS_STATUS
//!
virtual MOS_STATUS AddSfcAvsChromaTable (
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_SFC_AVS_CHROMA_TABLE pChromaTable) = 0;
//!
//! \brief Add SFC AVS Chroma Table command
//! \param [in] pCmdBuffer
//! Pointer to Command Buffer
//! \param [in] pChromaTable
//! Pointer to Chroma Coefficient table
//! \return MOS_STATUS
//!
virtual MOS_STATUS AddSfcAvsLumaTable (
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_SFC_AVS_LUMA_TABLE pLumaTable) = 0;
//!
//! \brief Set Sfc Sampler8x8 Table
//! \details Set Sfc AVS Luma and Chroma table
//! \param [out] pLumaTable
//! Pointer to AVS luma table
//! \param [out] pChromaTable
//! Pointer to AVS chroma table
//! \param [in] pAvsParams
//! Pointer to AVS params
//! \param [in] SrcFormat
//! Input Source Format
//! \param [in] fScaleX
//! Scaling ratio in width
//! \param [in] fScaleY
//! Scaling ratio in height
//! \param [in] dwChromaSiting
//! Chroma Siting info
//! \return MOS_STATUS
//!
virtual MOS_STATUS SetSfcSamplerTable (
PMHW_SFC_AVS_LUMA_TABLE pLumaTable,
PMHW_SFC_AVS_CHROMA_TABLE pChromaTable,
PMHW_AVS_PARAMS pAvsParams,
MOS_FORMAT SrcFormat,
float fScaleX,
float fScaleY,
uint32_t dwChromaSiting,
bool bUse8x8Filter,
float fHPStrength,
float fLanczosT);
//!
//! \brief Sets AVS Scaling Mode. Will configure the different coefficients of 8-Tap polyphase filter according to scaling mode.
//! \param [in] ScalingMode
//! AVS scaling mode e.g. Nearest, 8-Tap polyphase etc.
//! \return MOS_STATUS
//!
virtual MOS_STATUS SetSfcAVSScalingMode(
MHW_SCALING_MODE ScalingMode)
{
m_scalingMode = ScalingMode;
return MOS_STATUS_SUCCESS;
}
virtual MOS_STATUS GetInputFrameWidthHeightAlignUnit(uint32_t &widthAlignUnit, uint32_t &heightAlignUnit,
bool bVdbox, CODECHAL_STANDARD codecStandard, CodecDecodeJpegChromaType jpegChromaType);
//!
//! \brief Set Sfc Index
//! \details Set Sfc Index
//! \param [in] dwSfcIndex
//! set Sfc Index
//! \param [in] dwSfcCount
//! set Sfc Count
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
virtual MOS_STATUS SetSfcIndex(
uint32_t dwSfcIndex,
uint32_t dwSfcCount)
{
MOS_UNUSED(dwSfcIndex);
MOS_UNUSED(dwSfcCount);
return MOS_STATUS_SUCCESS;
}
protected:
MhwSfcInterface(PMOS_INTERFACE pOsInterface);
//!
//! \brief Sets AVS Luma Coefficient table
//! \param [in] SrcFormat
//! Source format
//! \param [in] pCoeffTable
//! Pointer to coefficient table
//! \param [in] piYCoefsX
//! Pointer to Y coefficients X
//! \param [in] piYCoefsY
//! Pointer to Y coefficients Y
//! \param [in] bUse8x8Filter
//! Is 8x8 Filter used
//! \return void
//!
void SetSfcAVSLumaTable(
MOS_FORMAT SrcFormat,
PSFC_AVS_LUMA_FILTER_COEFF pCoeffTable,
int32_t *piYCoefsX,
int32_t *piYCoefsY,
bool bUse8x8Filter);
//!
//! \brief Sets AVS Chroma Coefficient table
//! \param [in] pUVCoeffTable
//! Pointer to UV coefficient table
//! \param [in] piUVCoefsX
//! Pointer to UV coefficients X
//! \param [in] piUVCoefsY
//! Pointer to UV coefficients Y
//! \return void
//!
void SetSfcAVSChromaTable(
PSFC_AVS_CHROMA_FILTER_COEFF pUVCoeffTable,
int32_t *piUVCoefsX,
int32_t *piUVCoefsY);
public:
enum SFC_PIPE_MODE
{
SFC_PIPE_MODE_VDBOX = 0,
SFC_PIPE_MODE_VEBOX = 1
};
enum SfcScalabMode
{
sfcScalabModeSingle = 0, //!< 0 - single pipe
sfcScalabModeLeftCol, //!< 1 - left most column
sfcScalabModeRightCol, //!< 2 - right most column
sfcScalabModeMiddleCol //!< 3 - middle column
};
enum SfcScalabTileType
{
sfcScalabRealTile = 0, //!< 0 - real tile
sfcScalabVirtualTile //!< 1 - virtual tile
};
public:
PMOS_INTERFACE m_osInterface = nullptr;
uint16_t m_veWidthAlignment = MHW_SFC_VE_WIDTH_ALIGN;
uint16_t m_veHeightAlignment = MHW_SFC_VE_HEIGHT_ALIGN;
uint32_t m_maxWidth = MHW_SFC_MAX_WIDTH;
uint32_t m_maxHeight = MHW_SFC_MAX_HEIGHT;
uint32_t m_minWidth = MHW_SFC_MIN_WIDTH;
uint32_t m_minHeight = MHW_SFC_MIN_HEIGHT;
float m_maxScalingRatio = MHW_SFC_MAX_SCALINGFACTOR;
float m_minScalingRatio = MHW_SFC_MIN_SCALINGFACTOR;
MHW_MEMORY_OBJECT_CONTROL_PARAMS m_outputSurfCtrl; // Output Frame caching control bits
MHW_MEMORY_OBJECT_CONTROL_PARAMS m_avsLineBufferCtrl; // AVS Line Buffer caching control bits
MHW_MEMORY_OBJECT_CONTROL_PARAMS m_iefLineBufferCtrl; // IEF Line Buffer caching control bits
MHW_SCALING_MODE m_scalingMode;
};
#endif // __MHW_SFC_H__