⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motioncompensation.h

📁 JMVM MPEG MVC/3DAV 测试平台 国际通用标准
💻 H
📖 第 1 页 / 共 2 页
字号:
                            RefFrameList&   rcRefFrameList0,
                            RefFrameList&   rcRefFrameList1,
                            IntYuvMbBuffer* pcRecBuffer,
                            Bool            bCalcMv,
                            Bool            bFaultTolerant );
#if JMVM_ONLY  // JVT-W081
 ErrVal compensateMbMotionSkip ( MbDataAccess& rcMbDataAccess,
	                            YuvMbBuffer* pcRecBuffer,
								Bool bFaultTolerant,
								Bool bCalcMv = false );
 ErrVal compensateMbMotionSkip ( MbDataAccess&   rcMbDataAccess,
	                             RefFrameList&   rcRefFrameList0,
								 RefFrameList&   rcRefFrameList1,
								 IntYuvMbBuffer* pcRecBuffer,
								 Bool            bCalcMv );
#endif  // JVT-W081
  Void xAdjustResidualRefBlk          ( XPel*           piResidualRef,
                                        UInt            uiBlkWidth,
                                        UInt            uiBlkHeight,
                                        Int             iStride,
                                        UChar*          pucSigMap,
                                        Bool            bNonzeroBaseBlock,
                                        Int             iBcbpCtx,
                                        UInt            uiWeightZeroBlk,
                                        UInt            uiWeightZeroCoeff);

  Void xAdjustResidualRefBlkSpatial   ( XPel*           piResidualRef,
                                        UInt            uiBlkWidth,
                                        UInt            uiBlkHeight,
                                        Int             iStride,
                                        UInt            uiWeightZeroBlk);

  Void xAdjustResidualRefBlkFrequency ( XPel*           piResidualRef,
                                        UInt            uiBlkWidth,
                                        UInt            uiBlkHeight,
                                        Int             iStride,
                                        UChar*          pucSigMap,
                                        UInt            uiWeightZeroCoeff);

  Void xAdjustChromaResidualRefBlock  ( XPel*           piResidualRef,
                                        Int             iStride,
                                        UChar*          pusSigMap,
                                        UInt            uiWeightZeroCoeff);

  ErrVal xCompensateMbAllModes        ( MbDataAccess&   rcMbDataAccess, 
                                        RefFrameList&   rcRefFrameList0, 
                                        RefFrameList&   rcRefFrameList1, 
                                        IntYuvMbBuffer* pcYuvMbBuffer);

  ErrVal xAdjustMbResidual            ( IntYuvMbBuffer& rcMbBufferDiff,
                                        MbDataAccess*   pcMbDataAccess,
                                        FGSCoder*       pcFGSCoder,
                                        SliceHeader*    pcSliceHeader );

  ErrVal adaptiveMotionCompensationMb(  IntYuvMbBuffer* pcMbBufferMC,
                                        RefFrameList*   pcRefFrameListDiff,
                                        MbDataAccess*   pcMbDataAccessMotion,
                                        FGSCoder*       pcFGSCoder );

  ErrVal xAdaptiveMotionCompensation  ( YuvBufferCtrl*  pcYuvFullPelBufferCtrl,
                                        IntFrame*       pcMCFrame,
                                        IntFrame*       pcBaseFrame,
                                        RefFrameList*   pcRefFrameListBase,
                                        MbDataCtrl*     pcMbDataCtrl,
                                        FGSCoder*       pcFGSCoder,
                                        SliceHeader*    pcSliceHeader );

  ErrVal loadAdaptiveRefPredictors    ( YuvBufferCtrl*  pcYuvFullPelBufferCtrl,
                                        IntFrame*       pcPredSignal, 
                                        IntFrame*       pcBaseFrame, 
                                        RefFrameList*   cRefListDiff,
                                        MbDataCtrl*     pcMbDataCtrl,
                                        FGSCoder*       pcFGSCoder,
                                        SliceHeader*    pcSliceHeader);


  ErrVal updateMb(MbDataAccess&   rcMbDataAccess,
                  IntFrame*       pcMCFrame,
                  IntFrame*       pcPrdFrame,
                  ListIdx         eListPrd,
                  Int             iRefIdx); 

  ErrVal updateSubMb( B8x8Idx         c8x8Idx,
                      MbDataAccess&   rcMbDataAccess,
                      IntFrame*       pcMCFrame,
                      IntFrame*       pcPrdFrame,
                      ListIdx         eListPrd );

  Void xUpdateMb8x8Mode(    B8x8Idx         c8x8Idx,
                            MbDataAccess&   rcMbDataAccess,
                            IntFrame*       pcMCFrame,
                            IntFrame*       pcPrdFrame,
                            ListIdx         eListPrd );

  ErrVal updateDirectBlock( MbDataAccess&   rcMbDataAccess, 
                            IntFrame*       pcMCFrame,
                            IntFrame*       pcPrdFrame,
                            ListIdx         eListPrd,
                            Int             iRefIdx,                                             
                            B8x8Idx         c8x8Idx );

  Void xUpdateBlk( IntFrame* pcPrdFrame, Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D );
  Void xUpdateBlk( IntFrame* pcPrdFrame, Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx );

  Void xUpdateLuma( IntFrame* pcPrdFrame, Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D, UShort *usWeight );
  Void xUpdateLuma( IntFrame* pcPrdFrame, Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx, UShort *usWeight );

  Void updateBlkAdapt( IntYuvPicBuffer* pcSrcBuffer, IntYuvPicBuffer* pcDesBuffer, LumaIdx cIdx, Mv cMv, Int iSizeY, Int iSizeX, 
                                      UShort *usWeight);

  Void xUpdAdapt( XPel* pucDest, XPel* pucSrc, Int iDestStride, Int iSrcStride, Int iDx, Int iDy, 
                                    UInt uiSizeY, UInt uiSizeX, UShort weight, UShort wMax );

  __inline Void xUpdateChroma( IntYuvPicBuffer* pcSrcBuffer, IntYuvPicBuffer* pcDesBuffer,  LumaIdx cIdx, Mv cMv, 
    Int iSizeY, Int iSizeX, UShort *usWeight);
  Void xUpdateChroma( IntFrame* pcSrcFrame, Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx, UShort *usWeight );
  Void xUpdateChroma( IntFrame* pcSrcFrame, Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D, UShort *usWeight );
  __inline Void xUpdateChromaPel( XPel* pucDest, Int iDestStride, XPel* pucSrc, Int iSrcStride, Mv cMv, Int iSizeY, Int iSizeX, UShort weight );

  ErrVal calcMvMb   (                   MbDataAccess& rcMbDataAccess, MbDataAccess* pcMbDataAccessBase );
  ErrVal calcMvSubMb( B8x8Idx c8x8Idx,  MbDataAccess& rcMbDataAccess, MbDataAccess* pcMbDataAccessBase );
