Ignore:
Timestamp:
30 Oct 2012, 12:09:04 (12 years ago)
Author:
hhi
Message:

Integration of B0039 (macro HHIQC_DMMFASTSEARCH_B0039).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-4.1-dev2-HHI/source/Lib/TLibCommon/TComWedgelet.cpp

    r56 r158  
    5252                                                            m_uhOri    ( 0 ),
    5353                                                            m_eWedgeRes( FULL_PEL )
     54#if HHIQC_DMMFASTSEARCH_B0039
     55                                                            , m_bIsCoarse( false )
     56#endif
    5457{
    5558  create( uiWidth, uiHeight );
     
    6265                                                            m_uhOri    ( rcWedge.m_uhOri     ),
    6366                                                            m_eWedgeRes( rcWedge.m_eWedgeRes ),
     67#if HHIQC_DMMFASTSEARCH_B0039
     68                                                            m_bIsCoarse( rcWedge.m_bIsCoarse ),
     69                                                            m_uiAng    ( rcWedge.m_uiAng     ),
     70#endif
    6471                                                            m_uiWidth  ( rcWedge.m_uiWidth   ),
    6572                                                            m_uiHeight ( rcWedge.m_uiHeight  ),
     
    94101}
    95102
     103#if HHIQC_DMMFASTSEARCH_B0039
     104Void TComWedgelet::findClosetAngle()
     105{
     106  UInt uiAng=0,uiOptAng=0;
     107  UInt uiMinD=MAX_UINT;
     108  UInt uiTmpD=0;
     109  Int angTable[9]    = {0,    2,    5,   9,  13,  17,  21,  26,  32};
     110 
     111  UChar uhXs = m_uhXs;
     112  UChar uhYs = m_uhYs;
     113  UChar uhXe = m_uhXe;
     114  UChar uhYe = m_uhYe;
     115
     116  for(uiAng=2; uiAng<=34; uiAng++)
     117  {
     118    Int iSign    = (uiAng<VER_IDX && uiAng>HOR_IDX ) ? -1 : 1;
     119    Int iVer     = uiAng>17 ? 32 : angTable[(uiAng>10) ? (uiAng-10) : (10-uiAng)];
     120    Int iHor     = uiAng<19 ? 32 : angTable[(uiAng>26) ? (uiAng-26) : (26-uiAng)];
     121
     122    uiTmpD  = abs(iVer*iSign*(uhXs-uhXe) - iHor*(uhYe-uhYs));
     123   
     124    if( uiTmpD < uiMinD )
     125    {
     126      uiMinD = uiTmpD;
     127      uiOptAng = uiAng;
     128    }
     129  }
     130  m_uiAng = uiOptAng;
     131}
     132
     133Void TComWedgelet::setWedgelet( UChar uhXs, UChar uhYs, UChar uhXe, UChar uhYe, UChar uhOri, WedgeResolution eWedgeRes, Bool bIsCoarse )
     134#else
    96135Void TComWedgelet::setWedgelet( UChar uhXs, UChar uhYs, UChar uhXe, UChar uhYe, UChar uhOri, WedgeResolution eWedgeRes )
     136#endif
    97137{
    98138  m_uhXs      = uhXs;
     
    102142  m_uhOri     = uhOri;
    103143  m_eWedgeRes = eWedgeRes;
     144#if HHIQC_DMMFASTSEARCH_B0039
     145  m_bIsCoarse = bIsCoarse;
     146#endif
    104147
    105148  xGenerateWedgePattern();
     
    644687  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;
    645688  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 HHIQC_DMMFASTSEARCH_B0039
     690  case( 4 ):
     691    {
     692      if( (uhXs+uhXe) < uiTempBlockSize ) { for( UInt iY = 0; iY < uiTempBlockSize; iY++ ) { UInt iX = 0;                 while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iX++; } } }
     693      else                                { for( UInt iY = 0; iY < uiTempBlockSize; iY++ ) { UInt iX = uiTempBlockSize-1; while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iX--; } } }
     694    }
     695    break;
     696  case( 5 ):
     697    {
     698      if( (uhYs+uhYe) < uiTempBlockSize ) { for( UInt iX = 0; iX < uiTempBlockSize; iX++ ) { UInt iY = 0;                 while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iY++; } } }
     699      else                                { for( UInt iX = 0; iX < uiTempBlockSize; iX++ ) { UInt iY = uiTempBlockSize-1; while( pbTempPattern[(iY * iTempStride) + iX] == false ) { pbTempPattern[(iY * iTempStride) + iX] = true; iY--; } } }
     700    }
     701#else
    646702  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;
    647703  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
    648705  }
    649706
     
    664721      case( 2 ): { uiOffX = 1; uiOffY = 1; } break;
    665722      case( 3 ): { uiOffX = 0; uiOffY = 1; } break;
     723#if HHIQC_DMMFASTSEARCH_B0039
     724      case( 4 ):
     725        {
     726          if( (uhXs+uhXe) < uiTempBlockSize ) { uiOffX = 0; uiOffY = 0; }
     727          else                                { uiOffX = 1; uiOffY = 0; }
     728        }
     729        break;
     730      case( 5 ):
     731        {
     732          if( (uhYs+uhYe) < uiTempBlockSize ) { uiOffX = 0; uiOffY = 0; }
     733          else                                { uiOffX = 0; uiOffY = 1; }
     734        }
     735        break;
     736#else
    666737      case( 4 ): { uiOffX = 0; uiOffY = 0; } break;
    667738      case( 5 ): { uiOffX = 0; uiOffY = 0; } break;
     739#endif
    668740      default:   { uiOffX = 0; uiOffY = 0; } break;
    669741      }
     
    732804  }
    733805}
     806
     807#if HHIQC_DMMFASTSEARCH_B0039
     808TComWedgeNode::TComWedgeNode()
     809{
     810  m_uiPatternIdx = NO_IDX;
     811  for( UInt uiPos = 0; uiPos < NUM_WEDGE_REFINES; uiPos++ )
     812  {
     813    m_uiRefineIdx[uiPos] = NO_IDX;
     814  }
     815}
     816
     817UInt TComWedgeNode::getPatternIdx()
     818{
     819  return m_uiPatternIdx;
     820}
     821UInt TComWedgeNode::getRefineIdx( UInt uiPos )
     822{
     823  assert( uiPos < NUM_WEDGE_REFINES );
     824  return m_uiRefineIdx[uiPos];
     825}
     826Void TComWedgeNode::setPatternIdx( UInt uiIdx )
     827{
     828  m_uiPatternIdx = uiIdx;
     829}
     830Void TComWedgeNode::setRefineIdx( UInt uiIdx, UInt uiPos )
     831{
     832  assert( uiPos < NUM_WEDGE_REFINES );
     833  m_uiRefineIdx[uiPos] = uiIdx; 
     834}
     835#endif
    734836
    735837#if HHI_DMM_PRED_TEX
Note: See TracChangeset for help on using the changeset viewer.