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

📄 motionvectorcalculation.cpp

📁 jsvm开发代码包括抽样,编码,抽取,解码等一系列功能,可以做工具或研究用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    }
    case BLK_8x4:
    {
      for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
      {
        ListIdx       eListIdx        = ListIdx( uiBw );
        MbMotionData& rcMbMotionData  = rcMbDataAccess.getMbMotionData( eListIdx );
        MbMvData&     rcMbMvdData     = rcMbDataAccess.getMbMvdData   ( eListIdx );

        if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
        {
          if( rcMbMotionData.getMotPredFlag( eParIdx ) )
          {
            AOF( pcMbDataAccessBase );
            cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_8x4_0 );
          }
          else
          {
            rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_8x4_0 );
          }
          cMv +=  rcMbMvdData.getMv( eParIdx, SPART_8x4_0 );
          rcMbMotionData.setAllMv( cMv, eParIdx, SPART_8x4_0 );

          if( rcMbMotionData.getMotPredFlag( eParIdx ) )
          {
            AOF( pcMbDataAccessBase );
            cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_8x4_1 );
          }
          else
          {
            rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_8x4_1 );
          }
          cMv +=  rcMbMvdData.getMv( eParIdx, SPART_8x4_1 );
          rcMbMotionData.setAllMv( cMv, eParIdx, SPART_8x4_1 );
        }
      }
      break;
    }
    case BLK_4x8:
    {
      for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
      {
        ListIdx       eListIdx        = ListIdx( uiBw );
        MbMotionData& rcMbMotionData  = rcMbDataAccess.getMbMotionData( eListIdx );
        MbMvData&     rcMbMvdData     = rcMbDataAccess.getMbMvdData   ( eListIdx );

        if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
        {
          if( rcMbMotionData.getMotPredFlag( eParIdx ) )
          {
            AOF( pcMbDataAccessBase );
            cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x8_0 );
          }
          else
          {
            rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x8_0 );
          }
          cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x8_0 );
          rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x8_0 );

          if( rcMbMotionData.getMotPredFlag( eParIdx ) )
          {
            AOF( pcMbDataAccessBase );
            cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x8_1 );
          }
          else
          {
            rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x8_1 );
          }
          cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x8_1 );
          rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x8_1 );
        }
      }
      break;
    }
    case BLK_4x4:
    {
      for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
      {
        ListIdx       eListIdx        = ListIdx( uiBw );
        MbMotionData& rcMbMotionData  = rcMbDataAccess.getMbMotionData( eListIdx );
        MbMvData&     rcMbMvdData     = rcMbDataAccess.getMbMvdData   ( eListIdx );

        if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
        {
          if( rcMbMotionData.getMotPredFlag( eParIdx ) )
          {
            AOF( pcMbDataAccessBase );
            cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_0 );
          }
          else
          {
            rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_0 );
          }
          cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x4_0 );
          rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_0 );

          if( rcMbMotionData.getMotPredFlag( eParIdx ) )
          {
            AOF( pcMbDataAccessBase );
            cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_1 );
          }
          else
          {
            rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_1 );
          }
          cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x4_1 );
          rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_1 );

          if( rcMbMotionData.getMotPredFlag( eParIdx ) )
          {
            AOF( pcMbDataAccessBase );
            cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_2 );
          }
          else
          {
            rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_2 );
          }
          cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x4_2 );
          rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_2 );

          if( rcMbMotionData.getMotPredFlag( eParIdx ) )
          {
            AOF( pcMbDataAccessBase );
            cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_3 );
          }
          else
          {
            rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_3 );
          }
          cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x4_3 );
          rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_3 );
        }
      }
      break;
    }
    default:
    {
      AF();
      break;
    }
  }
}