#if JMVM_ONLY  // JVT-W081
  ErrVal compensateDirectBlockMotionSkip( MbDataAccess& rcMbDataAccess, YuvMbBuffer *pcRecBuffer, B8x8Idx c8x8Idx, Bool& rbValid, Bool bFaultTolerant);
#endif  // JVT-W081
  ErrVal compensateDirectBlock( MbDataAccess& rcMbDataAccess, YuvMbBuffer *pcRecBuffer, B8x8Idx c8x8Idx, Bool& rbValid, Bool bFaultTolerant, Bool bCalcMv = true );
  ErrVal compensateDirectBlock( MbDataAccess& rcMbDataAccess, IntYuvMbBuffer *pcRecBuffer, B8x8Idx c8x8Idx, RefFrameList& rcRefFrameListL0, RefFrameList& rcRefFrameListL1 );
  ErrVal initMb( UInt uiMbY, UInt uiMbX);


protected:
  Void xPredMb8x8Mode( MbDataAccess& rcMbDataAccess, YuvMbBuffer* pcRecBuffer );
  Void xPredMb8x8Mode( B8x8Idx c8x8Idx, MbDataAccess& rcMbDataAccess, const IntFrame* pcRefFrame0, const IntFrame* pcRefFrame1, IntYuvMbBuffer* pcRecBuffer );
 
  Void xPredLuma(   YuvMbBuffer* pcRecBuffer, Int iSizeX, Int iSizeY, MC8x8D& rcMc8x8D );
  Void xPredChroma( YuvMbBuffer* pcRecBuffer, Int iSizeX, Int iSizeY, MC8x8D& rcMc8x8D );

  Void xPredLuma(   YuvMbBuffer* apcTarBuffer[2], Int iSizeX, Int iSizeY, MC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx );
  Void xPredChroma( YuvMbBuffer* apcTarBuffer[2], Int iSizeX, Int iSizeY, MC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx );


  Void xPredLuma  ( IntYuvMbBuffer* pcRecBuffer,      Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D );
  Void xPredLuma  ( IntYuvMbBuffer* apcTarBuffer[2],  Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx );
  Void xPredChroma( IntYuvMbBuffer* pcRecBuffer,      Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D );
  Void xPredChroma( IntYuvMbBuffer* apcTarBuffer[2],  Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx );

