Changeset 189 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComPrediction.cpp


Ignore:
Timestamp:
18 Nov 2012, 22:11:37 (12 years ago)
Author:
tech
Message:

Reintegrated branch 4.1-dev0 Rev. 188.

File:
1 edited

Legend:

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

    r100 r189  
    4646// ====================================================================================================================
    4747
    48 #if LGE_EDGE_INTRA
     48#if LGE_EDGE_INTRA_A0070
    4949#define MAX_DISTANCE_EDGEINTRA 255
    5050#endif
     
    423423}
    424424
    425 #if LGE_EDGE_INTRA
     425#if LGE_EDGE_INTRA_A0070
    426426Void TComPrediction::predIntraLumaEdge ( TComDataCU* pcCU, TComPattern* pcTComPattern, UInt uiAbsPartIdx, Int iWidth, Int iHeight, Pel* piPred, UInt uiStride, Bool bDelta )
    427427{
     
    628628    if ( eRefPicList != REF_PIC_LIST_X )
    629629    {
     630#if LGE_ILLUCOMP_B0045
     631      if( pcCU->getSlice()->getPPS()->getUseWP() && !pcCU->getICFlag(uiPartAddr))
     632#else
    630633      if( pcCU->getSlice()->getPPS()->getUseWP())
     634#endif
    631635      {
    632636#if DEPTH_MAP_GENERATION
     
    644648#endif
    645649      }
     650#if LGE_ILLUCOMP_B0045
     651      if( pcCU->getSlice()->getPPS()->getUseWP() && !pcCU->getICFlag(uiPartAddr) )
     652#else
    646653      if ( pcCU->getSlice()->getPPS()->getUseWP() )
     654#endif
    647655      {
    648656        xWeightedPredictionUni( pcCU, pcYuvPred, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred, iPartIdx );
     
    689697    if ( eRefPicList != REF_PIC_LIST_X )
    690698    {
     699#if LGE_ILLUCOMP_B0045
     700      if( pcCU->getSlice()->getPPS()->getUseWP() && !pcCU->getICFlag(uiPartAddr))
     701#else
    691702      if( pcCU->getSlice()->getPPS()->getUseWP())
     703#endif
    692704      {
    693705#if DEPTH_MAP_GENERATION
     
    710722      xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred, iPartIdx, false );
    711723#endif 
     724#if LGE_ILLUCOMP_B0045
     725      if( pcCU->getSlice()->getPPS()->getUseWP() && !pcCU->getICFlag(uiPartAddr))
     726#else
    712727      if ( pcCU->getSlice()->getPPS()->getUseWP() )
     728#endif
    713729      {
    714730        xWeightedPredictionUni( pcCU, pcYuvPred, uiPartAddr, iWidth, iHeight, eRefPicList, pcYuvPred, iPartIdx );
     
    779795  {
    780796#endif
     797#if LGE_ILLUCOMP_B0045
     798    Bool bICFlag = pcCU->getICFlag(uiPartAddr) && (pcCU->getSlice()->getRefViewId( eRefPicList, iRefIdx ) != pcCU->getSlice()->getViewId());
     799
     800    xPredInterLumaBlk  ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi, bICFlag);
     801#else
    781802  xPredInterLumaBlk  ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi );
     803#endif
    782804#if HHI_FULL_PEL_DEPTH_MAP_MV_ACC
    783805  }
    784806#endif
     807#if LGE_ILLUCOMP_B0045
     808  Bool bICFlag = pcCU->getICFlag(uiPartAddr) && (pcCU->getSlice()->getRefViewId( eRefPicList, iRefIdx ) != pcCU->getSlice()->getViewId());
     809
     810  xPredInterChromaBlk( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi, bICFlag );
     811#else
    785812  xPredInterChromaBlk( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi );
     813#endif
    786814}
    787815
     
    926954 * \param bi       Flag indicating whether bipred is used
    927955 */
     956#if LGE_ILLUCOMP_B0045
     957Void TComPrediction::xPredInterLumaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi, Bool bICFlag)
     958#else
    928959Void TComPrediction::xPredInterLumaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi )
     960#endif
    929961{
    930962  Int refStride = refPic->getStride(); 
     
    961993    m_if.filterVerLuma(tmp + (halfFilterSize-1)*tmpStride, tmpStride, dst, dstStride, width, height,              yFrac, false, !bi);   
    962994  }
     995
     996#if LGE_ILLUCOMP_B0045
     997  if(bICFlag)
     998  {
     999    Int a, b, iShift, i, j;
     1000
     1001    xGetLLSICPrediction(cu, mv, refPic, a, b, iShift);
     1002
     1003    for (i = 0; i < height; i++)
     1004    {
     1005      for (j = 0; j < width; j++)
     1006      {
     1007        if(bi)
     1008        {
     1009          Int iIFshift = IF_INTERNAL_PREC - ( g_uiBitDepth + g_uiBitIncrement );
     1010          dst[j] = ( (a*dst[j]+a*IF_INTERNAL_OFFS) >> iShift ) + b*(1<<iIFshift) - IF_INTERNAL_OFFS;
     1011        }
     1012        else
     1013          dst[j] = Clip( ( (a*dst[j]) >> iShift ) + b );
     1014      }
     1015      dst += dstStride;
     1016    }
     1017  }
     1018#endif
    9631019}
    9641020
     
    9751031 * \param bi       Flag indicating whether bipred is used
    9761032 */
     1033#if LGE_ILLUCOMP_B0045
     1034Void TComPrediction::xPredInterChromaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi, Bool bICFlag )
     1035#else
    9771036Void TComPrediction::xPredInterChromaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi )
     1037#endif
    9781038{
    9791039  Int     refStride  = refPic->getCStride();
     
    10181078    m_if.filterVerChroma(extY  + (halfFilterSize-1)*extStride, extStride, dstCr, dstStride, cxWidth, cxHeight  , yFrac, false, !bi);   
    10191079  }
     1080#if LGE_ILLUCOMP_B0045
     1081  if(bICFlag)
     1082  {
     1083    Int a, b, iShift, i, j;
     1084    xGetLLSICPredictionChroma(cu, mv, refPic, a, b, iShift, 0); // Cb
     1085    for (i = 0; i < cxHeight; i++)
     1086    {
     1087      for (j = 0; j < cxWidth; j++)
     1088      {
     1089        if(bi)
     1090        {
     1091          Int iIFshift = IF_INTERNAL_PREC - ( g_uiBitDepth + g_uiBitIncrement );
     1092          dstCb[j] = ( (a*dstCb[j]+a*IF_INTERNAL_OFFS) >> iShift ) + b*(1<<iIFshift) - IF_INTERNAL_OFFS;
     1093        }
     1094        else
     1095          dstCb[j] = Clip3(0, 255, ((a*dstCb[j])>>iShift)+b);
     1096      }
     1097      dstCb += dstStride;
     1098    }
     1099
     1100    xGetLLSICPredictionChroma(cu, mv, refPic, a, b, iShift, 1); // Cr
     1101    for (i = 0; i < cxHeight; i++)
     1102    {
     1103      for (j = 0; j < cxWidth; j++)
     1104      {
     1105        if(bi)
     1106        {
     1107          Int iIFshift = IF_INTERNAL_PREC - ( g_uiBitDepth + g_uiBitIncrement );
     1108          dstCr[j] = ( (a*dstCr[j]+a*IF_INTERNAL_OFFS) >> iShift ) + b*(1<<iIFshift) - IF_INTERNAL_OFFS;
     1109        }
     1110        else
     1111          dstCr[j] = Clip3(0, 255, ((a*dstCr[j])>>iShift)+b);
     1112      }
     1113      dstCr += dstStride;
     1114    }
     1115  }
     1116#endif
    10201117}
    10211118
     
    14431540}
    14441541
     1542
     1543#if LGE_ILLUCOMP_B0045
     1544/** Function for deriving LM illumination compensation.
     1545 */
     1546Void TComPrediction::xGetLLSICPrediction(TComDataCU* pcCU, TComMv *pMv, TComPicYuv *pRefPic, Int &a, Int &b, Int &iShift)
     1547{
     1548  TComPicYuv *pRecPic = pcCU->getPic()->getPicYuvRec();
     1549  Pel *pRec, *pRef;
     1550  UInt uiWidth, uiHeight, uiTmpPartIdx;
     1551  Int iRecStride = pRecPic->getStride(), iRefStride = pRefPic->getStride();
     1552  Int iCUPelX, iCUPelY, iRefX, iRefY, iRefOffset;
     1553
     1554  iCUPelX = pcCU->getCUPelX() + g_auiRasterToPelX[g_auiZscanToRaster[pcCU->getZorderIdxInCU()]];
     1555  iCUPelY = pcCU->getCUPelY() + g_auiRasterToPelY[g_auiZscanToRaster[pcCU->getZorderIdxInCU()]];
     1556  iRefX   = iCUPelX + (pMv->getHor() >> 2);
     1557  iRefY   = iCUPelY + (pMv->getVer() >> 2);
     1558  uiWidth = pcCU->getWidth(0);
     1559  uiHeight = pcCU->getHeight(0);
     1560
     1561  Int i, j, iCountShift = 0;
     1562
     1563  // LLS parameters estimation -->
     1564
     1565  Int x = 0, y = 0, xx = 0, xy = 0;
     1566
     1567  if(pcCU->getPUAbove(uiTmpPartIdx, pcCU->getZorderIdxInCU()) && iCUPelY > 0 && iRefY > 0)
     1568  {
     1569    iRefOffset = ( pMv->getHor() >> 2 ) + ( pMv->getVer() >> 2 ) * iRefStride - iRefStride;
     1570    pRef = pRefPic->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) + iRefOffset;
     1571    pRec = pRecPic->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) - iRecStride;
     1572
     1573    for( j = 0; j < uiWidth; j++ )
     1574    {
     1575      x += pRef[j];
     1576      y += pRec[j];
     1577      xx += pRef[j] * pRef[j];
     1578      xy += pRef[j] * pRec[j];
     1579    }
     1580    iCountShift += g_aucConvertToBit[ uiWidth ] + 2;
     1581  }
     1582
     1583
     1584  if(pcCU->getPULeft(uiTmpPartIdx, pcCU->getZorderIdxInCU()) && iCUPelX > 0 && iRefX > 0)
     1585  {
     1586    iRefOffset = ( pMv->getHor() >> 2 ) + ( pMv->getVer() >> 2 ) * iRefStride - 1;
     1587    pRef = pRefPic->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) + iRefOffset;
     1588    pRec = pRecPic->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) - 1;
     1589
     1590    for( i = 0; i < uiHeight; i++ )
     1591    {
     1592      x += pRef[0];
     1593      y += pRec[0];
     1594      xx += pRef[0] * pRef[0];
     1595      xy += pRef[0] * pRec[0];
     1596
     1597      pRef += iRefStride;
     1598      pRec += iRecStride;
     1599    }
     1600    iCountShift += iCountShift > 0 ? 1 : ( g_aucConvertToBit[ uiWidth ] + 2 );
     1601  }
     1602
     1603  Int iTempShift = ( g_uiBitDepth + g_uiBitIncrement ) + g_aucConvertToBit[ uiWidth ] + 3 - 15;
     1604
     1605  if(iTempShift > 0)
     1606  {
     1607    x  = ( x +  ( 1 << ( iTempShift - 1 ) ) ) >> iTempShift;
     1608    y  = ( y +  ( 1 << ( iTempShift - 1 ) ) ) >> iTempShift;
     1609    xx = ( xx + ( 1 << ( iTempShift - 1 ) ) ) >> iTempShift;
     1610    xy = ( xy + ( 1 << ( iTempShift - 1 ) ) ) >> iTempShift;
     1611    iCountShift -= iTempShift;
     1612  }
     1613
     1614  iShift = 13;
     1615
     1616  if( iCountShift == 0 )
     1617  {
     1618    a = 1;
     1619    b = 0;
     1620    iShift = 0;
     1621  }
     1622  else
     1623  {
     1624    Int a1 = ( xy << iCountShift ) - y * x;
     1625    Int a2 = ( xx << iCountShift ) - x * x;             
     1626
     1627    {
     1628      const Int iShiftA2 = 6;
     1629      const Int iShiftA1 = 15;
     1630      const Int iAccuracyShift = 15;
     1631
     1632      Int iScaleShiftA2 = 0;
     1633      Int iScaleShiftA1 = 0;
     1634      Int a1s = a1;
     1635      Int a2s = a2;
     1636
     1637      iScaleShiftA1 = GetMSB( abs( a1 ) ) - iShiftA1;
     1638      iScaleShiftA2 = GetMSB( abs( a2 ) ) - iShiftA2; 
     1639
     1640      if( iScaleShiftA1 < 0 )
     1641      {
     1642        iScaleShiftA1 = 0;
     1643      }
     1644
     1645      if( iScaleShiftA2 < 0 )
     1646      {
     1647        iScaleShiftA2 = 0;
     1648      }
     1649
     1650      Int iScaleShiftA = iScaleShiftA2 + iAccuracyShift - iShift - iScaleShiftA1;
     1651
     1652      a2s = a2 >> iScaleShiftA2;
     1653
     1654      a1s = a1 >> iScaleShiftA1;
     1655
     1656      if (a2s >= 1)
     1657      {
     1658        a = a1s * m_uiaShift[ a2s - 1];
     1659      }
     1660      else
     1661      {
     1662        a = 0;
     1663      }
     1664
     1665      if( iScaleShiftA < 0 )
     1666      {
     1667        a = a << -iScaleShiftA;
     1668      }
     1669      else
     1670      {
     1671        a = a >> iScaleShiftA;
     1672      }
     1673
     1674      a = Clip3(-( 1 << 15 ), ( 1 << 15 ) - 1, a);
     1675
     1676      Int minA = -(1 << (6));
     1677      Int maxA = (1 << 6) - 1;
     1678      if( a <= maxA && a >= minA )
     1679      {
     1680        // do nothing
     1681      }
     1682      else
     1683      {
     1684        Short n = CountLeadingZerosOnes(a);
     1685        a = a >> (9-n);
     1686        iShift -= (9-n);
     1687      }
     1688
     1689      b = (  y - ( ( a * x ) >> iShift ) + ( 1 << ( iCountShift - 1 ) ) ) >> iCountShift;
     1690    }
     1691  }   
     1692}
     1693
     1694Void TComPrediction::xGetLLSICPredictionChroma(TComDataCU* pcCU, TComMv *pMv, TComPicYuv *pRefPic, Int &a, Int &b, Int &iShift, Int iChromaId)
     1695{
     1696  TComPicYuv *pRecPic = pcCU->getPic()->getPicYuvRec();
     1697  Pel *pRec = NULL, *pRef = NULL;
     1698  UInt uiWidth, uiHeight, uiTmpPartIdx;
     1699  Int iRecStride = pRecPic->getCStride(), iRefStride = pRefPic->getCStride();
     1700  Int iCUPelX, iCUPelY, iRefX, iRefY, iRefOffset;
     1701
     1702  iCUPelX = pcCU->getCUPelX() + g_auiRasterToPelX[g_auiZscanToRaster[pcCU->getZorderIdxInCU()]];
     1703  iCUPelY = pcCU->getCUPelY() + g_auiRasterToPelY[g_auiZscanToRaster[pcCU->getZorderIdxInCU()]];
     1704  iRefX   = iCUPelX + (pMv->getHor() >> 3);
     1705  iRefY   = iCUPelY + (pMv->getVer() >> 3);
     1706  uiWidth = pcCU->getWidth(0) >> 1;
     1707  uiHeight = pcCU->getHeight(0) >> 1;
     1708
     1709  Int i, j, iCountShift = 0;
     1710
     1711  // LLS parameters estimation -->
     1712
     1713  Int x = 0, y = 0, xx = 0, xy = 0;
     1714
     1715  if(pcCU->getPUAbove(uiTmpPartIdx, pcCU->getZorderIdxInCU()) && iCUPelY > 0 && iRefY > 0)
     1716  {
     1717    iRefOffset = ( pMv->getHor() >> 3 ) + ( pMv->getVer() >> 3 ) * iRefStride - iRefStride;
     1718    if (iChromaId == 0) // Cb
     1719    {
     1720      pRef = pRefPic->getCbAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) + iRefOffset;
     1721      pRec = pRecPic->getCbAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) - iRecStride;
     1722    }
     1723    else if (iChromaId == 1) // Cr
     1724    {
     1725      pRef = pRefPic->getCrAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) + iRefOffset;
     1726      pRec = pRecPic->getCrAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) - iRecStride;
     1727    }
     1728
     1729    for( j = 0; j < uiWidth; j++ )
     1730    {
     1731      x += pRef[j];
     1732      y += pRec[j];
     1733      xx += pRef[j] * pRef[j];
     1734      xy += pRef[j] * pRec[j];
     1735    }
     1736    iCountShift += g_aucConvertToBit[ uiWidth ] + 2;
     1737  }
     1738
     1739
     1740  if(pcCU->getPULeft(uiTmpPartIdx, pcCU->getZorderIdxInCU()) && iCUPelX > 0 && iRefX > 0)
     1741  {
     1742    iRefOffset = ( pMv->getHor() >> 3 ) + ( pMv->getVer() >> 3 ) * iRefStride - 1;
     1743    if (iChromaId == 0) // Cb
     1744    {
     1745      pRef = pRefPic->getCbAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) + iRefOffset;
     1746      pRec = pRecPic->getCbAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) - 1;
     1747    }
     1748    else if (iChromaId == 1) // Cr
     1749    {
     1750      pRef = pRefPic->getCrAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) + iRefOffset;
     1751      pRec = pRecPic->getCrAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() ) - 1;
     1752    }
     1753
     1754    for( i = 0; i < uiHeight; i++ )
     1755    {
     1756      x += pRef[0];
     1757      y += pRec[0];
     1758      xx += pRef[0] * pRef[0];
     1759      xy += pRef[0] * pRec[0];
     1760
     1761      pRef += iRefStride;
     1762      pRec += iRecStride;
     1763    }
     1764    iCountShift += iCountShift > 0 ? 1 : ( g_aucConvertToBit[ uiWidth ] + 2 );
     1765  }
     1766
     1767  Int iTempShift = ( g_uiBitDepth + g_uiBitIncrement ) + g_aucConvertToBit[ uiWidth ] + 3 - 15;
     1768
     1769  if(iTempShift > 0)
     1770  {
     1771    x  = ( x +  ( 1 << ( iTempShift - 1 ) ) ) >> iTempShift;
     1772    y  = ( y +  ( 1 << ( iTempShift - 1 ) ) ) >> iTempShift;
     1773    xx = ( xx + ( 1 << ( iTempShift - 1 ) ) ) >> iTempShift;
     1774    xy = ( xy + ( 1 << ( iTempShift - 1 ) ) ) >> iTempShift;
     1775    iCountShift -= iTempShift;
     1776  }
     1777
     1778  iShift = 13;
     1779
     1780  if( iCountShift == 0 )
     1781  {
     1782    a = 1;
     1783    b = 0;
     1784    iShift = 0;
     1785  }
     1786  else
     1787  {
     1788    Int a1 = ( xy << iCountShift ) - y * x;
     1789    Int a2 = ( xx << iCountShift ) - x * x;             
     1790
     1791    {
     1792      const Int iShiftA2 = 6;
     1793      const Int iShiftA1 = 15;
     1794      const Int iAccuracyShift = 15;
     1795
     1796      Int iScaleShiftA2 = 0;
     1797      Int iScaleShiftA1 = 0;
     1798      Int a1s = a1;
     1799      Int a2s = a2;
     1800
     1801      iScaleShiftA1 = GetMSB( abs( a1 ) ) - iShiftA1;
     1802      iScaleShiftA2 = GetMSB( abs( a2 ) ) - iShiftA2; 
     1803
     1804      if( iScaleShiftA1 < 0 )
     1805      {
     1806        iScaleShiftA1 = 0;
     1807      }
     1808
     1809      if( iScaleShiftA2 < 0 )
     1810      {
     1811        iScaleShiftA2 = 0;
     1812      }
     1813
     1814      Int iScaleShiftA = iScaleShiftA2 + iAccuracyShift - iShift - iScaleShiftA1;
     1815
     1816      a2s = a2 >> iScaleShiftA2;
     1817
     1818      a1s = a1 >> iScaleShiftA1;
     1819
     1820      if (a2s >= 1)
     1821      {
     1822        a = a1s * m_uiaShift[ a2s - 1];
     1823      }
     1824      else
     1825      {
     1826        a = 0;
     1827      }
     1828
     1829      if( iScaleShiftA < 0 )
     1830      {
     1831        a = a << -iScaleShiftA;
     1832      }
     1833      else
     1834      {
     1835        a = a >> iScaleShiftA;
     1836      }
     1837
     1838      a = Clip3(-( 1 << 15 ), ( 1 << 15 ) - 1, a);
     1839
     1840      Int minA = -(1 << (6));
     1841      Int maxA = (1 << 6) - 1;
     1842      if( a <= maxA && a >= minA )
     1843      {
     1844        // do nothing
     1845      }
     1846      else
     1847      {
     1848        Short n = CountLeadingZerosOnes(a);
     1849        a = a >> (9-n);
     1850        iShift -= (9-n);
     1851      }
     1852
     1853      b = (  y - ( ( a * x ) >> iShift ) + ( 1 << ( iCountShift - 1 ) ) ) >> iCountShift;
     1854    }
     1855  }   
     1856}
     1857#endif
    14451858/** Function for filtering intra DC predictor.
    14461859 * \param pSrc pointer to reconstructed sample array
     
    17042117{
    17052118  assert( uiWidth >= DMM_WEDGEMODEL_MIN_SIZE && uiWidth <= DMM_WEDGEMODEL_MAX_SIZE );
    1706   WedgeList* pacWedgeList = &g_aacWedgeLists[(g_aucConvertToBit[uiWidth])];
    17072119
    17082120  // get copy of co-located texture luma block
     
    17232135  UInt uiPredStride = cPredYuv.getStride();
    17242136
    1725   // regular wedge search
     2137  // wedge search
    17262138  TComWedgeDist cWedgeDist;
    17272139  UInt uiBestDist = MAX_UINT;
     
    17292141  Int  iDC1 = 0;
    17302142  Int  iDC2 = 0;
    1731 
     2143  WedgeList* pacWedgeList = &g_aacWedgeLists[(g_aucConvertToBit[uiWidth])];
     2144
     2145#if HHIQC_DMMFASTSEARCH_B0039
     2146  TComPic*      pcPicTex = pcCU->getSlice()->getTexturePic();
     2147  TComDataCU* pcColTexCU = pcPicTex->getCU(pcCU->getAddr());
     2148  UInt      uiTexPartIdx = pcCU->getZorderIdxInCU() + uiAbsPartIdx;
     2149  Int   uiColTexIntraDir = pcColTexCU->isIntra( uiTexPartIdx ) ? pcColTexCU->getLumaIntraDir( uiTexPartIdx ) : 255;
     2150
     2151  std::vector< std::vector<UInt> > pauiWdgLstSz = g_aauiWdgLstM3[g_aucConvertToBit[uiWidth]];
     2152  if( uiColTexIntraDir > DC_IDX && uiColTexIntraDir < 35 )
     2153  {
     2154    std::vector<UInt>* pauiWdgLst = &pauiWdgLstSz[uiColTexIntraDir-2];
     2155    for( UInt uiIdxW = 0; uiIdxW < pauiWdgLst->size(); uiIdxW++ )
     2156    {
     2157      UInt uiIdx     =   pauiWdgLst->at(uiIdxW);
     2158      calcWedgeDCs       ( &(pacWedgeList->at(uiIdx)), piRefBlkY, uiWidth,      iDC1, iDC2 );
     2159      assignWedgeDCs2Pred( &(pacWedgeList->at(uiIdx)), piPred,    uiPredStride, iDC1, iDC2 );
     2160
     2161      UInt uiActDist = cWedgeDist.getDistPart( piPred, uiPredStride, piRefBlkY, uiWidth, uiWidth, uiHeight, WedgeDist_SAD );
     2162
     2163      if( uiActDist < uiBestDist || uiBestDist == MAX_UINT )
     2164      {
     2165        uiBestDist   = uiActDist;
     2166        uiBestTabIdx = uiIdx;
     2167      }
     2168    }
     2169  }
     2170  else
     2171  {
     2172    WedgeNodeList* pacWedgeNodeList = &g_aacWedgeNodeLists[(g_aucConvertToBit[uiWidth])];
     2173    UInt uiBestNodeDist = MAX_UINT;
     2174    UInt uiBestNodeId   = 0;
     2175    for( UInt uiNodeId = 0; uiNodeId < pacWedgeNodeList->size(); uiNodeId++ )
     2176    {
     2177      calcWedgeDCs       ( &(pacWedgeList->at(pacWedgeNodeList->at(uiNodeId).getPatternIdx())), piRefBlkY, uiWidth,      iDC1, iDC2 );
     2178      assignWedgeDCs2Pred( &(pacWedgeList->at(pacWedgeNodeList->at(uiNodeId).getPatternIdx())), piPred,    uiPredStride, iDC1, iDC2 );
     2179
     2180      UInt uiActDist = cWedgeDist.getDistPart( piPred, uiPredStride, piRefBlkY, uiWidth, uiWidth, uiHeight, WedgeDist_SAD );
     2181
     2182      if( uiActDist < uiBestNodeDist || uiBestNodeDist == MAX_UINT )
     2183      {
     2184        uiBestNodeDist = uiActDist;
     2185        uiBestNodeId   = uiNodeId;
     2186      }
     2187    }
     2188
     2189    // refinement
     2190    uiBestDist   = uiBestNodeDist;
     2191    uiBestTabIdx = pacWedgeNodeList->at(uiBestNodeId).getPatternIdx();
     2192    for( UInt uiRefId = 0; uiRefId < NUM_WEDGE_REFINES; uiRefId++ )
     2193    {
     2194      if( pacWedgeNodeList->at(uiBestNodeId).getRefineIdx( uiRefId ) != NO_IDX )
     2195      {
     2196        calcWedgeDCs       ( &(pacWedgeList->at(pacWedgeNodeList->at(uiBestNodeId).getRefineIdx( uiRefId ))), piRefBlkY, uiWidth,      iDC1, iDC2 );
     2197        assignWedgeDCs2Pred( &(pacWedgeList->at(pacWedgeNodeList->at(uiBestNodeId).getRefineIdx( uiRefId ))), piPred,    uiPredStride, iDC1, iDC2 );
     2198
     2199        UInt uiActDist = cWedgeDist.getDistPart( piPred, uiPredStride, piRefBlkY, uiWidth, uiWidth, uiHeight, WedgeDist_SAD );
     2200
     2201        if( uiActDist < uiBestDist || uiBestDist == MAX_UINT )
     2202        {
     2203          uiBestDist   = uiActDist;
     2204          uiBestTabIdx = pacWedgeNodeList->at(uiBestNodeId).getRefineIdx( uiRefId );
     2205        }
     2206      }
     2207    }
     2208  }
     2209#else
    17322210  for( UInt uiIdx = 0; uiIdx < pacWedgeList->size(); uiIdx++ )
    17332211  {
     
    17432221    }
    17442222  }
     2223#endif
    17452224
    17462225  cPredYuv.destroy();
Note: See TracChangeset for help on using the changeset viewer.