Changeset 578 in 3DVCSoftware


Ignore:
Timestamp:
16 Aug 2013, 14:40:59 (11 years ago)
Author:
ntt
Message:

Integration of JCT3V-E0141

Location:
branches/HTM-DEV-2.0-dev1-NTT
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-DEV-2.0-dev1-NTT/source/Lib/TLibCommon/TComPrediction.cpp

    r576 r578  
    15351535#if NTT_VSP_COMMON_E0207_E0208
    15361536// not fully support iRatioTxtPerDepth* != 1
    1537 Void TComPrediction::xGetVirtualDepth( TComDataCU *pcCU, TComPicYuv *pcPicRefDepth, TComMv *pcMv, UInt partAddr, Int iWidth, Int iHeight, TComYuv *pcYuvDepth, Int iRatioTxtPerDepthX, Int iRatioTxtPerDepthY )
     1537Void TComPrediction::xGetVirtualDepth( TComDataCU *cu, TComPicYuv *picRefDepth, TComMv *mv, UInt partAddr, Int width, Int height, TComYuv *yuvDepth, Int ratioTxtPerDepthX, Int ratioTxtPerDepthY )
    15381538{
    15391539  Int nTxtPerDepthX = H_3D_VSP_BLOCKSIZE;
    15401540  Int nTxtPerDepthY = H_3D_VSP_BLOCKSIZE;
    15411541
    1542   Int refDepStride = pcPicRefDepth->getStride();
     1542  Int refDepStride = picRefDepth->getStride();
    15431543
    15441544#if NTT_VSP_VECTOR_CLIP_E0208
    15451545
    1546   Int refDepOffset = ( (pcMv->getHor()+2) >> 2 ) + ( (pcMv->getVer()+2) >> 2 ) * refDepStride;
    1547 
    1548 #if 1 // // iRatioTxtPerDepthX==1 && iRatioTxtPerDepthY==1
    1549   Pel *refDepth    = pcPicRefDepth->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + partAddr );
    1550 #else
    1551   Pel *refDepth    = pcPicRefDepth->getLumaAddr( );
    1552   Int iPosX, iPosY;
    1553   pcCU->getPic()->getPicYuvRec()->getTopLeftSamplePos( pcCU->getAddr(), pcCU->getZorderIdxInCU() + partAddr, iPosX, iPosY ); // top-left position in texture
    1554   iPosX /= iRatioTxtPerDepthX; // texture position -> depth postion
    1555   iPosY /= iRatioTxtPerDepthY;
    1556   refDepOffset += iPosX + iPosY * refDepStride;
    1557 
    1558   iWidth  /= iRatioTxtPerDepthX; // texture size -> depth size
    1559   iHeight /= iRatioTxtPerDepthY;
    1560 #endif
     1546  Int refDepOffset  = ( (mv->getHor()+2) >> 2 ) + ( (mv->getVer()+2) >> 2 ) * refDepStride;
     1547  Pel *refDepth     = picRefDepth->getLumaAddr( cu->getAddr(), cu->getZorderIdxInCU() + partAddr );
     1548
     1549  if( ratioTxtPerDepthX!=1 || ratioTxtPerDepthY!=1 )
     1550  {
     1551    Int posX, posY;
     1552    refDepth    = picRefDepth->getLumaAddr( );
     1553    cu->getPic()->getPicYuvRec()->getTopLeftSamplePos( cu->getAddr(), cu->getZorderIdxInCU() + partAddr, posX, posY ); // top-left position in texture
     1554    posX /= ratioTxtPerDepthX; // texture position -> depth postion
     1555    posY /= ratioTxtPerDepthY;
     1556    refDepOffset += posX + posY * refDepStride;
     1557
     1558    width  /= ratioTxtPerDepthX; // texture size -> depth size
     1559    height /= ratioTxtPerDepthY;
     1560  }
    15611561
    15621562  refDepth += refDepOffset;
     
    15641564#else // NTT_VSP_VECTOR_CLIP_E0208
    15651565
    1566   Int widthDepth = pcPicRefDepth->getWidth();
    1567   Int heightDepth = pcPicRefDepth->getHeight();
    1568   Int iPosX, iPosY;
    1569   pcCU->getPic()->getPicYuvRec()->getTopLeftSamplePos( pcCU->getAddr(), pcCU->getZorderIdxInCU() + partAddr, iPosX, iPosY ); // top-left position in texture
    1570   iPosX /= iRatioTxtPerDepthX; // texture position -> depth postion
    1571   iPosY /= iRatioTxtPerDepthY;
     1566  Int widthDepth = picRefDepth->getWidth();
     1567  Int heightDepth = picRefDepth->getHeight();
     1568  Int posX, posY;
     1569  cu->getPic()->getPicYuvRec()->getTopLeftSamplePos( cu->getAddr(), cu->getZorderIdxInCU() + partAddr, posX, posY ); // top-left position in texture
     1570  posX /= ratioTxtPerDepthX; // texture position -> depth postion
     1571  posY /= ratioTxtPerDepthY;
    15721572 
    1573   iPosX = Clip3(0, widthDepth-iWidth,   iPosX + ((pcMv->getHor()+2)>>2));
    1574   iPosY = Clip3(0, heightDepth-iHeight, iPosY + ((pcMv->getVer()+2)>>2));
     1573  posX = Clip3(0, widthDepth-width,   posX + ((mv->getHor()+2)>>2));
     1574  posY = Clip3(0, heightDepth-height, posY + ((mv->getVer()+2)>>2));
    15751575 
    1576   Pel *refDepth  = pcPicRefDepth->getLumaAddr() + iPosX + iPosY * refDepStride;
     1576  Pel *refDepth  = picRefDepth->getLumaAddr() + posX + posY * refDepStride;
    15771577
    15781578#endif // NTT_VSP_VECTOR_CLIP_E0208
    15791579
    1580   Int depStride = pcYuvDepth->getStride();
    1581   Pel *depth = pcYuvDepth->getLumaAddr();
     1580  Int depStride = yuvDepth->getStride();
     1581  Pel *depth = yuvDepth->getLumaAddr();
    15821582
    15831583#if NTT_VSP_ADAPTIVE_SPLIT_E0207
    15841584
    1585   if( iWidth<8 || iHeight<8 )
     1585  if( width<8 || height<8 )
    15861586  { // no split
    1587     Int rightOffset = iWidth - 1;
     1587    Int rightOffset = width - 1;
    15881588    Int depStrideBlock = depStride * nTxtPerDepthY;
    15891589    Pel *refDepthTop = refDepth;
    1590     Pel *refDepthBot = refDepthTop + (iHeight-1)*refDepStride;
     1590    Pel *refDepthBot = refDepthTop + (height-1)*refDepStride;
    15911591
    15921592    Pel maxDepth = refDepthTop[0] > refDepthBot[0] ? refDepthTop[0] : refDepthBot[0];
    1593     if( maxDepth < refDepthTop[rightOffset] ) maxDepth = refDepthTop[rightOffset];
    1594     if( maxDepth < refDepthBot[rightOffset] ) maxDepth = refDepthBot[rightOffset];
    1595 
    1596     for( Int sY=0; sY<iHeight; sY+=nTxtPerDepthY )
    1597     {
    1598       for( Int sX=0; sX<iWidth; sX+=nTxtPerDepthX )
     1593    if( maxDepth < refDepthTop[rightOffset] ) { maxDepth = refDepthTop[rightOffset]; }
     1594    if( maxDepth < refDepthBot[rightOffset] ) { maxDepth = refDepthBot[rightOffset]; }
     1595
     1596    for( Int sY=0; sY<height; sY+=nTxtPerDepthY )
     1597    {
     1598      for( Int sX=0; sX<width; sX+=nTxtPerDepthX )
    15991599      {
    16001600        depth[sX] = maxDepth;
     
    16231623    refDepthTmp[3] = refDepthTmp[1] + refDepStrideSubBlock;
    16241624
    1625     for( Int y=0; y<iHeight; y+=blocksize )
    1626     {
    1627       for( Int x=0; x<iWidth; x+=blocksize )
     1625    for( Int y=0; y<height; y+=blocksize )
     1626    {
     1627      for( Int x=0; x<width; x+=blocksize )
    16281628      {
    16291629        Bool ULvsBR = false, URvsBL = false;
     
    16351635        { // 4x8
    16361636          repDepth4x8[0] = refDepthTmp[0][x+offset[0]] > refDepthTmp[0][x+offset[1]] ? refDepthTmp[0][x+offset[0]] : refDepthTmp[0][x+offset[1]];
    1637           if( repDepth4x8[0] < refDepthTmp[3][x+offset[0]] ) repDepth4x8[0] = refDepthTmp[3][x+offset[0]];
    1638           if( repDepth4x8[0] < refDepthTmp[3][x+offset[1]] ) repDepth4x8[0] = refDepthTmp[3][x+offset[1]];
     1637          if( repDepth4x8[0] < refDepthTmp[3][x+offset[0]] )
     1638          {
     1639            repDepth4x8[0] = refDepthTmp[3][x+offset[0]];
     1640          }
     1641          if( repDepth4x8[0] < refDepthTmp[3][x+offset[1]] )
     1642          {
     1643            repDepth4x8[0] = refDepthTmp[3][x+offset[1]];
     1644          }
    16391645          repDepth4x8[1] = refDepthTmp[0][x+offset[2]] > refDepthTmp[0][x+offset[3]] ? refDepthTmp[0][x+offset[2]] : refDepthTmp[0][x+offset[3]];
    1640           if( repDepth4x8[1] < refDepthTmp[3][x+offset[2]] ) repDepth4x8[1] = refDepthTmp[3][x+offset[2]];
    1641           if( repDepth4x8[1] < refDepthTmp[3][x+offset[3]] ) repDepth4x8[1] = refDepthTmp[3][x+offset[3]];
     1646          if( repDepth4x8[1] < refDepthTmp[3][x+offset[2]] )
     1647          {
     1648            repDepth4x8[1] = refDepthTmp[3][x+offset[2]];
     1649          }
     1650          if( repDepth4x8[1] < refDepthTmp[3][x+offset[3]] )
     1651          {
     1652            repDepth4x8[1] = refDepthTmp[3][x+offset[3]];
     1653          }
    16421654
    16431655          depthTmp = &depth[x];
     
    16631675        { // 8x4
    16641676          repDepth8x4[0] = refDepthTmp[0][x+offset[0]] > refDepthTmp[0][x+offset[3]] ? refDepthTmp[0][x+offset[0]] : refDepthTmp[0][x+offset[3]];
    1665           if( repDepth8x4[0] < refDepthTmp[1][x+offset[0]] ) repDepth8x4[0] = refDepthTmp[1][x+offset[0]];
    1666           if( repDepth8x4[0] < refDepthTmp[1][x+offset[3]] ) repDepth8x4[0] = refDepthTmp[1][x+offset[3]];
     1677          if( repDepth8x4[0] < refDepthTmp[1][x+offset[0]] )
     1678          {
     1679            repDepth8x4[0] = refDepthTmp[1][x+offset[0]];
     1680          }
     1681          if( repDepth8x4[0] < refDepthTmp[1][x+offset[3]] )
     1682          {
     1683            repDepth8x4[0] = refDepthTmp[1][x+offset[3]];
     1684          }
    16671685          repDepth8x4[1] = refDepthTmp[2][x+offset[0]] > refDepthTmp[2][x+offset[3]] ? refDepthTmp[2][x+offset[0]] : refDepthTmp[2][x+offset[3]];
    1668           if( repDepth8x4[1] < refDepthTmp[3][x+offset[0]] ) repDepth8x4[1] = refDepthTmp[3][x+offset[0]];
    1669           if( repDepth8x4[1] < refDepthTmp[3][x+offset[3]] ) repDepth8x4[1] = refDepthTmp[3][x+offset[3]];
     1686          if( repDepth8x4[1] < refDepthTmp[3][x+offset[0]] )
     1687          {
     1688            repDepth8x4[1] = refDepthTmp[3][x+offset[0]];
     1689          }
     1690          if( repDepth8x4[1] < refDepthTmp[3][x+offset[3]] )
     1691          {
     1692            repDepth8x4[1] = refDepthTmp[3][x+offset[3]];
     1693          }
    16701694         
    16711695          depthTmp = &depth[x];
     
    17041728  Pel *refDepthBot = refDepthTop + (nTxtPerDepthY-1)*refDepStride;
    17051729
    1706   for( Int y=0; y<iHeight; y+= nTxtPerDepthY )
    1707   {
    1708     for( Int x=0; x<iWidth; x+=nTxtPerDepthX )
     1730  for( Int y=0; y<height; y+= nTxtPerDepthY )
     1731  {
     1732    for( Int x=0; x<width; x+=nTxtPerDepthX )
    17091733    {
    17101734      Pel maxDepth = refDepthTop[x] > refDepthBot[x] ? refDepthTop[x] : refDepthBot[x];
    17111735
    1712       if( maxDepth < refDepthTop[x+rightOffset] ) maxDepth = refDepthTop[x+rightOffset];
    1713       if( maxDepth < refDepthBot[x+rightOffset] ) maxDepth = refDepthBot[x+rightOffset];
     1736      if( maxDepth < refDepthTop[x+rightOffset] )
     1737      {
     1738        maxDepth = refDepthTop[x+rightOffset];
     1739      }
     1740      if( maxDepth < refDepthBot[x+rightOffset] )
     1741      {
     1742        maxDepth = refDepthBot[x+rightOffset];
     1743      }
    17141744
    17151745      depth[x] = maxDepth;
     
    17241754}
    17251755
    1726 Void TComPrediction::xPredInterLumaBlkFromDM( TComDataCU *pcCU, TComPicYuv *pcPicRef, TComYuv *pcYuvDepth, Int* pShiftLUT, TComMv *pcMv, UInt partAddr, Int iWidth, Int iHeight, Bool bIsDepth, TComYuv *&pcYuvDst, Bool bIsBi )
     1756Void TComPrediction::xPredInterLumaBlkFromDM( TComDataCU *cu, TComPicYuv *picRef, TComYuv *yuvDepth, Int* shiftLUT, TComMv *mv, UInt partAddr, Int width, Int height, Bool isDepth, TComYuv *&yuvDst, Bool isBi )
    17271757{
    17281758  Int nTxtPerDepthX = H_3D_VSP_BLOCKSIZE;
    17291759  Int nTxtPerDepthY = H_3D_VSP_BLOCKSIZE;
    17301760 
    1731   Int refStride = pcPicRef->getStride();
    1732   Int dstStride = pcYuvDst->getStride();
    1733   Int depStride = pcYuvDepth->getStride();
     1761  Int refStride = picRef->getStride();
     1762  Int dstStride = yuvDst->getStride();
     1763  Int depStride = yuvDepth->getStride();
    17341764  Int refStrideBlock = refStride  * nTxtPerDepthY;
    17351765  Int dstStrideBlock = dstStride * nTxtPerDepthY;
    17361766  Int depStrideBlock = depStride * nTxtPerDepthY;
    17371767
    1738   Pel *ref    = pcPicRef->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + partAddr );
    1739   Pel *dst    = pcYuvDst->getLumaAddr(partAddr);
    1740   Pel *depth  = pcYuvDepth->getLumaAddr();
     1768  Pel *ref    = picRef->getLumaAddr( cu->getAddr(), cu->getZorderIdxInCU() + partAddr );
     1769  Pel *dst    = yuvDst->getLumaAddr(partAddr);
     1770  Pel *depth  = yuvDepth->getLumaAddr();
    17411771 
    17421772#if !(NTT_VSP_DC_BUGFIX_E0208)
    1743   Int widthLuma = pcPicRef->getWidth();
    1744   Int iPosX, iPosY;
    1745   pcCU->getPic()->getPicYuvRec()->getTopLeftSamplePos( pcCU->getAddr(), pcCU->getZorderIdxInCU() + partAddr, iPosX, iPosY ); // top-left position in texture
     1773  Int widthLuma = picRef->getWidth();
     1774  Int posX, posY;
     1775  cu->getPic()->getPicYuvRec()->getTopLeftSamplePos( cu->getAddr(), cu->getZorderIdxInCU() + partAddr, posX, posY ); // top-left position in texture
    17461776#endif
    17471777
     
    17491779#if H_3D_VSP_CONSTRAINED
    17501780  //get LUT based horizontal reference range
    1751   Int range = xGetConstrainedSize(iWidth, iHeight);
     1781  Int range = xGetConstrainedSize(width, height);
    17521782
    17531783  // The minimum depth value
     
    17561786
    17571787  Pel* depthTemp, *depthInitial=depth;
    1758   for (Int yTxt = 0; yTxt < iHeight; yTxt++)
    1759   {
    1760     for (Int xTxt = 0; xTxt < iWidth; xTxt++)
     1788  for (Int yTxt = 0; yTxt < height; yTxt++)
     1789  {
     1790    for (Int xTxt = 0; xTxt < width; xTxt++)
    17611791    {
    17621792      if (depthPosX+xTxt < widthDepth)
     1793      {
    17631794        depthTemp = depthInitial + xTxt;
     1795      }
    17641796      else
     1797      {
    17651798        depthTemp = depthInitial + (widthDepth - depthPosX - 1);
    1766 
    1767       Int disparity = pShiftLUT[ *depthTemp ]; // << iShiftPrec;
     1799      }
     1800
     1801      Int disparity = shiftLUT[ *depthTemp ]; // << iShiftPrec;
    17681802      Int disparityInt = disparity >> 2;
    17691803
     
    17711805      {
    17721806        if (minRelativePos > disparityInt+xTxt)
    1773             minRelativePos = disparityInt+xTxt;
     1807        {
     1808          minRelativePos = disparityInt+xTxt;
     1809        }
    17741810      }
    17751811      else
    17761812      {
    17771813        if (maxRelativePos < disparityInt+xTxt)
    1778             maxRelativePos = disparityInt+xTxt;
     1814        {
     1815          maxRelativePos = disparityInt+xTxt;
     1816        }
    17791817      }
    17801818    }
    17811819    if (depthPosY+yTxt < heightDepth)
     1820    {
    17821821      depthInitial = depthInitial + depStride;
    1783   }
    1784 
    1785   Int disparity_tmp = pShiftLUT[ *depth ]; // << iShiftPrec;
     1822    }
     1823  }
     1824
     1825  Int disparity_tmp = shiftLUT[ *depth ]; // << iShiftPrec;
    17861826  if (disparity_tmp <= 0)
     1827  {
    17871828    maxRelativePos = minRelativePos + range -1 ;
     1829  }
    17881830  else
     1831  {
    17891832    minRelativePos = maxRelativePos - range +1 ;
     1833  }
    17901834#endif
    17911835#endif // H_3D_VSP_BLOCKSIZE == 1
    17921836
    1793   TComMv cDv(0, 0);
    1794 
    1795   for ( Int yTxt = 0; yTxt < iHeight; yTxt += nTxtPerDepthY )
    1796   {
    1797     for ( Int xTxt = 0; xTxt < iWidth; xTxt += nTxtPerDepthX )
     1837  TComMv dv(0, 0);
     1838
     1839  for ( Int yTxt = 0; yTxt < height; yTxt += nTxtPerDepthY )
     1840  {
     1841    for ( Int xTxt = 0; xTxt < width; xTxt += nTxtPerDepthX )
    17981842    {
    17991843      Pel repDepth = depth[ xTxt ];
    18001844      assert( repDepth >= 0 && repDepth <= 255 );
    18011845
    1802       Int disparity = pShiftLUT[ repDepth ]; // remove << iShiftPrec ??
     1846      Int disparity = shiftLUT[ repDepth ]; // remove << iShiftPrec ??
    18031847      Int xFrac = disparity & 0x3;
    18041848
    18051849#if NTT_VSP_DC_BUGFIX_E0208
    18061850
    1807       cDv.setHor( disparity );
    1808       pcCU->clipMv( cDv );
    1809 
    1810       Int refOffset = xTxt + (cDv.getHor() >> 2);
     1851      dv.setHor( disparity );
     1852      cu->clipMv( dv );
     1853
     1854      Int refOffset = xTxt + (dv.getHor() >> 2);
    18111855     
    18121856#if H_3D_VSP_CONSTRAINED
    18131857      if(refOffset<minRelativePos || refOffset>maxRelativePos)
     1858      {
    18141859        xFrac = 0;
     1860      }
    18151861      refOffset = Clip3(minRelativePos, maxRelativePos, refOffset);
    18161862#endif
    18171863
    18181864      assert( ref[refOffset] >= 0 && ref[refOffset]<= 255 );
    1819       m_if.filterHorLuma( &ref[refOffset], refStride, &dst[xTxt], dstStride, nTxtPerDepthX, nTxtPerDepthY, xFrac, !bIsBi );
     1865      m_if.filterHorLuma( &ref[refOffset], refStride, &dst[xTxt], dstStride, nTxtPerDepthX, nTxtPerDepthY, xFrac, !isBi );
    18201866
    18211867#else // NTT_VSP_DC_BUGFIX_E0208
     
    18261872#if H_3D_VSP_CONSTRAINED
    18271873        if(refOffset<minRelativePos || refOffset>maxRelativePos)
     1874        {
    18281875          xFrac = 0;
     1876        }
    18291877        refOffset = Clip3(minRelativePos, maxRelativePos, refOffset);
    18301878#endif
    1831         Int absX  = iPosX + refOffset;
     1879        Int absX  = posX + refOffset;
    18321880
    18331881        if (xFrac == 0)
     1882        {
    18341883          absX = Clip3(0, widthLuma-1, absX);
     1884        }
    18351885        else
     1886        {
    18361887          absX = Clip3(4, widthLuma-5, absX);
    1837 
    1838         refOffset = absX - iPosX;
     1888        }
     1889
     1890        refOffset = absX - posX;
    18391891        assert( ref[refOffset] >= 0 && ref[refOffset] <= 255 );
    18401892       
    1841         m_if.filterHorLuma( &ref[refOffset], refStride, &dst[xTxt+j], dstStride, 1, nTxtPerDepthY, xFrac, !bIsBi );
     1893        m_if.filterHorLuma( &ref[refOffset], refStride, &dst[xTxt+j], dstStride, 1, nTxtPerDepthY, xFrac, !isBi );
    18421894      }
    18431895
     
    18521904}
    18531905
    1854 Void TComPrediction::xPredInterChromaBlkFromDM  ( TComDataCU *pcCU, TComPicYuv *pcPicRef, TComYuv *pcYuvDepth, Int* pShiftLUT, TComMv *pcMv, UInt partAddr, Int iWidth, Int iHeight, Bool bIsDepth, TComYuv *&pcYuvDst, Bool bIsBi )
     1906Void TComPrediction::xPredInterChromaBlkFromDM  ( TComDataCU *cu, TComPicYuv *picRef, TComYuv *yuvDepth, Int* shiftLUT, TComMv *mv, UInt partAddr, Int width, Int height, Bool isDepth, TComYuv *&yuvDst, Bool isBi )
    18551907{
    18561908#if (H_3D_VSP_BLOCKSIZE==1)
     
    18621914#endif
    18631915
    1864   Int refStride = pcPicRef->getCStride();
    1865   Int dstStride = pcYuvDst->getCStride();
    1866   Int depStride = pcYuvDepth->getStride();
     1916  Int refStride = picRef->getCStride();
     1917  Int dstStride = yuvDst->getCStride();
     1918  Int depStride = yuvDepth->getStride();
    18671919  Int refStrideBlock = refStride * nTxtPerDepthY;
    18681920  Int dstStrideBlock = dstStride * nTxtPerDepthY;
    18691921  Int depStrideBlock = depStride * (nTxtPerDepthY<<1);
    18701922
    1871   Pel *refCb  = pcPicRef->getCbAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + partAddr );
    1872   Pel *refCr  = pcPicRef->getCrAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + partAddr );
    1873   Pel *dstCb  = pcYuvDst->getCbAddr(partAddr);
    1874   Pel *dstCr  = pcYuvDst->getCrAddr(partAddr);
    1875   Pel *depth  = pcYuvDepth->getLumaAddr();
    1876 
    1877 #if 0 // not necessary??
    1878   if (bIsDepth)
    1879   {
    1880     Pel val = 128;
    1881     iHeight >>=1; // luma to chroma
    1882     iWidth >>=1;
    1883     if ( bIsBi )
    1884     {
    1885       Int shift = IF_INTERNAL_PREC - ( g_uiBitDepth + g_uiBitIncrement );
    1886       val = (val << shift) - (Pel)IF_INTERNAL_OFFS;
    1887     }
    1888     for (Int y = 0; y < iHeight; y++)
    1889     {
    1890       for (Int x = 0; x < iWidth; x++)
    1891       {
    1892         dstCb[x] = val;
    1893         dstCr[x] = val;
    1894       }
    1895       dstCb += dstStride;
    1896       dstCr += dstStride;
    1897     }
    1898     return;
    1899   }
    1900 #endif
     1923  Pel *refCb  = picRef->getCbAddr( cu->getAddr(), cu->getZorderIdxInCU() + partAddr );
     1924  Pel *refCr  = picRef->getCrAddr( cu->getAddr(), cu->getZorderIdxInCU() + partAddr );
     1925  Pel *dstCb  = yuvDst->getCbAddr(partAddr);
     1926  Pel *dstCr  = yuvDst->getCrAddr(partAddr);
     1927  Pel *depth  = yuvDepth->getLumaAddr();
    19011928
    19021929#if !(NTT_VSP_DC_BUGFIX_E0208)
    1903   Int widthChroma = pcPicRef->getWidth() >> 1;
    1904   Int iPosX, iPosY;
    1905   pcCU->getPic()->getPicYuvRec()->getTopLeftSamplePos( pcCU->getAddr(), pcCU->getZorderIdxInCU() + partAddr, iPosX, iPosY ); // top-left position in texture
    1906   iPosX >>= 1;
    1907   iPosY >>= 1;
     1930  Int widthChroma = picRef->getWidth() >> 1;
     1931  Int posX, posY;
     1932  cu->getPic()->getPicYuvRec()->getTopLeftSamplePos( cu->getAddr(), cu->getZorderIdxInCU() + partAddr, posX, posY ); // top-left position in texture
     1933  posX >>= 1;
     1934  posY >>= 1;
    19081935#endif
    19091936 
     
    19111938#if H_3D_VSP_CONSTRAINED
    19121939  //get LUT based horizontal reference range
    1913   Int range = xGetConstrainedSize(iWidth, iHeight, false);
     1940  Int range = xGetConstrainedSize(width, height, false);
    19141941
    19151942  // The minimum depth value
     
    19181945
    19191946  Int depthTmp;
    1920   for (Int yTxt=0; yTxt<iHeight; yTxt++)
    1921   {
    1922     for (Int xTxt=0; xTxt<iWidth; xTxt++)
    1923     {
    1924       depthTmp = m_pDepthBlock[xTxt+yTxt*dW];
    1925       Int disparity = pShiftLUT[ depthTmp ]; // << iShiftPrec;
     1947  for (Int yTxt=0; yTxt<height; yTxt++)
     1948  {
     1949    for (Int xTxt=0; xTxt<width; xTxt++)
     1950    {
     1951      depthTmp = m_pDepthBlock[xTxt+yTxt*width];
     1952      Int disparity = shiftLUT[ depthTmp ]; // << iShiftPrec;
    19261953      Int disparityInt = disparity >> 3;//in chroma resolution
    19271954
     
    19291956      {
    19301957        if (minRelativePos > disparityInt+xTxt)
    1931             minRelativePos = disparityInt+xTxt;
     1958        {
     1959          minRelativePos = disparityInt+xTxt;
     1960        }
    19321961      }
    19331962      else
    19341963      {
    19351964        if (maxRelativePos < disparityInt+xTxt)
    1936             maxRelativePos = disparityInt+xTxt;
     1965        {
     1966          maxRelativePos = disparityInt+xTxt;
     1967        }
    19371968      }
    19381969    }
     
    19401971
    19411972  depthTmp = m_pDepthBlock[0];
    1942   Int disparity_tmp = pShiftLUT[ depthTmp ]; // << iShiftPrec;
     1973  Int disparity_tmp = shiftLUT[ depthTmp ]; // << iShiftPrec;
    19431974  if ( disparity_tmp < 0 )
     1975  {
    19441976    maxRelativePos = minRelativePos + range - 1;
     1977  }
    19451978  else
     1979  {
    19461980    minRelativePos = maxRelativePos - range + 1;
     1981  }
    19471982
    19481983#endif // H_3D_VSP_CONSTRAINED
    19491984#endif // H_3D_VSP_BLOCKSIZE == 1
    19501985
    1951   TComMv cDv(0, 0);
     1986  TComMv dv(0, 0);
    19521987  // luma size -> chroma size
    1953   iHeight >>= 1;
    1954   iWidth  >>= 1;
    1955 
    1956   for ( Int yTxt = 0; yTxt < iHeight; yTxt += nTxtPerDepthY )
    1957   {
    1958     for ( Int xTxt = 0; xTxt < iWidth; xTxt += nTxtPerDepthX )
     1988  height >>= 1;
     1989  width  >>= 1;
     1990
     1991  for ( Int yTxt = 0; yTxt < height; yTxt += nTxtPerDepthY )
     1992  {
     1993    for ( Int xTxt = 0; xTxt < width; xTxt += nTxtPerDepthX )
    19591994    {
    19601995      Pel repDepth = depth[ xTxt<<1 ];
    19611996      assert( repDepth >= 0 && repDepth <= 255 );
    19621997
    1963       Int disparity = pShiftLUT[ repDepth ]; // remove << iShiftPrec;
     1998      Int disparity = shiftLUT[ repDepth ]; // remove << iShiftPrec;
    19641999      Int xFrac = disparity & 0x7;
    19652000     
    19662001#if NTT_VSP_DC_BUGFIX_E0208
    19672002
    1968       cDv.setHor( disparity );
    1969       pcCU->clipMv( cDv );
    1970 
    1971       Int refOffset = xTxt + (cDv.getHor() >> 3);
     2003      dv.setHor( disparity );
     2004      cu->clipMv( dv );
     2005
     2006      Int refOffset = xTxt + (dv.getHor() >> 3);
    19722007
    19732008#if H_3D_VSP_CONSTRAINED
    19742009      if(refOffset<minRelativePos || refOffset>maxRelativePos)
     2010      {
    19752011        xFrac = 0;
     2012      }
    19762013      refOffset = Clip3(minRelativePos, maxRelativePos, refOffset);
    19772014#endif
     
    19802017      assert( refCr[refOffset] >= 0 && refCr[refOffset]<= 255 );
    19812018
    1982       m_if.filterHorChroma( &refCb[refOffset], refStride, &dstCb[xTxt], dstStride, nTxtPerDepthX, nTxtPerDepthY, xFrac, !bIsBi );
    1983       m_if.filterHorChroma( &refCr[refOffset], refStride, &dstCr[xTxt], dstStride, nTxtPerDepthX, nTxtPerDepthY, xFrac, !bIsBi );
     2019      m_if.filterHorChroma( &refCb[refOffset], refStride, &dstCb[xTxt], dstStride, nTxtPerDepthX, nTxtPerDepthY, xFrac, !isBi );
     2020      m_if.filterHorChroma( &refCr[refOffset], refStride, &dstCr[xTxt], dstStride, nTxtPerDepthX, nTxtPerDepthY, xFrac, !isBi );
    19842021
    19852022#else // NTT_VSP_DC_BUGFIX_E0208
     
    19902027#if H_3D_VSP_CONSTRAINED
    19912028        if(refOffset<minRelativePos || refOffset>maxRelativePos)
     2029        {
    19922030          xFrac = 0;
     2031        }
    19932032        refOffset = Clip3(minRelativePos, maxRelativePos, refOffset);
    19942033#endif
    1995         Int absX  = iPosX + refOffset;
     2034        Int absX  = posX + refOffset;
    19962035
    19972036        if (xFrac == 0)
     2037        {
    19982038          absX = Clip3(0, widthChroma-1, absX);
     2039        }
    19992040        else
     2041        {
    20002042          absX = Clip3(4, widthChroma-5, absX);
    2001 
    2002         refOffset = absX - iPosX;
     2043        }
     2044
     2045        refOffset = absX - posX;
    20032046        assert( refCb[refOffset] >= 0 && refCb[refOffset] <= 255 );
    20042047        assert( refCr[refOffset] >= 0 && refCr[refOffset] <= 255 );
    20052048
    2006         m_if.filterHorChroma( &refCb[refOffset], refStride, &dstCb[xTxt+j], dstStride, 1, nTxtPerDepthY, xFrac, !bIsBi );
    2007         m_if.filterHorChroma( &refCr[refOffset], refStride, &dstCr[xTxt+j], dstStride, 1, nTxtPerDepthY, xFrac, !bIsBi );
     2049        m_if.filterHorChroma( &refCb[refOffset], refStride, &dstCb[xTxt+j], dstStride, 1, nTxtPerDepthY, xFrac, !isBi );
     2050        m_if.filterHorChroma( &refCr[refOffset], refStride, &dstCr[xTxt+j], dstStride, 1, nTxtPerDepthY, xFrac, !isBi );
    20082051      }
    20092052
  • branches/HTM-DEV-2.0-dev1-NTT/source/Lib/TLibCommon/TComPrediction.h

    r576 r578  
    123123#if H_3D_VSP
    124124#if NTT_VSP_COMMON_E0207_E0208
    125   Void xGetVirtualDepth           ( TComDataCU *pcCU, TComPicYuv *pcPicRefDepth, TComMv *pcDv, UInt partAddr, Int iWidth, Int iHeight, TComYuv *pcYuvDepth, Int iTxtPerDepthX=1, Int iTxtPerDepthY=1 );
    126   Void xPredInterLumaBlkFromDM    ( TComDataCU *pcCU, TComPicYuv *pcPicRef, TComYuv *pcYuvDepth, Int* pShiftLUT, TComMv *pcMv, UInt partAddr, Int iWidth, Int iHeight, Bool bIsDepth, TComYuv *&pcYuvDst, Bool bIsBi );
    127   Void xPredInterChromaBlkFromDM  ( TComDataCU *pcCU, TComPicYuv *pcPicRef, TComYuv *pcYuvDepth, Int* pShiftLUT, TComMv *pcMv, UInt partAddr, Int iWidth, Int iHeight, Bool bIsDepth, TComYuv *&pcYuvDst, Bool bIsBi );
     125  Void xGetVirtualDepth           ( TComDataCU *cu, TComPicYuv *picRefDepth, TComMv *dv, UInt partAddr, Int width, Int height, TComYuv *yuvDepth, Int txtPerDepthX=1, Int txtPerDepthY=1 );
     126  Void xPredInterLumaBlkFromDM    ( TComDataCU *cu, TComPicYuv *picRef, TComYuv *yuvDepth, Int* shiftLUT, TComMv *mv, UInt partAddr, Int width, Int height, Bool isDepth, TComYuv *&pcYuvDst, Bool isBi );
     127  Void xPredInterChromaBlkFromDM  ( TComDataCU *cu, TComPicYuv *picRef, TComYuv *yuvDepth, Int* shiftLUT, TComMv *mv, UInt partAddr, Int width, Int height, Bool isDepth, TComYuv *&pcYuvDst, Bool isBi );
    128128#else
    129129  Void xPredInterLumaBlkFromDM  ( TComPicYuv *refPic, TComPicYuv *pPicBaseDepth, Int* pShiftLUT, TComMv* dv, UInt partAddr, Int posX, Int posY, Int sizeX, Int sizeY, Bool isDepth, TComYuv *&dstPic, Bool bi );
  • branches/HTM-DEV-2.0-dev1-NTT/source/Lib/TLibCommon/TypeDef.h

    r576 r578  
    201201#endif
    202202
    203 #define NTT_VSP_COMMON_E0207_E0208        1 // common part of JCT3V-E0207 and JCT3V-E0208
     203#define NTT_VSP_COMMON_E0207_E0208        0 // common part of JCT3V-E0207 and JCT3V-E0208
    204204#if NTT_VSP_COMMON_E0207_E0208
    205 #define NTT_VSP_DC_BUGFIX_E0208           1 // bugfix for sub-PU based DC in VSP, JCT3V-E0208
    206 #define NTT_VSP_VECTOR_CLIP_E0208         1 // disparity vector clipping on fetching depth map in VSP, JCT3V-E0208
    207 #define NTT_VSP_ADAPTIVE_SPLIT_E0207      1 // adaptive sub-PU partitioning in VSP, JCT3V-E0207
     205#define NTT_VSP_DC_BUGFIX_E0208           0 // bugfix for sub-PU based DC in VSP, JCT3V-E0208
     206#define NTT_VSP_VECTOR_CLIP_E0208         0 // disparity vector clipping on fetching depth map in VSP, JCT3V-E0208
     207#define NTT_VSP_ADAPTIVE_SPLIT_E0207      0 // adaptive sub-PU partitioning in VSP, JCT3V-E0207
    208208#endif
    209209
Note: See TracChangeset for help on using the changeset viewer.