Changeset 608 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComWedgelet.cpp


Ignore:
Timestamp:
1 Sep 2013, 22:47:26 (11 years ago)
Author:
tech
Message:

Merged DEV-2.0-dev0@604.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibCommon/TComWedgelet.cpp

    r443 r608  
    4545using namespace std;
    4646
    47 
     47#if H_3D_DIM_DMM
    4848TComWedgelet::TComWedgelet( UInt uiWidth, UInt uiHeight ) : m_uhXs     ( 0 ),
    4949                                                            m_uhYs     ( 0 ),
     
    5151                                                            m_uhYe     ( 0 ),
    5252                                                            m_uhOri    ( 0 ),
    53                                                             m_eWedgeRes( FULL_PEL )
    54 #if HHI_DMM_PRED_TEX || HHI_DMM_WEDGE_INTRA
    55                                                             , m_bIsCoarse( false )
    56 #endif
     53                                                            m_eWedgeRes( FULL_PEL ),
     54                                                            m_bIsCoarse( false )
    5755{
    5856  create( uiWidth, uiHeight );
     
    6563                                                            m_uhOri    ( rcWedge.m_uhOri     ),
    6664                                                            m_eWedgeRes( rcWedge.m_eWedgeRes ),
    67 #if HHI_DMM_PRED_TEX || HHI_DMM_WEDGE_INTRA
    6865                                                            m_bIsCoarse( rcWedge.m_bIsCoarse ),
    6966                                                            m_uiAng    ( rcWedge.m_uiAng     ),
    70 #endif
    7167                                                            m_uiWidth  ( rcWedge.m_uiWidth   ),
    7268                                                            m_uiHeight ( rcWedge.m_uiHeight  ),
     
    10197}
    10298
    103 #if HHI_DMM_PRED_TEX || HHI_DMM_WEDGE_INTRA
    104 Void TComWedgelet::findClosetAngle()
     99Void TComWedgelet::findClosestAngle()
    105100{
    106101  UInt uiAng=0,uiOptAng=0;
     
    132127
    133128Void TComWedgelet::setWedgelet( UChar uhXs, UChar uhYs, UChar uhXe, UChar uhYe, UChar uhOri, WedgeResolution eWedgeRes, Bool bIsCoarse )
    134 #else
    135 Void TComWedgelet::setWedgelet( UChar uhXs, UChar uhYs, UChar uhXe, UChar uhYe, UChar uhOri, WedgeResolution eWedgeRes )
    136 #endif
    137129{
    138130  m_uhXs      = uhXs;
     
    142134  m_uhOri     = uhOri;
    143135  m_eWedgeRes = eWedgeRes;
    144 #if HHI_DMM_PRED_TEX || HHI_DMM_WEDGE_INTRA
    145136  m_bIsCoarse = bIsCoarse;
    146 #endif
    147137
    148138  xGenerateWedgePattern();
     
    185175}
    186176
    187 #if HHI_DMM_WEDGE_INTRA
    188177Bool TComWedgelet::checkPredDirAbovePossible( UInt uiPredDirBlockSize, UInt uiPredDirBlockOffset )
    189178{
    190   WedgeResolution eContDWedgeRes = g_aeWedgeResolutionList[(UInt)g_aucConvertToBit[uiPredDirBlockSize]];
     179  WedgeResolution eContDWedgeRes = g_dmmWedgeResolution[(UInt)g_aucConvertToBit[uiPredDirBlockSize]];
    191180  UInt uiContDStartEndMax = 0;
    192181  UInt uiContDStartEndOffset = 0;
     
    235224Bool TComWedgelet::checkPredDirLeftPossible( UInt uiPredDirBlockSize, UInt uiPredDirBlockOffset )
    236225{
    237   WedgeResolution eContDWedgeRes = g_aeWedgeResolutionList[(UInt)g_aucConvertToBit[uiPredDirBlockSize]];
     226  WedgeResolution eContDWedgeRes = g_dmmWedgeResolution[(UInt)g_aucConvertToBit[uiPredDirBlockSize]];
    238227  UInt uiContDStartEndMax = 0;
    239228  UInt uiContDStartEndOffset = 0;
     
    293282  UInt uiRefEndY   = (UInt)getEndY();
    294283
    295   WedgeResolution eContDWedgeRes = g_aeWedgeResolutionList[(UInt)g_aucConvertToBit[uiPredDirBlockSize]];
     284  WedgeResolution eContDWedgeRes = g_dmmWedgeResolution[(UInt)g_aucConvertToBit[uiPredDirBlockSize]];
    296285  UInt uiContDStartEndMax = 0;
    297286  UInt uiContDStartEndOffset = 0;
     
    477466  UInt uiRefEndY   = (UInt)getEndY();
    478467
    479   WedgeResolution eContDWedgeRes = g_aeWedgeResolutionList[(UInt)g_aucConvertToBit[uiPredDirBlockSize]];
     468  WedgeResolution eContDWedgeRes = g_dmmWedgeResolution[(UInt)g_aucConvertToBit[uiPredDirBlockSize]];
    480469  UInt uiContDStartEndMax = 0;
    481470  UInt uiContDStartEndOffset = 0;
     
    653642  }
    654643}
    655 #endif
    656644
    657645Void TComWedgelet::xGenerateWedgePattern()
     
    666654  }
    667655
    668   if( m_eWedgeRes == DOUBLE_PEL) // fix for line-end problem with DOUBLE_PEL resolution
     656  if( m_eWedgeRes == DOUBLE_PEL) // adjust line-end for DOUBLE_PEL resolution
    669657  {
    670658    if( m_uhOri == 1 ) { uhXs = uiTempBlockSize-1; }
     
    687675  case( 2 ): { for( UInt iX = uiTempBlockSize-1; iX > uhXs;            iX-- ) { UInt iY = uiTempBlockSize-1; while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iY--; } } } break;
    688676  case( 3 ): { for( UInt iY = uiTempBlockSize-1; iY > uhYs;            iY-- ) { UInt iX = 0;                 while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iX++; } } } break;
    689 #if HHI_DMM_PRED_TEX || HHI_DMM_WEDGE_INTRA
    690677  case( 4 ):
    691678    {
     
    699686      else                                { for( UInt iX = 0; iX < uiTempBlockSize; iX++ ) { UInt iY = uiTempBlockSize-1; while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iY--; } } }
    700687    }
    701 #else
    702   case( 4 ): { for( UInt iY = 0;               iY < uiTempBlockSize; iY++ ) { UInt iX = 0;                 while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iX++; } } } break;
    703   case( 5 ): { for( UInt iX = 0;               iX < uiTempBlockSize; iX++ ) { UInt iY = 0;                 while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iY++; } } } break;
    704 #endif
    705688  }
    706689
     
    721704      case( 2 ): { uiOffX = 1; uiOffY = 1; } break;
    722705      case( 3 ): { uiOffX = 0; uiOffY = 1; } break;
    723 #if HHI_DMM_PRED_TEX || HHI_DMM_WEDGE_INTRA
    724706      case( 4 ):
    725707        {
     
    734716        }
    735717        break;
    736 #else
    737       case( 4 ): { uiOffX = 0; uiOffY = 0; } break;
    738       case( 5 ): { uiOffX = 0; uiOffY = 0; } break;
    739 #endif
    740718      default:   { uiOffX = 0; uiOffY = 0; } break;
    741719      }
     
    783761  Int deltax = x1 - x0;
    784762  Int deltay = abs(y1 - y0);
    785 #if FIX_WEDGE_NOFLOAT_D0036
    786763  Int error = 0;
    787764  Int deltaerr = (deltay<<1);
    788 #else
    789   double error = 0.0;
    790   double deltaerr = (double)deltay / (double)deltax;
    791 #endif
    792765
    793766  Int ystep;
     
    802775
    803776    error += deltaerr;
    804 #if FIX_WEDGE_NOFLOAT_D0036
    805777    if( error >= deltax )
    806 #else
    807     if( error >= 0.5)
    808 #endif   
    809778    {
    810779      y += ystep;
    811 #if FIX_WEDGE_NOFLOAT_D0036
    812780      error = error - (deltax<<1);
    813 #else
    814       error = error - 1.0;
    815 #endif   
    816     }
    817   }
    818 }
    819 
    820 #if HHI_DMM_PRED_TEX || HHI_DMM_WEDGE_INTRA
     781    }
     782  }
     783}
     784
    821785TComWedgeNode::TComWedgeNode()
    822786{
    823   m_uiPatternIdx = NO_IDX;
    824   for( UInt uiPos = 0; uiPos < NUM_WEDGE_REFINES; uiPos++ )
    825   {
    826     m_uiRefineIdx[uiPos] = NO_IDX;
     787  m_uiPatternIdx = DMM_NO_WEDGEINDEX;
     788  for( UInt uiPos = 0; uiPos < DMM_NUM_WEDGE_REFINES; uiPos++ )
     789  {
     790    m_uiRefineIdx[uiPos] = DMM_NO_WEDGEINDEX;
    827791  }
    828792}
     
    834798UInt TComWedgeNode::getRefineIdx( UInt uiPos )
    835799{
    836   assert( uiPos < NUM_WEDGE_REFINES );
     800  assert( uiPos < DMM_NUM_WEDGE_REFINES );
    837801  return m_uiRefineIdx[uiPos];
    838802}
     
    843807Void TComWedgeNode::setRefineIdx( UInt uiIdx, UInt uiPos )
    844808{
    845   assert( uiPos < NUM_WEDGE_REFINES );
     809  assert( uiPos < DMM_NUM_WEDGE_REFINES );
    846810  m_uiRefineIdx[uiPos] = uiIdx; 
    847811}
    848 #endif
    849 
    850 #if HHI_DMM_PRED_TEX
    851 TComWedgeDist::TComWedgeDist()
    852 {
    853   init();
    854 }
    855 
    856 TComWedgeDist::~TComWedgeDist()
    857 {
    858 }
    859 
    860 Void TComWedgeDist::init()
    861 {
    862   m_afpDistortFunc[0] = TComWedgeDist::xGetSAD4;
    863   m_afpDistortFunc[1] = TComWedgeDist::xGetSAD8;
    864   m_afpDistortFunc[2] = TComWedgeDist::xGetSAD16;
    865   m_afpDistortFunc[3] = TComWedgeDist::xGetSAD32;
    866 
    867   m_afpDistortFunc[4] = TComWedgeDist::xGetSSE4;
    868   m_afpDistortFunc[5] = TComWedgeDist::xGetSSE8;
    869   m_afpDistortFunc[6] = TComWedgeDist::xGetSSE16;
    870   m_afpDistortFunc[7] = TComWedgeDist::xGetSSE32;
    871 }
    872 
    873 UInt TComWedgeDist::xGetSAD4( WedgeDistParam* pcDtParam )
    874 {
    875   Pel* piOrg   = pcDtParam->pOrg;
    876   Pel* piCur   = pcDtParam->pCur;
    877   Int  iRows   = pcDtParam->iRows;
    878   Int  iSubShift  = pcDtParam->iSubShift;
    879   Int  iSubStep   = ( 1 << iSubShift );
    880   Int  iStrideCur = pcDtParam->iStrideCur*iSubStep;
    881   Int  iStrideOrg = pcDtParam->iStrideOrg*iSubStep;
    882 
    883   UInt uiSum = 0;
    884 
    885   for( ; iRows != 0; iRows-=iSubStep )
    886   {
    887     uiSum += abs( piOrg[0] - piCur[0] );
    888     uiSum += abs( piOrg[1] - piCur[1] );
    889     uiSum += abs( piOrg[2] - piCur[2] );
    890     uiSum += abs( piOrg[3] - piCur[3] );
    891 
    892     piOrg += iStrideOrg;
    893     piCur += iStrideCur;
    894   }
    895 
    896   uiSum <<= iSubShift;
    897   return ( uiSum >> g_uiBitIncrement );
    898 }
    899 
    900 UInt TComWedgeDist::xGetSAD8( WedgeDistParam* pcDtParam )
    901 {
    902   Pel* piOrg      = pcDtParam->pOrg;
    903   Pel* piCur      = pcDtParam->pCur;
    904   Int  iRows      = pcDtParam->iRows;
    905   Int  iSubShift  = pcDtParam->iSubShift;
    906   Int  iSubStep   = ( 1 << iSubShift );
    907   Int  iStrideCur = pcDtParam->iStrideCur*iSubStep;
    908   Int  iStrideOrg = pcDtParam->iStrideOrg*iSubStep;
    909 
    910   UInt uiSum = 0;
    911 
    912   for( ; iRows != 0; iRows-=iSubStep )
    913   {
    914     uiSum += abs( piOrg[0] - piCur[0] );
    915     uiSum += abs( piOrg[1] - piCur[1] );
    916     uiSum += abs( piOrg[2] - piCur[2] );
    917     uiSum += abs( piOrg[3] - piCur[3] );
    918     uiSum += abs( piOrg[4] - piCur[4] );
    919     uiSum += abs( piOrg[5] - piCur[5] );
    920     uiSum += abs( piOrg[6] - piCur[6] );
    921     uiSum += abs( piOrg[7] - piCur[7] );
    922 
    923     piOrg += iStrideOrg;
    924     piCur += iStrideCur;
    925   }
    926 
    927   uiSum <<= iSubShift;
    928   return ( uiSum >> g_uiBitIncrement );
    929 }
    930 
    931 UInt TComWedgeDist::xGetSAD16( WedgeDistParam* pcDtParam )
    932 {
    933   Pel* piOrg   = pcDtParam->pOrg;
    934   Pel* piCur   = pcDtParam->pCur;
    935   Int  iRows   = pcDtParam->iRows;
    936   Int  iSubShift  = pcDtParam->iSubShift;
    937   Int  iSubStep   = ( 1 << iSubShift );
    938   Int  iStrideCur = pcDtParam->iStrideCur*iSubStep;
    939   Int  iStrideOrg = pcDtParam->iStrideOrg*iSubStep;
    940 
    941   UInt uiSum = 0;
    942 
    943   for( ; iRows != 0; iRows-=iSubStep )
    944   {
    945     uiSum += abs( piOrg[0] - piCur[0] );
    946     uiSum += abs( piOrg[1] - piCur[1] );
    947     uiSum += abs( piOrg[2] - piCur[2] );
    948     uiSum += abs( piOrg[3] - piCur[3] );
    949     uiSum += abs( piOrg[4] - piCur[4] );
    950     uiSum += abs( piOrg[5] - piCur[5] );
    951     uiSum += abs( piOrg[6] - piCur[6] );
    952     uiSum += abs( piOrg[7] - piCur[7] );
    953     uiSum += abs( piOrg[8] - piCur[8] );
    954     uiSum += abs( piOrg[9] - piCur[9] );
    955     uiSum += abs( piOrg[10] - piCur[10] );
    956     uiSum += abs( piOrg[11] - piCur[11] );
    957     uiSum += abs( piOrg[12] - piCur[12] );
    958     uiSum += abs( piOrg[13] - piCur[13] );
    959     uiSum += abs( piOrg[14] - piCur[14] );
    960     uiSum += abs( piOrg[15] - piCur[15] );
    961 
    962     piOrg += iStrideOrg;
    963     piCur += iStrideCur;
    964   }
    965 
    966   uiSum <<= iSubShift;
    967   return ( uiSum >> g_uiBitIncrement );
    968 }
    969 
    970 UInt TComWedgeDist::xGetSAD32( WedgeDistParam* pcDtParam )
    971 {
    972   Pel* piOrg   = pcDtParam->pOrg;
    973   Pel* piCur   = pcDtParam->pCur;
    974   Int  iRows   = pcDtParam->iRows;
    975   Int  iSubShift  = pcDtParam->iSubShift;
    976   Int  iSubStep   = ( 1 << iSubShift );
    977   Int  iStrideCur = pcDtParam->iStrideCur*iSubStep;
    978   Int  iStrideOrg = pcDtParam->iStrideOrg*iSubStep;
    979 
    980   UInt uiSum = 0;
    981 
    982   for( ; iRows != 0; iRows-=iSubStep )
    983   {
    984     uiSum += abs( piOrg[0] - piCur[0] );
    985     uiSum += abs( piOrg[1] - piCur[1] );
    986     uiSum += abs( piOrg[2] - piCur[2] );
    987     uiSum += abs( piOrg[3] - piCur[3] );
    988     uiSum += abs( piOrg[4] - piCur[4] );
    989     uiSum += abs( piOrg[5] - piCur[5] );
    990     uiSum += abs( piOrg[6] - piCur[6] );
    991     uiSum += abs( piOrg[7] - piCur[7] );
    992     uiSum += abs( piOrg[8] - piCur[8] );
    993     uiSum += abs( piOrg[9] - piCur[9] );
    994     uiSum += abs( piOrg[10] - piCur[10] );
    995     uiSum += abs( piOrg[11] - piCur[11] );
    996     uiSum += abs( piOrg[12] - piCur[12] );
    997     uiSum += abs( piOrg[13] - piCur[13] );
    998     uiSum += abs( piOrg[14] - piCur[14] );
    999     uiSum += abs( piOrg[15] - piCur[15] );
    1000     uiSum += abs( piOrg[16] - piCur[16] );
    1001     uiSum += abs( piOrg[17] - piCur[17] );
    1002     uiSum += abs( piOrg[18] - piCur[18] );
    1003     uiSum += abs( piOrg[19] - piCur[19] );
    1004     uiSum += abs( piOrg[20] - piCur[20] );
    1005     uiSum += abs( piOrg[21] - piCur[21] );
    1006     uiSum += abs( piOrg[22] - piCur[22] );
    1007     uiSum += abs( piOrg[23] - piCur[23] );
    1008     uiSum += abs( piOrg[24] - piCur[24] );
    1009     uiSum += abs( piOrg[25] - piCur[25] );
    1010     uiSum += abs( piOrg[26] - piCur[26] );
    1011     uiSum += abs( piOrg[27] - piCur[27] );
    1012     uiSum += abs( piOrg[28] - piCur[28] );
    1013     uiSum += abs( piOrg[29] - piCur[29] );
    1014     uiSum += abs( piOrg[30] - piCur[30] );
    1015     uiSum += abs( piOrg[31] - piCur[31] );
    1016 
    1017     piOrg += iStrideOrg;
    1018     piCur += iStrideCur;
    1019   }
    1020 
    1021   uiSum <<= iSubShift;
    1022   return ( uiSum >> g_uiBitIncrement );
    1023 }
    1024 
    1025 UInt TComWedgeDist::xGetSSE4( WedgeDistParam* pcDtParam )
    1026 {
    1027   Pel* piOrg   = pcDtParam->pOrg;
    1028   Pel* piCur   = pcDtParam->pCur;
    1029   Int  iRows   = pcDtParam->iRows;
    1030   Int  iStrideOrg = pcDtParam->iStrideOrg;
    1031   Int  iStrideCur = pcDtParam->iStrideCur;
    1032 
    1033   UInt uiSum = 0;
    1034   UInt uiShift = g_uiBitIncrement<<1;
    1035 
    1036   Int  iTemp;
    1037 
    1038   for( ; iRows != 0; iRows-- )
    1039   {
    1040 
    1041     iTemp = piOrg[0] - piCur[0]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1042     iTemp = piOrg[1] - piCur[1]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1043     iTemp = piOrg[2] - piCur[2]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1044     iTemp = piOrg[3] - piCur[3]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1045 
    1046     piOrg += iStrideOrg;
    1047     piCur += iStrideCur;
    1048   }
    1049 
    1050   return ( uiSum );
    1051 }
    1052 
    1053 UInt TComWedgeDist::xGetSSE8( WedgeDistParam* pcDtParam )
    1054 {
    1055   Pel* piOrg   = pcDtParam->pOrg;
    1056   Pel* piCur   = pcDtParam->pCur;
    1057   Int  iRows   = pcDtParam->iRows;
    1058   Int  iStrideOrg = pcDtParam->iStrideOrg;
    1059   Int  iStrideCur = pcDtParam->iStrideCur;
    1060 
    1061   UInt uiSum = 0;
    1062   UInt uiShift = g_uiBitIncrement<<1;
    1063 
    1064   Int  iTemp;
    1065 
    1066   for( ; iRows != 0; iRows-- )
    1067   {
    1068     iTemp = piOrg[0] - piCur[0]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1069     iTemp = piOrg[1] - piCur[1]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1070     iTemp = piOrg[2] - piCur[2]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1071     iTemp = piOrg[3] - piCur[3]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1072     iTemp = piOrg[4] - piCur[4]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1073     iTemp = piOrg[5] - piCur[5]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1074     iTemp = piOrg[6] - piCur[6]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1075     iTemp = piOrg[7] - piCur[7]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1076 
    1077     piOrg += iStrideOrg;
    1078     piCur += iStrideCur;
    1079   }
    1080 
    1081   return ( uiSum );
    1082 }
    1083 
    1084 UInt TComWedgeDist::xGetSSE16( WedgeDistParam* pcDtParam )
    1085 {
    1086   Pel* piOrg   = pcDtParam->pOrg;
    1087   Pel* piCur   = pcDtParam->pCur;
    1088   Int  iRows   = pcDtParam->iRows;
    1089   Int  iStrideOrg = pcDtParam->iStrideOrg;
    1090   Int  iStrideCur = pcDtParam->iStrideCur;
    1091 
    1092   UInt uiSum = 0;
    1093   UInt uiShift = g_uiBitIncrement<<1;
    1094 
    1095   Int  iTemp;
    1096 
    1097   for( ; iRows != 0; iRows-- )
    1098   {
    1099 
    1100     iTemp = piOrg[ 0] - piCur[ 0]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1101     iTemp = piOrg[ 1] - piCur[ 1]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1102     iTemp = piOrg[ 2] - piCur[ 2]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1103     iTemp = piOrg[ 3] - piCur[ 3]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1104     iTemp = piOrg[ 4] - piCur[ 4]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1105     iTemp = piOrg[ 5] - piCur[ 5]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1106     iTemp = piOrg[ 6] - piCur[ 6]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1107     iTemp = piOrg[ 7] - piCur[ 7]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1108     iTemp = piOrg[ 8] - piCur[ 8]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1109     iTemp = piOrg[ 9] - piCur[ 9]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1110     iTemp = piOrg[10] - piCur[10]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1111     iTemp = piOrg[11] - piCur[11]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1112     iTemp = piOrg[12] - piCur[12]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1113     iTemp = piOrg[13] - piCur[13]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1114     iTemp = piOrg[14] - piCur[14]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1115     iTemp = piOrg[15] - piCur[15]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1116 
    1117     piOrg += iStrideOrg;
    1118     piCur += iStrideCur;
    1119   }
    1120 
    1121   return ( uiSum );
    1122 }
    1123 
    1124 UInt TComWedgeDist::xGetSSE32( WedgeDistParam* pcDtParam )
    1125 {
    1126   Pel* piOrg   = pcDtParam->pOrg;
    1127   Pel* piCur   = pcDtParam->pCur;
    1128   Int  iRows   = pcDtParam->iRows;
    1129   Int  iStrideOrg = pcDtParam->iStrideOrg;
    1130   Int  iStrideCur = pcDtParam->iStrideCur;
    1131 
    1132   UInt uiSum = 0;
    1133   UInt uiShift = g_uiBitIncrement<<1;
    1134   Int  iTemp;
    1135 
    1136   for( ; iRows != 0; iRows-- )
    1137   {
    1138 
    1139     iTemp = piOrg[ 0] - piCur[ 0]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1140     iTemp = piOrg[ 1] - piCur[ 1]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1141     iTemp = piOrg[ 2] - piCur[ 2]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1142     iTemp = piOrg[ 3] - piCur[ 3]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1143     iTemp = piOrg[ 4] - piCur[ 4]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1144     iTemp = piOrg[ 5] - piCur[ 5]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1145     iTemp = piOrg[ 6] - piCur[ 6]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1146     iTemp = piOrg[ 7] - piCur[ 7]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1147     iTemp = piOrg[ 8] - piCur[ 8]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1148     iTemp = piOrg[ 9] - piCur[ 9]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1149     iTemp = piOrg[10] - piCur[10]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1150     iTemp = piOrg[11] - piCur[11]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1151     iTemp = piOrg[12] - piCur[12]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1152     iTemp = piOrg[13] - piCur[13]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1153     iTemp = piOrg[14] - piCur[14]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1154     iTemp = piOrg[15] - piCur[15]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1155     iTemp = piOrg[16] - piCur[16]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1156     iTemp = piOrg[17] - piCur[17]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1157     iTemp = piOrg[18] - piCur[18]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1158     iTemp = piOrg[19] - piCur[19]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1159     iTemp = piOrg[20] - piCur[20]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1160     iTemp = piOrg[21] - piCur[21]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1161     iTemp = piOrg[22] - piCur[22]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1162     iTemp = piOrg[23] - piCur[23]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1163     iTemp = piOrg[24] - piCur[24]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1164     iTemp = piOrg[25] - piCur[25]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1165     iTemp = piOrg[26] - piCur[26]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1166     iTemp = piOrg[27] - piCur[27]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1167     iTemp = piOrg[28] - piCur[28]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1168     iTemp = piOrg[29] - piCur[29]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1169     iTemp = piOrg[30] - piCur[30]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1170     iTemp = piOrg[31] - piCur[31]; uiSum += ( iTemp * iTemp ) >> uiShift;
    1171 
    1172     piOrg += iStrideOrg;
    1173     piCur += iStrideCur;
    1174   }
    1175 
    1176   return ( uiSum );
    1177 }
    1178 
    1179 Void TComWedgeDist::setDistParam( UInt uiBlkWidth, UInt uiBlkHeight, WedgeDist eWDist, WedgeDistParam& rcDistParam )
    1180 {
    1181   // set Block Width / Height
    1182   rcDistParam.iCols    = uiBlkWidth;
    1183   rcDistParam.iRows    = uiBlkHeight;
    1184   rcDistParam.DistFunc = m_afpDistortFunc[eWDist + g_aucConvertToBit[ rcDistParam.iCols ] ];
    1185 
    1186   // initialize
    1187   rcDistParam.iSubShift  = 0;
    1188 }
    1189 
    1190 UInt TComWedgeDist::getDistPart( Pel* piCur, Int iCurStride,  Pel* piOrg, Int iOrgStride, UInt uiBlkWidth, UInt uiBlkHeight, WedgeDist eWDist )
    1191 {
    1192   WedgeDistParam cDtParam;
    1193   setDistParam( uiBlkWidth, uiBlkHeight, eWDist, cDtParam );
    1194   cDtParam.pOrg       = piOrg;
    1195   cDtParam.pCur       = piCur;
    1196   cDtParam.iStrideOrg = iOrgStride;
    1197   cDtParam.iStrideCur = iCurStride;
    1198   cDtParam.iStep      = 1;
    1199 
    1200   return cDtParam.DistFunc( &cDtParam );
    1201 }
    1202 #endif
     812#endif //H_3D_DIM_DMM
Note: See TracChangeset for help on using the changeset viewer.