Void MotionVectorCalculation::xCalc8x8( MbDataAccess& rcMbDataAccess,
                                        MbDataAccess* pcMbDataAccessBase,
                                        Bool          bFaultTolerant )
{
  Mv    cMv;
  SChar scRefPic;
  UInt  uiBw;

  for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ )
  {
    ParIdx8x8 eParIdx = c8x8Idx.b8x8();

    switch( rcMbDataAccess.getMbData().getBlkMode( c8x8Idx.b8x8Index() ) )
    {
      case BLK_SKIP:
      {
        Bool bOneMv;
        AOF( rcMbDataAccess.getMvPredictorDirect( c8x8Idx.b8x8(), bOneMv, bFaultTolerant ) );
        break;
      }
      case BLK_8x8:
      {
        for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
        {
          ListIdx       eListIdx        = ListIdx( uiBw );
          MbMotionData& rcMbMotionData  = rcMbDataAccess.getMbMotionData( eListIdx );
          MbMvData&     rcMbMvdData     = rcMbDataAccess.getMbMvdData   ( eListIdx );

          if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
          {
            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx );
            }
            cMv += rcMbMvdData.getMv( eParIdx );

            rcMbMotionData.setAllMv( cMv, eParIdx );
          }
        }
        break;
      }
      case BLK_8x4:
      {
        for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
        {
          ListIdx       eListIdx        = ListIdx( uiBw );
          MbMotionData& rcMbMotionData  = rcMbDataAccess.getMbMotionData( eListIdx );
          MbMvData&     rcMbMvdData     = rcMbDataAccess.getMbMvdData   ( eListIdx );

          if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
          {
            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_8x4_0 );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_8x4_0 );
            }
            cMv +=  rcMbMvdData.getMv( eParIdx, SPART_8x4_0 );
            rcMbMotionData.setAllMv( cMv, eParIdx, SPART_8x4_0 );

            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_8x4_1 );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_8x4_1 );
            }
            cMv +=  rcMbMvdData.getMv( eParIdx, SPART_8x4_1 );
            rcMbMotionData.setAllMv( cMv, eParIdx, SPART_8x4_1 );
          }
        }
        break;
      }
      case BLK_4x8:
      {
        for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
        {
          ListIdx       eListIdx        = ListIdx( uiBw );
          MbMotionData& rcMbMotionData  = rcMbDataAccess.getMbMotionData( eListIdx );
          MbMvData&     rcMbMvdData     = rcMbDataAccess.getMbMvdData   ( eListIdx );

          if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
          {
            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x8_0 );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x8_0 );
            }
            cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x8_0 );
            rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x8_0 );

            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x8_1 );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x8_1 );
            }
            cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x8_1 );
            rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x8_1 );
          }
        }
        break;
      }
      case BLK_4x4:
      {
        for( uiBw = 0; uiBw < m_uiMaxBw; uiBw++ )
        {
          ListIdx       eListIdx        = ListIdx( uiBw );
          MbMotionData& rcMbMotionData  = rcMbDataAccess.getMbMotionData( eListIdx );
          MbMvData&     rcMbMvdData     = rcMbDataAccess.getMbMvdData   ( eListIdx );

          if( 0 < (scRefPic = rcMbMotionData.getRefIdx( eParIdx ) ) )
          {
            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_0 );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_0 );
            }
            cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x4_0 );
            rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_0 );

            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_1 );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_1 );
            }
            cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x4_1 );
            rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_1 );

            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_2 );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_2 );
            }
            cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x4_2 );
            rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_2 );

            if( rcMbMotionData.getMotPredFlag( eParIdx ) )
            {
              AOF( pcMbDataAccessBase );
              cMv = pcMbDataAccessBase->getMbMotionData( eListIdx ).getMv( eParIdx, SPART_4x4_3 );
            }
            else
            {
              rcMbDataAccess.getMvPredictor( cMv, scRefPic, eListIdx, eParIdx, SPART_4x4_3 );
            }
            cMv +=  rcMbMvdData.getMv( eParIdx, SPART_4x4_3 );
            rcMbMotionData.setAllMv( cMv, eParIdx, SPART_4x4_3 );
          }
        }
        break;
      }
      default:
      {
        AF();
        break;
      }
    }
  }
}


H264AVC_NAMESPACE_END


⌨️ 快捷键说明

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