| /* |
| * 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_SFD_BUFF_HEIGHT_BAR) / 10 * MHW_SFC_CACHELINE_SIZE) : 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__ |