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

📄 loopfilter.h

📁 JVT-S203 contains the JSVM 6 reference software. It corresponds to CVS tag “JSVM_5_12_1”. For obt
💻 H
📖 第 1 页 / 共 2 页
字号:
  __inline ErrVal xLumaVerFiltering  ( const MbDataAccess& rcMbDataAccess, const DFP& rcDFP, YuvPicBuffer* pcYuvBuffer);
  __inline ErrVal xChromaHorFiltering( const MbDataAccess& rcMbDataAccess, const DFP& rcDFP, YuvPicBuffer* pcYuvBuffer);
  __inline ErrVal xChromaVerFiltering( const MbDataAccess& rcMbDataAccess, const DFP& rcDFP, YuvPicBuffer* pcYuvBuffer);


  __inline Void   xFilter                       ( XPel*               pFlt,
                                                  const Int&          iOffset,
                                                  const Int&          iIndexA,
                                                  const Int&          iIndexB,
                                                  const UChar&        ucBs,
                                                  const Bool&         bLum );
  __inline ErrVal xFilterMb                     ( const MbDataAccess* rcMbDataAccessMot,
                                                  const MbDataAccess* rcMbDataAccessRes,
                                                  IntYuvPicBuffer*    pcYuvBuffer,
                                                  RefFrameList*       pcRefFrameList0,
                                                  RefFrameList*       pcRefFrameList1,
                                                  bool                spatial_scalable_flg);  // SSUN@SHARP
  
  __inline ErrVal xLumaHorFiltering             ( const MbDataAccess& rcMbDataAccessRes,
                                                  const DFP&          rcDFP,
                                                  IntYuvPicBuffer*    pcYuvBuffer );
  __inline ErrVal xLumaVerFiltering             ( const MbDataAccess& rcMbDataAccessRes,
                                                  const DFP&          rcDFP,
                                                  IntYuvPicBuffer*    pcYuvBuffer );
  __inline ErrVal xChromaHorFiltering           ( const MbDataAccess& rcMbDataAccessRes,
                                                  const DFP&          rcDFP,
                                                  IntYuvPicBuffer*    pcYuvBuffer );
  __inline ErrVal xChromaVerFiltering           ( const MbDataAccess& rcMbDataAccessRes,
                                                  const DFP&          rcDFP,
                                                  IntYuvPicBuffer*    pcYuvBuffer );

  UChar           xCheckMvDataP_RefIdx          ( const MbData&       rcQMbData,
                                                  const LumaIdx       cQIdx,
                                                  const MbData&       rcPMbData,
                                                  const LumaIdx       cPIdx,
                                                  const Short         sHorMvThr,
                                                  const Short         sVerMvThr,
                                                  RefFrameList&       rcRefFrameList0 );
  UChar           xCheckMvDataB_RefIdx          ( const MbData&       rcQMbData,
                                                  const LumaIdx       cQIdx,
                                                  const MbData&       rcPMbData,
                                                  const LumaIdx       cPIdx,
                                                  const Short         sHorMvThr,
                                                  const Short         sVerMvThr,
                                                  RefFrameList&       rcRefFrameList0,
                                                  RefFrameList&       rcRefFrameList1 );
  __inline UInt   xGetHorFilterStrength_RefIdx  ( const MbDataAccess* pcMbDataAccessMot,
                                                  const MbDataAccess* pcMbDataAccessRes,
                                                  LumaIdx             cIdx,
                                                  Int                 iFilterIdc,
                                                  RefFrameList*       pcRefFrameList0,
                                                  RefFrameList*       pcRefFrameList1,
                                                  bool                spatial_scalable_flg);  // SSUN@SHARP
  __inline UInt   xGetVerFilterStrength_RefIdx  ( const MbDataAccess* pcMbDataAccessMot,
                                                  const MbDataAccess* pcMbDataAccessRes,
                                                  LumaIdx             cIdx,
                                                  Int                 iFilterIdc,
                                                  RefFrameList*       pcRefFrameList0,
                                                  RefFrameList*       pcRefFrameList1,
                                                  bool                spatial_scalable_flg);  // SSUN@SHARP

protected:
  // Hanke@RWTH
  IntFrame*        m_pcHighpassFrame;
  IntYuvPicBuffer* m_pcHighpassYuvBuffer;

  UChar m_aucBs[4];

  ControlMngIf*    m_pcControlMngIf;
  FrameUnit*       m_pcRecFrameUnit;
  UChar            m_aaaucBs[2][4][4];
  IntYuvPicBuffer* m_pcIntYuvBuffer;
  LFMode           m_eLFMode;
  ReconstructionBypass*         m_pcReconstructionBypass;

protected:

  template <UInt uiLum> Void xFilterTempl( FilterParameter& rcFilterParameter )
  {
    const Int iAlpha = g_acAlphaClip[ rcFilterParameter.iIndexA ].ucAlpha;

    Int P0 = rcFilterParameter.pFlt[-rcFilterParameter.iOffset];
    Int Q0 = rcFilterParameter.pFlt[       0];

    Int iDelta = Q0 - P0;
    Int iAbsDelta  = abs( iDelta  );

    AOF_DBG( rcFilterParameter.ucBs );

    ROFVS( iAbsDelta < iAlpha );


    const Int iBeta = g_aucBetaTab [ rcFilterParameter.iIndexB ];

    Int P1  = rcFilterParameter.pFlt[-2*rcFilterParameter.iOffset];
    Int Q1  = rcFilterParameter.pFlt[   rcFilterParameter.iOffset];

    ROFVS( (abs(P0 - P1) < iBeta) && (abs(Q0 - Q1) < iBeta) );

    if( rcFilterParameter.ucBs < 4 )
    {
      Int C0 = g_acAlphaClip[ rcFilterParameter.iIndexA ].aucClip[rcFilterParameter.ucBs];

      if( uiLum )
      {
        Int P2 = rcFilterParameter.pFlt[-3*rcFilterParameter.iOffset] ;
        Int Q2 = rcFilterParameter.pFlt[ 2*rcFilterParameter.iOffset] ;
        Int aq = (( abs( Q2 - Q0 ) < iBeta ) ? 1 : 0 );
        Int ap = (( abs( P2 - P0 ) < iBeta ) ? 1 : 0 );

        if( ap )
        {
          rcFilterParameter.pFlt[-2*rcFilterParameter.iOffset] = P1 + gClipMinMax((P2 + ((P0 + Q0 + 1)>>1) - (P1<<1)) >> 1, -C0, C0 );
        }

        if( aq  )
        {
          rcFilterParameter.pFlt[   rcFilterParameter.iOffset] = Q1 + gClipMinMax((Q2 + ((P0 + Q0 + 1)>>1) - (Q1<<1)) >> 1, -C0, C0 );
        }

        C0 += ap + aq -1;
      }

      C0++;
      Int iDiff      = gClipMinMax(((iDelta << 2) + (P1 - Q1) + 4) >> 3, -C0, C0 ) ;
      rcFilterParameter.pFlt[-rcFilterParameter.iOffset] = gClip( P0 + iDiff );
      rcFilterParameter.pFlt[       0] = gClip( Q0 - iDiff );
      return;
    }


    if( ! uiLum )
    {
      rcFilterParameter.pFlt[         0] = ((Q1 << 1) + Q0 + P1 + 2) >> 2;
      rcFilterParameter.pFlt[  -rcFilterParameter.iOffset] = ((P1 << 1) + P0 + Q1 + 2) >> 2;
    }
    else
    {
      Int P2 = rcFilterParameter.pFlt[-3*rcFilterParameter.iOffset] ;
      Int Q2 = rcFilterParameter.pFlt[ 2*rcFilterParameter.iOffset] ;
      Bool bEnable  = (iAbsDelta < ((iAlpha >> 2) + 2));
      Bool aq       = bEnable & ( abs( Q2 - Q0 ) < iBeta );
      Bool ap       = bEnable & ( abs( P2 - P0 ) < iBeta );
      Int PQ0 = P0 + Q0;

      if( aq )
      {
        rcFilterParameter.pFlt[         0] = (P1 + ((Q1 + PQ0) << 1) +  Q2 + 4) >> 3;
        rcFilterParameter.pFlt[   rcFilterParameter.iOffset] = (PQ0 +Q1 + Q2 + 2) >> 2;
        rcFilterParameter.pFlt[ 2*rcFilterParameter.iOffset] = (((rcFilterParameter.pFlt[ 3*rcFilterParameter.iOffset] + Q2) <<1) + Q2 + Q1 + PQ0 + 4) >> 3;
      }
      else
      {
        rcFilterParameter.pFlt[         0] = ((Q1 << 1) + Q0 + P1 + 2) >> 2;
      }

      if( ap )
      {
        rcFilterParameter.pFlt[  -rcFilterParameter.iOffset] = (Q1 + ((P1 + PQ0) << 1) +  P2 + 4) >> 3;
        rcFilterParameter.pFlt[-2*rcFilterParameter.iOffset] = (PQ0 +P1 + P2 + 2) >> 2;
        rcFilterParameter.pFlt[-3*rcFilterParameter.iOffset] = (((rcFilterParameter.pFlt[-4*rcFilterParameter.iOffset] + P2) <<1) + P2 + P1 + PQ0 + 4) >> 3;
      }
      else
      {
        rcFilterParameter.pFlt[  -rcFilterParameter.iOffset] = ((P1 << 1) + P0 + Q1 + 2) >> 2;
      }
    }
  }

};



H264AVC_NAMESPACE_END


#endif // !defined(AFX_LOOPFILTER_H__1860BB4C_C677_487A_A81F_0BD39DA40284__INCLUDED_)

⌨️ 快捷键说明

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