#if JMVM_ONLY  // JVT-U052
  Void xPredLuma( MbIcp cMbIcp, IntYuvMbBuffer* pcRecBuffer,     Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D );
  Void xPredLuma( MbIcp cMbIcp, YuvMbBuffer* pcRecBuffer,        Int iSizeX, Int iSizeY, MC8x8D& rcMc8x8D );
  Void xPredLuma( MbIcp cMbIcp, IntYuvMbBuffer* apcTarBuffer[2], Int iSizeX, Int iSizeY, IntMC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx );
  Void xPredLuma( MbIcp cMbIcp, YuvMbBuffer* apcTarBuffer[2],    Int iSizeX, Int iSizeY, MC8x8D& rcMc8x8D, SParIdx4x4 eSParIdx );
  Void xIcForPredLuma( MbIcp  cMbIcp, IntYuvMbBuffer* pcDesBuffer, LumaIdx cIdx, Int iSizeY, Int iSizeX );
  Void xIcForPredLuma( MbIcp  cMbIcp, YuvMbBuffer*    pcDesBuffer, LumaIdx cIdx, Int iSizeY, Int iSizeX );
  Int  xClip( bool bClip, Int iPel ) { return ( bClip ? gClip( iPel ) : iPel); };

  Void xInverseDPCMIcp( MbDataAccess& rcMbDataAccess );
#endif

private:
  __inline Void xGetMbPredData( MbDataAccess& rcMbDataAccess, MC8x8D& rcMC8x8D );
  __inline Void xGetBlkPredData( MbDataAccess& rcMbDataAccess, MC8x8D& rcMC8x8D, BlkMode eBlkMode );
  __inline Void xPredChromaPel( Pel* pucDest, Int iDestStride, Pel* pucSrc, Int iSrcStride, Mv cMv, Int iSizeY, Int iSizeX );
  __inline Void xPredChroma( YuvMbBuffer* pcDesBuffer, YuvPicBuffer* pcSrcBuffer, LumaIdx cIdx, Mv cMv, Int iSizeY, Int iSizeX);

  __inline Void xGetMbPredData  ( MbDataAccess& rcMbDataAccess, const IntFrame* pcRefFrame, IntMC8x8D& rcMC8x8D );
  __inline Void xGetBlkPredData ( MbDataAccess& rcMbDataAccess, const IntFrame* pcRefFrame, IntMC8x8D& rcMC8x8D, BlkMode eBlkMode );

  __inline Void xPredChromaPel  ( XPel* pucDest, Int iDestStride, XPel* pucSrc, Int iSrcStride, Mv cMv, Int iSizeY, Int iSizeX );
  __inline Void xPredChroma     ( IntYuvMbBuffer* pcDesBuffer, IntYuvPicBuffer* pcSrcBuffer, LumaIdx cIdx, Mv cMv, Int iSizeY, Int iSizeX);

  __inline Void xGetMbPredData  ( MbDataAccess& rcMbDataAccess, const IntFrame* pcRefFrame0, const IntFrame* pcRefFrame1, IntMC8x8D& rcMC8x8D );
  __inline Void xGetBlkPredData ( MbDataAccess& rcMbDataAccess, const IntFrame* pcRefFrame0, const IntFrame* pcRefFrame1, IntMC8x8D& rcMC8x8D, BlkMode eBlkMode );



protected:
  QuarterPelFilter* m_pcQuarterPelFilter;
  Transform*        m_pcTransform;
  SampleWeighting* m_pcSampleWeighting;
  Mv   m_cMin;
  Mv   m_cMax;
  UInt m_uiMbInFrameY;
  UInt m_uiMbInFrameX;
  int m_curMbX;
  int m_curMbY;
};

#if defined( WIN32 )
# pragma warning( default: 4251 )
#endif

#define DMV_THRES   5


H264AVC_NAMESPACE_END


#endif // !defined(AFX_MOTIONCOMPENSATION_H__820D6942_007B_42EA_838B_AC025E866DBE__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -