| /* |
| * Copyright (c) 2017-2021, 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_vdbox_vdenc_interface.h |
| //! \brief MHW interface for constructing Vdenc commands for the Vdbox engine |
| //! \details Defines the interfaces for constructing MHW Vdbox Vdenc commands across all platforms |
| //! |
| |
| #ifndef _MHW_VDBOX_VDENC_INTERFACE_H_ |
| #define _MHW_VDBOX_VDENC_INTERFACE_H_ |
| |
| #include "mhw_vdbox.h" |
| #include "mhw_mi.h" |
| #include "codec_def_encode_hevc.h" |
| #include "mhw_vdbox_vdenc_itf.h" |
| |
| typedef struct _MHW_VDBOX_VD_PIPE_FLUSH_PARAMS |
| { |
| union |
| { |
| struct |
| { |
| uint16_t bWaitDoneHEVC : 1; |
| uint16_t bWaitDoneVDENC : 1; |
| uint16_t bWaitDoneMFL : 1; |
| uint16_t bWaitDoneMFX : 1; |
| uint16_t bWaitDoneVDCmdMsgParser : 1; |
| uint16_t bFlushHEVC : 1; |
| uint16_t bFlushVDENC : 1; |
| uint16_t bFlushMFL : 1; |
| uint16_t bFlushMFX : 1; |
| uint16_t : 7; |
| }; |
| struct |
| { |
| uint16_t Value; |
| }; |
| }Flags; |
| } MHW_VDBOX_VD_PIPE_FLUSH_PARAMS, *PMHW_VDBOX_VD_PIPE_FLUSH_PARAMS; |
| |
| typedef struct _MHW_VDBOX_VDENC_STREAMIN_STATE_PARAMS |
| { |
| uint8_t maxTuSize; |
| uint8_t maxCuSize; |
| uint8_t numImePredictors; |
| uint8_t numMergeCandidateCu64x64; |
| uint8_t numMergeCandidateCu32x32; |
| uint8_t numMergeCandidateCu16x16; |
| uint8_t numMergeCandidateCu8x8; |
| bool setQpRoiCtrl; |
| int8_t forceQp[4]; |
| uint8_t roiCtrl; |
| uint8_t puTypeCtrl; |
| }MHW_VDBOX_VDENC_STREAMIN_STATE_PARAMS, *PMHW_VDBOX_VDENC_STREAMIN_STATE_PARAMS; |
| |
| typedef struct _MHW_VDBOX_VDENC_CQPT_STATE_PARAMS |
| { |
| uint16_t wPictureCodingType; |
| bool bFTQEnabled; |
| bool bBlockBasedSkip; |
| bool bTransform8x8Flag; |
| } MHW_VDBOX_VDENC_CQPT_STATE_PARAMS, *PMHW_VDBOX_VDENC_CQPT_STATE_PARAMS; |
| |
| typedef struct _MHW_VDBOX_VDENC_WEIGHT_OFFSET_PARAMS |
| { |
| bool bWeightedPredEnabled = false; |
| uint32_t dwDenom = 0; |
| uint8_t ucList = 0; |
| char LumaWeights[2][CODEC_MAX_NUM_REF_FRAME_HEVC] = {}; |
| int16_t LumaOffsets[2][CODEC_MAX_NUM_REF_FRAME_HEVC] = {}; |
| char ChromaWeights[2][CODEC_MAX_NUM_REF_FRAME_HEVC][2] = {}; |
| int16_t ChromaOffsets[2][CODEC_MAX_NUM_REF_FRAME_HEVC][2] = {}; |
| uint32_t dwChromaDenom = 0; |
| bool isLowDelay = true; |
| } MHW_VDBOX_VDENC_WEIGHT_OFFSET_PARAMS, *PMHW_VDBOX_VDENC_WEIGHT_OFFSET_PARAMS; |
| |
| typedef struct _MHW_VDBOX_VDENC_CMD1_PARAMS |
| { |
| uint32_t Mode = 0; |
| PCODEC_HEVC_ENCODE_PICTURE_PARAMS pHevcEncPicParams = nullptr; |
| PCODEC_HEVC_ENCODE_SEQUENCE_PARAMS pHevcEncSeqParams = nullptr; |
| PCODEC_HEVC_ENCODE_SLICE_PARAMS pHevcEncSlcParams = nullptr; |
| PCODEC_VP9_ENCODE_PIC_PARAMS pVp9EncPicParams = nullptr; |
| uint8_t *pucVdencMvCosts = nullptr; |
| uint8_t *pucVdencRdMvCosts = nullptr; |
| uint8_t *pucVdencHmeMvCosts = nullptr; |
| uint8_t *pucVdencModeCosts = nullptr; |
| void *pInputParams = nullptr; |
| uint16_t usSADQPLambda = 0; |
| uint16_t usRDQPLambda = 0; |
| uint8_t frame_type = 0; |
| uint8_t qp = 0; |
| bool isLowDelay = false; |
| bool bHevcVisualQualityImprovement = false; //!< VQI enable flag |
| } MHW_VDBOX_VDENC_CMD1_PARAMS, *PMHW_VDBOX_VDENC_CMD1_PARAMS; |
| |
| struct MHW_VDBOX_VDENC_CMD2_STATE |
| { |
| uint32_t Mode = 0; |
| |
| // HEVC |
| PCODEC_HEVC_ENCODE_SEQUENCE_PARAMS pHevcEncSeqParams = nullptr; |
| PCODEC_HEVC_ENCODE_PICTURE_PARAMS pHevcEncPicParams = nullptr; |
| PCODEC_HEVC_ENCODE_SLICE_PARAMS pHevcEncSlcParams = nullptr; |
| bool bSAOEnable = false; |
| bool bRoundingEnabled = false; |
| bool bStreamInEnabled = false; |
| bool bROIStreamInEnabled = false; |
| bool bUseDefaultQpDeltas = false; |
| bool bPanicEnabled = false; |
| bool bPartialFrameUpdateEnable = false; |
| uint32_t roundInterValue = 0; |
| uint32_t roundIntraValue = 0; |
| uint8_t bStreaminRoiMode = 0; |
| |
| // VP9 |
| PCODEC_VP9_ENCODE_PIC_PARAMS pVp9EncPicParams = nullptr; |
| bool bSegmentationEnabled = false; |
| PMHW_VDBOX_VP9_SEGMENT_STATE pVp9SegmentState = nullptr; |
| PCODEC_VP9_ENCODE_SEQUENCE_PARAMS pVp9EncSeqParams = nullptr; |
| bool bPrevFrameSegEnabled = false; |
| bool bDynamicScalingEnabled = false; |
| bool temporalMVpEnable = false; |
| |
| // Common |
| uint8_t ucNumRefIdxL0ActiveMinus1 = 0; |
| uint8_t ucNumRefIdxL1ActiveMinus1 = 0; |
| uint16_t usSADQPLambda = 0; |
| uint16_t usRDQPLambda = 0; |
| bool bPakOnlyMultipassEnable = false; |
| void *pInputParams = nullptr; |
| bool bHevcVisualQualityImprovement = false; //!< VQI enable flag |
| |
| bool bTileReplayEnable = false; |
| bool bCaptureModeEnable = false; |
| uint8_t m_WirelessSessionID = 0; |
| bool bIsLowDelayB = false; |
| int8_t *pRefIdxMapping = nullptr; |
| uint8_t recNotFilteredID = 0; |
| virtual ~MHW_VDBOX_VDENC_CMD2_STATE() {} |
| }; |
| using PMHW_VDBOX_VDENC_CMD2_STATE = std::shared_ptr<MHW_VDBOX_VDENC_CMD2_STATE>; |
| |
| struct MHW_VDBOX_VDENC_WALKER_STATE_PARAMS |
| { |
| uint32_t Mode = 0; |
| uint32_t slcIdx = 0; |
| PCODEC_AVC_ENCODE_SEQUENCE_PARAMS pAvcSeqParams = nullptr; |
| PCODEC_AVC_ENCODE_PIC_PARAMS pAvcPicParams = nullptr; |
| PCODEC_AVC_ENCODE_SLICE_PARAMS pAvcSlcParams = nullptr; |
| PCODEC_HEVC_ENCODE_SEQUENCE_PARAMS pHevcEncSeqParams = nullptr; |
| PCODEC_HEVC_ENCODE_PICTURE_PARAMS pHevcEncPicParams = nullptr; |
| PCODEC_HEVC_ENCODE_SLICE_PARAMS pEncodeHevcSliceParams = nullptr; |
| PCODEC_VP9_ENCODE_PIC_PARAMS pVp9EncPicParams = nullptr; |
| virtual ~MHW_VDBOX_VDENC_WALKER_STATE_PARAMS() {} |
| }; |
| using PMHW_VDBOX_VDENC_WALKER_STATE_PARAMS = MHW_VDBOX_VDENC_WALKER_STATE_PARAMS * ; |
| |
| //! MHW Vdbox Vdenc interface |
| /*! |
| This class defines the interfaces for constructing Vdbox Vdenc commands across all platforms |
| */ |
| class MhwVdboxVdencInterface |
| { |
| protected: |
| |
| PMOS_INTERFACE m_osInterface = nullptr; //!< Pointer to OS interface |
| |
| MHW_MEMORY_OBJECT_CONTROL_PARAMS m_cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_END_CODEC] = {}; //!< Cacheability settings |
| |
| bool m_rowstoreCachingSupported = 0; |
| MHW_VDBOX_ROWSTORE_CACHE m_vdencRowStoreCache = {}; //!< vdenc row store cache |
| MHW_VDBOX_ROWSTORE_CACHE m_vdencIpdlRowstoreCache = {}; //!< vdenc IntraPred row store cache |
| bool m_rhoDomainStatsEnabled = false; //! indicate if rho domain stats is enabled |
| bool m_perfModeSupported = true; //! indicate perf mode is supported |
| |
| std::shared_ptr<mhw::vdbox::vdenc::Itf> m_vdencItfNew = nullptr; |
| |
| static const bool m_vdencFTQEnabled[NUM_VDENC_TARGET_USAGE_MODES]; |
| static const bool m_vdencBlockBasedSkipEnabled[NUM_VDENC_TARGET_USAGE_MODES]; |
| |
| //! |
| //! \brief Constructor |
| //! |
| MhwVdboxVdencInterface(PMOS_INTERFACE osInterface); |
| |
| //! |
| //! \brief Add a resource to the command buffer |
| //! \details Internal function to add either a graphics address of a resource or |
| //! add the resource to the patch list for the requested buffer |
| //! |
| //! \param [in] osInterface |
| //! OS interface |
| //! \param [in] cmdBuffer |
| //! Command buffer to which resource is added |
| //! \param [in] params |
| //! Parameters necessary to add the resource |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| MOS_STATUS(*AddResourceToCmd) ( |
| PMOS_INTERFACE osInterface, |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_RESOURCE_PARAMS params); |
| |
| virtual MOS_STATUS InitRowstoreUserFeatureSettings() = 0; |
| |
| //! |
| //! \brief Translate MOS type format to Mediastate surface format |
| //! \details VDBOX protected function to translate mos format to media state format |
| //! \param [in] format |
| //! MOS type format |
| //! \return uint32_t |
| //! media state surface format |
| //! |
| uint32_t MosToMediaStateFormat(MOS_FORMAT format); |
| |
| public: |
| |
| //! |
| //! \brief Destructor |
| //! |
| virtual ~MhwVdboxVdencInterface() {} |
| |
| //! |
| //! \brief Get new VDENC interface, temporal solution before switching from |
| //! old interface to new one |
| //! |
| //! \return pointer to new VDENC interface |
| //! |
| virtual std::shared_ptr<mhw::vdbox::vdenc::Itf> GetNewVdencInterface() { return nullptr; } |
| |
| //! |
| //! \brief Judge if row store caching supported |
| //! |
| //! \return bool |
| //! true if supported, else false |
| //! |
| inline bool IsRowStoreCachingSupported() |
| { |
| return m_rowstoreCachingSupported; |
| } |
| |
| //! |
| //! \brief Judge if vdenc row store caching enabled |
| //! |
| //! \return bool |
| //! true if enabled, else false |
| //! |
| inline bool IsvdencRowstoreCacheEnabled() |
| { |
| return m_vdencRowStoreCache.bEnabled ? true : false; |
| } |
| |
| //! |
| //! \brief Judge if rho domain stats is enabled |
| //! |
| //! \return bool |
| //! true if enabled, else false |
| //! |
| inline bool IsRhoDomainStatsEnabled() |
| { |
| return m_rhoDomainStatsEnabled; |
| } |
| |
| //! |
| //! \brief Judge if perf mode is supported |
| //! |
| //! \return bool |
| //! true if enabled, else false |
| //! |
| inline bool IsPerfModeSupported() |
| { |
| return m_perfModeSupported; |
| } |
| |
| //! |
| //! \brief get vdenc FTQ supported |
| //! |
| //! \param [in] idx |
| //! index of the array |
| //! \return bool |
| //! true if enabled, else false |
| //! |
| inline bool VdencFTQEnabled(uint32_t idx) |
| { |
| return m_vdencFTQEnabled[idx]; |
| } |
| |
| //! |
| //! \brief get Vdenc img state size |
| //! |
| //! \return uint32_t |
| //! Vdenc img state size got |
| //! |
| virtual uint32_t GetVdencAvcImgStateSize() = 0; |
| |
| //! |
| //! \brief get Vdenc slc state size |
| //! |
| //! \return uint32_t |
| //! Vdenc slc state size got |
| //! |
| virtual uint32_t GetVdencAvcSlcStateSize() = 0; |
| |
| //! |
| //! \brief get Vdenc cost state size |
| //! |
| //! \return uint32_t |
| //! Vdenc cost state size got |
| //! |
| virtual uint32_t GetVdencAvcCostStateSize() = 0; |
| |
| //! |
| //! \brief get cmd1 |
| //! |
| //! \return uint32_t |
| //! cmd1 size got |
| //! |
| virtual uint32_t GetVdencCmd1Size() = 0; |
| |
| //! |
| //! \brief get cmd2 |
| //! |
| //! \return uint32_t |
| //! cmd2 size got |
| //! |
| virtual uint32_t GetVdencCmd2Size() = 0; |
| |
| //! |
| //! \brief get Vdenc state commands data size |
| //! |
| //! \return uint32_t |
| //! Vdenc state commands data size got |
| //! |
| virtual MOS_STATUS GetVdencStateCommandsDataSize( |
| uint32_t mode, |
| uint32_t waAddDelayInVDEncDynamicSlice, |
| uint32_t *commandsSize, |
| uint32_t *patchListSize) = 0; |
| |
| //! |
| //! \brief get Vdenc slice commands data size |
| //! |
| //! \return uint32_t |
| //! Vdenc slice commands data size got |
| //! |
| virtual MOS_STATUS GetVdencPrimitiveCommandsDataSize( |
| uint32_t mode, |
| uint32_t *commandsSize, |
| uint32_t *patchListSize) = 0; |
| |
| //! |
| //! \brief Set cacheability settings |
| //! |
| //! \param [in] cacheabilitySettings |
| //! Cacheability settings |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| MOS_STATUS SetCacheabilitySettings( |
| MHW_MEMORY_OBJECT_CONTROL_PARAMS cacheabilitySettings[MOS_CODEC_RESOURCE_USAGE_END_CODEC]) |
| { |
| MHW_FUNCTION_ENTER; |
| |
| uint32_t size = MOS_CODEC_RESOURCE_USAGE_END_CODEC * sizeof(MHW_MEMORY_OBJECT_CONTROL_PARAMS); |
| return MOS_SecureMemcpy(m_cacheabilitySettings, size, cacheabilitySettings, size); |
| } |
| |
| //! |
| //! \brief Programs base address of rowstore scratch buffers |
| //! \details Internal function to get base address of rowstore scratch buffers |
| //! |
| //! \param [in] rowstoreParams |
| //! Rowstore parameters |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS GetRowstoreCachingAddrs( |
| PMHW_VDBOX_ROWSTORE_PARAMS rowstoreParams) = 0; |
| |
| //! |
| //! \brief Adds VD Pipeline Flush command in command buffer |
| //! \details Client facing function to add VD Pipeline Flush command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdPipelineFlushCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_VD_PIPE_FLUSH_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC Pipe Mode Select command in command buffer |
| //! \details Client facing function to add VDENC Pipe Mode Select command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencPipeModeSelectCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_PIPE_MODE_SELECT_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC Pipe Buffer Address State command in command buffer |
| //! \details Client facing function to add VDENC Pipe Buffer Address State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencPipeBufAddrCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_PIPE_BUF_ADDR_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC Src Surface State command in command buffer |
| //! \details Client facing function to add VDENC Src Surface State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencSrcSurfaceStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_SURFACE_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC Ref Surface State command in command buffer |
| //! \details Client facing function to add VDENC Ref Surface State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencRefSurfaceStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_SURFACE_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC Dst Surface State command in command buffer |
| //! \details Client facing function to add VDENC Dst Surface State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \param [in] numSurfaces |
| //! Number of surfaces |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencDsRefSurfaceStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_SURFACE_PARAMS params, |
| uint8_t numSurfaces) = 0; |
| |
| virtual MOS_STATUS AddVdencAvcCostStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_BATCH_BUFFER batchBuffer, |
| PMHW_VDBOX_AVC_IMG_PARAMS params) |
| { |
| return MOS_STATUS_SUCCESS; |
| } |
| |
| //! |
| //! \brief Adds VDENC AVC Image State command in command buffer |
| //! \details Client facing function to add VDENC AVC Image State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] batchBuffer |
| //! Batch buffer to add to VDBOX_BUFFER_START |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencImgStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_BATCH_BUFFER batchBuffer, |
| PMHW_VDBOX_AVC_IMG_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC Walker State command in command buffer |
| //! \details Client facing function to add VDENC Walker State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencWalkerStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_VDENC_WALKER_STATE_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC Const QPT State command in command buffer |
| //! \details Client facing function to add VDENC Const QPT State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencConstQPStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_VDENC_CQPT_STATE_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC WeightsOffsets State command in command buffer |
| //! \details Client facing function to add VDENC WeightsOffsets State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| |
| virtual MOS_STATUS AddVdencAvcWeightsOffsetsStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_AVC_WEIGHTOFFSET_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds VDENC Costs State command in command buffer |
| //! \details Client facing function to add VDENC Costs State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] batchBuffer |
| //! Batch buffer to add to VDBOX_BUFFER_START |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencWeightsOffsetsStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_BATCH_BUFFER batchBuffer, |
| PMHW_VDBOX_VDENC_WEIGHT_OFFSET_PARAMS params) = 0; |
| |
| virtual MOS_STATUS AddVdencSliceStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_AVC_SLICE_STATE params) |
| { |
| return MOS_STATUS_SUCCESS; |
| } |
| |
| virtual MOS_STATUS AddVdencControlStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer) |
| { |
| return MOS_STATUS_SUCCESS; |
| } |
| |
| //! |
| //! \brief Adds CMD1 command in command buffer |
| //! \details Client facing function to add CMD1 command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] batchBuffer |
| //! Batch buffer to add to VDBOX_BUFFER_START |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencCmd1Cmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_BATCH_BUFFER batchBuffer, |
| PMHW_VDBOX_VDENC_CMD1_PARAMS params) = 0; |
| |
| //! |
| //! \brief Adds CMD2 command in command buffer |
| //! \details Client facing function to add VDENC HEVC VP9 IMG State command in command buffer |
| //! \param [in] cmdBuffer |
| //! Command buffer to which HW command is added |
| //! \param [in] batchBuffer |
| //! Batch buffer to add to VDBOX_BUFFER_START |
| //! \param [in] params |
| //! Params structure used to populate the HW command |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail type |
| //! |
| virtual MOS_STATUS AddVdencCmd2Cmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_BATCH_BUFFER batchBuffer, |
| PMHW_VDBOX_VDENC_CMD2_STATE params) = 0; |
| |
| virtual PMHW_VDBOX_PIPE_MODE_SELECT_PARAMS CreateMhwVdboxPipeModeSelectParams() = 0; |
| virtual void ReleaseMhwVdboxPipeModeSelectParams(PMHW_VDBOX_PIPE_MODE_SELECT_PARAMS pipeModeSelectParams) = 0; |
| }; |
| |
| #endif |