Ignore:
Timestamp:
11 Jun 2013, 20:35:00 (12 years ago)
Author:
zhang
Message:

Implementation of ARP from QC

Location:
branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/ContextTables.h

    r324 r464  
    9595#define NUM_TRANSFORMSKIP_FLAG_CTX    1       ///< number of context models for transform skipping
    9696#define NUM_CU_TRANSQUANT_BYPASS_FLAG_CTX  1
     97
     98#if H_3D_ARP
     99#define NUM_ARPW_CTX                  4       ///< number of context models for weighting factor index used by advanced residual prediction
     100#endif
     101
    97102#define CNU                          154      ///< dummy initialization value for unused context models 'Context model Not Used'
    98103
     
    334339  { 139,  139},
    335340};
     341
     342#if H_3D_ARP
     343static const UChar
     344INIT_ARPW[3][NUM_ARPW_CTX] =
     345{
     346  { 154, 154, 154, 154 },
     347  { 154, 154, 154, 154 },
     348  { 154, 154, 154, 154 },
     349};
     350#endif
    336351//! \}
    337352
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComDataCU.cpp

    r456 r464  
    115115  m_pDvInfo              = NULL;
    116116#endif
     117
     118#if H_3D_ARP
     119  m_puhARPW              = NULL;
     120#endif
    117121}
    118122
     
    208212    m_acCUMvField[1].create( uiNumPartition );
    209213   
     214#if H_3D_ARP
     215    m_puhARPW            = new UChar[ uiNumPartition];
     216#endif
    210217  }
    211218  else
     
    293300    if ( m_pDvInfo            ) { xFree(m_pDvInfo);             m_pDvInfo           = NULL; }
    294301#endif
     302
     303#if H_3D_ARP
     304    if ( m_puhARPW            ) { delete[] m_puhARPW;           m_puhARPW           = NULL; }
     305#endif
     306
    295307    m_acCUMvField[0].destroy();
    296308    m_acCUMvField[1].destroy();
     
    402414    m_CUTransquantBypass[ui] = pcFrom->getCUTransquantBypass(ui);
    403415    m_puhDepth[ui] = pcFrom->getDepth(ui);
     416#if H_3D_ARP
     417    m_puhARPW   [ui] = pcFrom->getARPW( ui );
     418#endif
    404419    m_puhWidth  [ui] = pcFrom->getWidth(ui);
    405420    m_puhHeight [ui] = pcFrom->getHeight(ui);
     
    455470    memset( m_puhCbf[2]         + firstElement, 0,                        numElements * sizeof( *m_puhCbf[2] ) );
    456471    memset( m_pbIPCMFlag        + firstElement, false,                    numElements * sizeof( *m_pbIPCMFlag ) );
     472#if H_3D_ARP
     473    memset( m_puhARPW           + firstElement, 0,                        numElements * sizeof( UChar )         );
     474#endif
    457475  }
    458476 
     
    590608      m_puhCbf[1][ui] = 0;
    591609      m_puhCbf[2][ui] = 0;
     610#if H_3D_ARP
     611      m_puhARPW[ui] = 0;
     612#endif
    592613    }
    593614  }
     
    662683#if H_3D_NBDV
    663684  m_pDvInfo->bDV = false;
     685#endif
     686#if H_3D_ARP
     687  memset( m_puhARPW,            0, iSizeInUchar  );
    664688#endif
    665689  UChar uhWidth  = g_uiMaxCUWidth  >> uiDepth;
     
    706730      m_puhCbf[2][ui]=pcCU->m_puhCbf[2][uiPartOffset+ui];
    707731
     732#if H_3D_ARP
     733      m_puhARPW           [ui] = pcCU->getARPW( uiPartOffset+ui );
     734#endif
    708735    }
    709736  }
     
    816843  m_puhMergeIndex       = pcCU->getMergeIndex()       + uiPart;
    817844
     845#if H_3D_ARP
     846  m_puhARPW             = pcCU->getARPW()             + uiPart;
     847#endif
     848
    818849  m_puhLumaIntraDir     = pcCU->getLumaIntraDir()     + uiPart;
    819850  m_puhChromaIntraDir   = pcCU->getChromaIntraDir()   + uiPart;
     
    932963  m_apiMVPNum[eRefPicList] = pcCU->getMVPNum(eRefPicList) + uiAbsPartIdx;
    933964 
     965#if H_3D_ARP
     966  m_puhARPW            = pcCU->getARPW()                  + uiAbsPartIdx;
     967#endif
     968
    934969  m_acCUMvField[ eRefPicList ].linkToWithOffset( pcCU->getCUMvField(eRefPicList), uiAbsPartIdx );
    935970
     
    10191054  memcpy( m_sliceStartCU        + uiOffset, pcCU->m_sliceStartCU,        sizeof( UInt ) * uiNumPartition  );
    10201055  memcpy( m_sliceSegmentStartCU + uiOffset, pcCU->m_sliceSegmentStartCU, sizeof( UInt ) * uiNumPartition  );
     1056
     1057#if H_3D_ARP
     1058  memcpy( m_puhARPW             + uiOffset, pcCU->getARPW(),              iSizeInUchar );
     1059#endif
    10211060}
    10221061
     
    10941133  memcpy( rpcCU->m_sliceStartCU        + m_uiAbsIdxInLCU, m_sliceStartCU,        sizeof( UInt ) * m_uiNumPartition  );
    10951134  memcpy( rpcCU->m_sliceSegmentStartCU + m_uiAbsIdxInLCU, m_sliceSegmentStartCU, sizeof( UInt ) * m_uiNumPartition  );
     1135
     1136#if H_3D_ARP
     1137  memcpy( rpcCU->getARPW()             + m_uiAbsIdxInLCU, m_puhARPW,             iSizeInUchar );
     1138#endif
    10961139}
    10971140
     
    11661209  memcpy( rpcCU->m_sliceStartCU        + uiPartOffset, m_sliceStartCU,        sizeof( UInt ) * uiQNumPart  );
    11671210  memcpy( rpcCU->m_sliceSegmentStartCU + uiPartOffset, m_sliceSegmentStartCU, sizeof( UInt ) * uiQNumPart  );
     1211
     1212#if H_3D_ARP
     1213  memcpy( rpcCU->getARPW()             + uiPartOffset, m_puhARPW,             iSizeInUchar );
     1214#endif
    11681215}
    11691216
     
    18071854  return uiCtx;
    18081855}
     1856
     1857#if H_3D_ARP
     1858UInt TComDataCU::getCTXARPWFlag( UInt uiAbsPartIdx )
     1859{
     1860  TComDataCU* pcTempCU;
     1861  UInt        uiTempPartIdx;
     1862  UInt        uiCtx = 0;
     1863 
     1864  pcTempCU = getPULeft( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx );
     1865  uiCtx    = ( pcTempCU ) ? ((pcTempCU->getARPW( uiTempPartIdx )==0)?0:1) : 0;
     1866 
     1867  pcTempCU = getPUAbove( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx );
     1868  uiCtx   += ( pcTempCU ) ? ((pcTempCU->getARPW( uiTempPartIdx )==0)?0:1): 0;
     1869 
     1870  return uiCtx;
     1871}
     1872#endif
    18091873
    18101874UInt TComDataCU::getCtxInterDir( UInt uiAbsPartIdx )
     
    42464310}
    42474311#endif
     4312#if H_3D_ARP
     4313Void TComDataCU::setARPWSubParts ( UChar w, UInt uiAbsPartIdx, UInt uiDepth )
     4314{
     4315  assert( sizeof( *m_puhARPW) == 1 );
     4316  memset( m_puhARPW + uiAbsPartIdx, w, m_pcPic->getNumPartInCU() >> ( 2 * uiDepth ) );
     4317}
     4318#endif
    42484319//! \}
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComDataCU.h

    r455 r464  
    4949#include "TComPattern.h"
    5050
     51#if H_3D_ARP
     52#include "TComYuv.h"
     53#endif
     54
    5155#include <algorithm>
    5256#include <vector>
     
    190194  DisInfo*      m_pDvInfo;
    191195#endif
     196#if H_3D_ARP
     197  UChar*        m_puhARPW;
     198#endif
    192199  // -------------------------------------------------------------------------------------------------------------------
    193200  // misc. variables
     
    220227 
    221228  /// compute scaling factor from POC difference
     229#if !H_3D_ARP
    222230  Int           xGetDistScaleFactor   ( Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC );
    223  
     231#endif
     232
    224233  Void xDeriveCenterIdx( UInt uiPartIdx, UInt& ruiPartIdxCenter );
    225234
     
    231240  // create / destroy / initialize / copy
    232241  // -------------------------------------------------------------------------------------------------------------------
    233  
     242#if H_3D_ARP
     243  Int           xGetDistScaleFactor   ( Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC );
     244#endif
    234245  Void          create                ( UInt uiNumPartition, UInt uiWidth, UInt uiHeight, Bool bDecSubCu, Int unitSize
    235246#if ADAPTIVE_QP_SELECTION
     
    434445   
    435446#endif
     447
     448#if H_3D_ARP
     449  UChar*        getARPW            ()                        { return m_puhARPW;               }
     450  UChar         getARPW            ( UInt uiIdx )            { return m_puhARPW[uiIdx];        }
     451  Void          setARPW            ( UInt uiIdx, UChar w )   { m_puhARPW[uiIdx] = w;           }
     452  Void          setARPWSubParts    ( UChar w, UInt uiAbsPartIdx, UInt uiDepth );
     453  Double        getARPWFactor      ( UInt uiIdx );
     454#endif
    436455  // -------------------------------------------------------------------------------------------------------------------
    437456  // member functions for accessing partition information
     
    539558  UInt          getCtxInterDir                  ( UInt   uiAbsPartIdx                                 );
    540559 
     560#if H_3D_ARP
     561  UInt          getCTXARPWFlag                  ( UInt   uiAbsPartIdx                                 );
     562#endif 
     563
    541564  UInt          getSliceStartCU         ( UInt pos )                  { return m_sliceStartCU[pos-m_uiAbsIdxInLCU];                                                                                          }
    542565  UInt          getSliceSegmentStartCU  ( UInt pos )                  { return m_sliceSegmentStartCU[pos-m_uiAbsIdxInLCU];                                                                                   }
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComInterpolationFilter.cpp

    r324 r464  
    7373};
    7474
     75#if H_3D_ARP
     76const Short TComInterpolationFilter::m_lumaFilterARP[4][NTAPS_LUMA_ARP] =
     77{
     78  {64,  0},
     79  {48, 16},
     80  {32, 32},
     81  {16, 48}
     82};
     83const Short TComInterpolationFilter::m_chromaFilterARP[8][NTAPS_CHROMA_ARP] =
     84{
     85  {64,  0},
     86  {56,  8},
     87  {48, 16},
     88  {40, 24},
     89  {32, 32},
     90  {24, 40},
     91  {16, 48},
     92  {8,  56}
     93};
     94#endif
     95
    7596// ====================================================================================================================
    7697// Private member functions
     
    325346 * \param  isLast     Flag indicating whether it is the last filtering operation
    326347 */
    327 Void TComInterpolationFilter::filterHorLuma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast )
     348Void TComInterpolationFilter::filterHorLuma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast
     349#if H_3D_ARP
     350    , Bool filterType
     351#endif
     352  )
    328353{
    329354  assert(frac >= 0 && frac < 4);
     
    335360  else
    336361  {
     362#if H_3D_ARP
     363    if(filterType)
     364    {
     365      filterHor<NTAPS_LUMA_ARP>(g_bitDepthY, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilterARP[frac]);
     366    }
     367    else
     368    {
     369#endif
    337370    filterHor<NTAPS_LUMA>(g_bitDepthY, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilter[frac]);
     371#if H_3D_ARP
     372    }
     373#endif
    338374  }
    339375}
     
    352388 * \param  isLast     Flag indicating whether it is the last filtering operation
    353389 */
    354 Void TComInterpolationFilter::filterVerLuma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast )
     390Void TComInterpolationFilter::filterVerLuma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast
     391#if H_3D_ARP
     392    , Bool filterType
     393#endif
     394  )
    355395{
    356396  assert(frac >= 0 && frac < 4);
     
    362402  else
    363403  {
     404#if H_3D_ARP
     405    if(filterType)
     406    {
     407      filterVer<NTAPS_LUMA_ARP>(g_bitDepthY, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilterARP[frac]);   
     408    }
     409    else
     410    {
     411#endif
    364412    filterVer<NTAPS_LUMA>(g_bitDepthY, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilter[frac]);
     413#if H_3D_ARP
     414    }
     415#endif
    365416  }
    366417}
     
    378429 * \param  isLast     Flag indicating whether it is the last filtering operation
    379430 */
    380 Void TComInterpolationFilter::filterHorChroma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast )
     431Void TComInterpolationFilter::filterHorChroma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isLast
     432#if H_3D_ARP
     433    , Bool filterType
     434#endif
     435  )
    381436{
    382437  assert(frac >= 0 && frac < 8);
     
    388443  else
    389444  {
     445#if H_3D_ARP
     446    if(filterType)
     447    {
     448      filterHor<NTAPS_CHROMA_ARP>(g_bitDepthC, src, srcStride, dst, dstStride, width, height, isLast, m_chromaFilterARP[frac]);
     449    }
     450    else
     451    {
     452#endif
    390453    filterHor<NTAPS_CHROMA>(g_bitDepthC, src, srcStride, dst, dstStride, width, height, isLast, m_chromaFilter[frac]);
     454#if H_3D_ARP
     455    }
     456#endif
    391457  }
    392458}
     
    405471 * \param  isLast     Flag indicating whether it is the last filtering operation
    406472 */
    407 Void TComInterpolationFilter::filterVerChroma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast )
     473Void TComInterpolationFilter::filterVerChroma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast
     474#if H_3D_ARP
     475    , Bool filterType
     476#endif
     477  )
    408478{
    409479  assert(frac >= 0 && frac < 8);
     
    415485  else
    416486  {
     487#if H_3D_ARP
     488    if(filterType)
     489    {
     490      filterVer<NTAPS_CHROMA_ARP>(g_bitDepthC, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_chromaFilterARP[frac]);
     491    }
     492    else
     493    {
     494#endif
    417495    filterVer<NTAPS_CHROMA>(g_bitDepthC, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_chromaFilter[frac]);
     496#if H_3D_ARP
     497    }
     498#endif
    418499  }
    419500}
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComInterpolationFilter.h

    r324 r464  
    4545//! \{
    4646
     47#if H_3D_ARP
     48#define NTAPS_LUMA_ARP    2 ///< Number of taps for luma
     49#define NTAPS_CHROMA_ARP  2 ///< Number of taps for chroma
     50#endif
     51
    4752#define NTAPS_LUMA        8 ///< Number of taps for luma
    4853#define NTAPS_CHROMA      4 ///< Number of taps for chroma
     
    5863  static const Short m_lumaFilter[4][NTAPS_LUMA];     ///< Luma filter taps
    5964  static const Short m_chromaFilter[8][NTAPS_CHROMA]; ///< Chroma filter taps
    60  
     65#if H_3D_ARP
     66  static const Short m_lumaFilterARP  [4][NTAPS_LUMA_ARP];     ///< Luma filter taps for ARP
     67  static const Short m_chromaFilterARP[8][NTAPS_CHROMA_ARP];   ///< Chroma filter taps for ARP
     68#endif
    6169  static Void filterCopy(Int bitDepth, const Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Bool isFirst, Bool isLast);
    6270 
     
    7381  ~TComInterpolationFilter() {}
    7482
    75   Void filterHorLuma  (Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac,               Bool isLast );
    76   Void filterVerLuma  (Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast );
    77   Void filterHorChroma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac,               Bool isLast );
    78   Void filterVerChroma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast );
     83  Void filterHorLuma  (Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac,               Bool isLast
     84#if H_3D_ARP
     85    , Bool filterType = false
     86#endif
     87    );
     88  Void filterVerLuma  (Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast
     89#if H_3D_ARP
     90    , Bool filterType = false
     91#endif
     92    );
     93  Void filterHorChroma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac,               Bool isLast
     94#if H_3D_ARP
     95    , Bool filterType = false
     96#endif
     97    );
     98  Void filterVerChroma(Pel *src, Int srcStride, Short *dst, Int dstStride, Int width, Int height, Int frac, Bool isFirst, Bool isLast
     99#if H_3D_ARP
     100    , Bool filterType = false
     101#endif
     102    );
    79103};
    80104
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComPrediction.cpp

    r446 r464  
    6363  m_cYuvPredTemp.destroy();
    6464
     65#if H_3D_ARP
     66  m_acYuvPredBase[0].destroy();
     67  m_acYuvPredBase[1].destroy();
     68#endif
     69
    6570  if( m_pLumaRecBuffer )
    6671  {
     
    103108
    104109    m_cYuvPredTemp.create( MAX_CU_SIZE, MAX_CU_SIZE );
     110#if H_3D_ARP
     111    m_acYuvPredBase[0] .create( g_uiMaxCUWidth, g_uiMaxCUHeight );
     112    m_acYuvPredBase[1] .create( g_uiMaxCUWidth, g_uiMaxCUHeight );
     113#endif
    105114  }
    106115
     
    485494  TComMv      cMv         = pcCU->getCUMvField( eRefPicList )->getMv( uiPartAddr );
    486495  pcCU->clipMv(cMv);
     496#if H_3D_ARP
     497  if(  pcCU->getARPW( uiPartAddr ) > 0
     498    && pcCU->getPartitionSize(uiPartAddr)==SIZE_2Nx2N
     499    && pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPOC()!= pcCU->getSlice()->getPOC()
     500    )
     501  {
     502    xPredInterUniARP( pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, rpcYuvPred, bi );
     503  }
     504  else
     505  {
     506#endif
    487507  xPredInterLumaBlk  ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi );
    488508  xPredInterChromaBlk( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi );
    489 }
     509#if H_3D_ARP
     510  }
     511#endif
     512}
     513
     514#if H_3D_ARP
     515Void TComPrediction::xPredInterUniARP( TComDataCU* pcCU, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi, TComMvField * pNewMvFiled )
     516{
     517  Int         iRefIdx      = pNewMvFiled ? pNewMvFiled->getRefIdx() : pcCU->getCUMvField( eRefPicList )->getRefIdx( uiPartAddr );           
     518  TComMv      cMv          = pNewMvFiled ? pNewMvFiled->getMv()     : pcCU->getCUMvField( eRefPicList )->getMv( uiPartAddr );
     519  Bool        bTobeScaled  = false;
     520  TComPic* pcPicYuvBaseCol = NULL;
     521  TComPic* pcPicYuvBaseRef = NULL;
     522
     523#if H_3D_NBDV
     524  DisInfo cDistparity;
     525  cDistparity.bDV           = pcCU->getDvInfo(uiPartAddr).bDV;
     526  if( cDistparity.bDV )
     527  {
     528    cDistparity.m_acNBDV = pcCU->getDvInfo(0).m_acNBDV;
     529    assert(pcCU->getDvInfo(uiPartAddr).bDV ==  pcCU->getDvInfo(0).bDV);
     530    cDistparity.m_aVIdxCan = pcCU->getDvInfo(uiPartAddr).m_aVIdxCan;
     531  }
     532#else
     533  assert(0); // ARP can be applied only when a DV is available
     534#endif
     535
     536  UChar dW = cDistparity.bDV ? pcCU->getARPW ( uiPartAddr ) : 0;
     537
     538  if( cDistparity.bDV )
     539  {
     540    if( dW > 0 && pcCU->getSlice()->getRefPic( eRefPicList, 0 )->getPOC()!= pcCU->getSlice()->getPOC() )
     541    {
     542      bTobeScaled = true;
     543    }
     544
     545    pcPicYuvBaseCol =  pcCU->getSlice()->getBaseViewRefPic( pcCU->getSlice()->getPOC(),                              cDistparity.m_aVIdxCan );
     546    pcPicYuvBaseRef =  pcCU->getSlice()->getBaseViewRefPic( pcCU->getSlice()->getRefPic( eRefPicList, 0 )->getPOC(), cDistparity.m_aVIdxCan );
     547   
     548    if( ( !pcPicYuvBaseCol || pcPicYuvBaseCol->getPOC() != pcCU->getSlice()->getPOC() ) || ( !pcPicYuvBaseRef || pcPicYuvBaseRef->getPOC() != pcCU->getSlice()->getRefPic( eRefPicList, 0 )->getPOC() ) )
     549    {
     550      dW = 0;
     551      bTobeScaled = false;
     552    }
     553    else
     554    {
     555      assert( pcPicYuvBaseCol->getPOC() == pcCU->getSlice()->getPOC() && pcPicYuvBaseRef->getPOC() == pcCU->getSlice()->getRefPic( eRefPicList, 0 )->getPOC() );
     556    }
     557
     558    if(bTobeScaled)
     559    {     
     560      Int iCurrPOC    = pcCU->getSlice()->getPOC();
     561      Int iColRefPOC  = pcCU->getSlice()->getRefPOC( eRefPicList, iRefIdx );
     562      Int iCurrRefPOC = pcCU->getSlice()->getRefPOC( eRefPicList,  0);
     563      Int iScale = pcCU-> xGetDistScaleFactor(iCurrPOC, iCurrRefPOC, iCurrPOC, iColRefPOC);
     564      if ( iScale != 4096 )
     565      {
     566        cMv = cMv.scaleMv( iScale );
     567      }
     568      iRefIdx = 0;
     569    }
     570  }
     571
     572  pcCU->clipMv(cMv);
     573  TComPicYuv* pcPicYuvRef = pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec();
     574  xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi, true );
     575  xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi, true );
     576
     577  if( dW > 0 )
     578  {
     579    TComYuv * pYuvB0 = &m_acYuvPredBase[0];
     580    TComYuv * pYuvB1  = &m_acYuvPredBase[1];
     581
     582    TComMv cMVwithDisparity = cMv + cDistparity.m_acNBDV;
     583    pcCU->clipMv(cMVwithDisparity);
     584
     585    assert ( cDistparity.bDV );
     586
     587    pcPicYuvRef = pcPicYuvBaseCol->getPicYuvRec();
     588    xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cDistparity.m_acNBDV, iWidth, iHeight, pYuvB0, bi, true );
     589    xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cDistparity.m_acNBDV, iWidth, iHeight, pYuvB0, bi, true );
     590   
     591    pcPicYuvRef = pcPicYuvBaseRef->getPicYuvRec();
     592    xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cMVwithDisparity, iWidth, iHeight, pYuvB1, bi, true );
     593    xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cMVwithDisparity, iWidth, iHeight, pYuvB1, bi, true );
     594
     595    pYuvB0->subtractARP( pYuvB0 , pYuvB1 , uiPartAddr , iWidth , iHeight );
     596
     597    if( 2 == dW )
     598    {
     599      pYuvB0->multiplyARP( uiPartAddr , iWidth , iHeight , dW );
     600    }
     601
     602    rpcYuvPred->addARP( rpcYuvPred , pYuvB0 , uiPartAddr , iWidth , iHeight , !bi );
     603  }
     604}
     605#endif
    490606
    491607Void TComPrediction::xPredInterBi ( TComDataCU* pcCU, UInt uiPartAddr, Int iWidth, Int iHeight, TComYuv*& rpcYuvPred )
     
    551667 * \param bi       Flag indicating whether bipred is used
    552668 */
    553 Void TComPrediction::xPredInterLumaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi )
     669Void TComPrediction::xPredInterLumaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi
     670#if H_3D_ARP
     671    , Bool filterType
     672#endif
     673  )
    554674{
    555675  Int refStride = refPic->getStride(); 
     
    565685  if ( yFrac == 0 )
    566686  {
    567     m_if.filterHorLuma( ref, refStride, dst, dstStride, width, height, xFrac,       !bi );
     687    m_if.filterHorLuma( ref, refStride, dst, dstStride, width, height, xFrac,       !bi
     688#if H_3D_ARP
     689    , filterType
     690#endif
     691      );
    568692  }
    569693  else if ( xFrac == 0 )
    570694  {
    571     m_if.filterVerLuma( ref, refStride, dst, dstStride, width, height, yFrac, true, !bi );
     695    m_if.filterVerLuma( ref, refStride, dst, dstStride, width, height, yFrac, true, !bi
     696#if H_3D_ARP
     697    , filterType
     698#endif
     699      );
    572700  }
    573701  else
     
    579707    Int halfFilterSize = ( filterSize >> 1 );
    580708
    581     m_if.filterHorLuma(ref - (halfFilterSize-1)*refStride, refStride, tmp, tmpStride, width, height+filterSize-1, xFrac, false     );
    582     m_if.filterVerLuma(tmp + (halfFilterSize-1)*tmpStride, tmpStride, dst, dstStride, width, height,              yFrac, false, !bi);   
     709    m_if.filterHorLuma(ref - (halfFilterSize-1)*refStride, refStride, tmp, tmpStride, width, height+filterSize-1, xFrac, false     
     710#if H_3D_ARP
     711    , filterType
     712#endif
     713      );
     714    m_if.filterVerLuma(tmp + (halfFilterSize-1)*tmpStride, tmpStride, dst, dstStride, width, height,              yFrac, false, !bi
     715#if H_3D_ARP
     716    , filterType
     717#endif
     718      );   
    583719  }
    584720}
     
    596732 * \param bi       Flag indicating whether bipred is used
    597733 */
    598 Void TComPrediction::xPredInterChromaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi )
     734Void TComPrediction::xPredInterChromaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi
     735#if H_3D_ARP
     736    , Bool filterType
     737#endif   
     738  )
    599739{
    600740  Int     refStride  = refPic->getCStride();
     
    623763  if ( yFrac == 0 )
    624764  {
    625     m_if.filterHorChroma(refCb, refStride, dstCb,  dstStride, cxWidth, cxHeight, xFrac, !bi);   
    626     m_if.filterHorChroma(refCr, refStride, dstCr,  dstStride, cxWidth, cxHeight, xFrac, !bi);   
     765    m_if.filterHorChroma(refCb, refStride, dstCb,  dstStride, cxWidth, cxHeight, xFrac, !bi
     766#if H_3D_ARP
     767    , filterType
     768#endif
     769    );   
     770    m_if.filterHorChroma(refCr, refStride, dstCr,  dstStride, cxWidth, cxHeight, xFrac, !bi
     771#if H_3D_ARP
     772    , filterType
     773#endif
     774    );
    627775  }
    628776  else if ( xFrac == 0 )
    629777  {
    630     m_if.filterVerChroma(refCb, refStride, dstCb, dstStride, cxWidth, cxHeight, yFrac, true, !bi);   
    631     m_if.filterVerChroma(refCr, refStride, dstCr, dstStride, cxWidth, cxHeight, yFrac, true, !bi);   
     778    m_if.filterVerChroma(refCb, refStride, dstCb, dstStride, cxWidth, cxHeight, yFrac, true, !bi
     779#if H_3D_ARP
     780    , filterType
     781#endif
     782    );
     783    m_if.filterVerChroma(refCr, refStride, dstCr, dstStride, cxWidth, cxHeight, yFrac, true, !bi
     784#if H_3D_ARP
     785    , filterType
     786#endif
     787    );
    632788  }
    633789  else
    634790  {
    635     m_if.filterHorChroma(refCb - (halfFilterSize-1)*refStride, refStride, extY,  extStride, cxWidth, cxHeight+filterSize-1, xFrac, false);
    636     m_if.filterVerChroma(extY  + (halfFilterSize-1)*extStride, extStride, dstCb, dstStride, cxWidth, cxHeight  , yFrac, false, !bi);
     791    m_if.filterHorChroma(refCb - (halfFilterSize-1)*refStride, refStride, extY,  extStride, cxWidth, cxHeight+filterSize-1, xFrac, false
     792#if H_3D_ARP
     793    , filterType
     794#endif 
     795      );
     796    m_if.filterVerChroma(extY  + (halfFilterSize-1)*extStride, extStride, dstCb, dstStride, cxWidth, cxHeight  , yFrac, false, !bi
     797#if H_3D_ARP
     798    , filterType
     799#endif
     800      );
    637801   
    638     m_if.filterHorChroma(refCr - (halfFilterSize-1)*refStride, refStride, extY,  extStride, cxWidth, cxHeight+filterSize-1, xFrac, false);
    639     m_if.filterVerChroma(extY  + (halfFilterSize-1)*extStride, extStride, dstCr, dstStride, cxWidth, cxHeight  , yFrac, false, !bi);   
     802    m_if.filterHorChroma(refCr - (halfFilterSize-1)*refStride, refStride, extY,  extStride, cxWidth, cxHeight+filterSize-1, xFrac, false
     803#if H_3D_ARP
     804    , filterType
     805#endif
     806      );
     807    m_if.filterVerChroma(extY  + (halfFilterSize-1)*extStride, extStride, dstCr, dstStride, cxWidth, cxHeight  , yFrac, false, !bi
     808#if H_3D_ARP
     809    , filterType
     810#endif
     811      );   
    640812  }
    641813}
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComPrediction.h

    r324 r464  
    6565  TComYuv   m_acYuvPred[2];
    6666  TComYuv   m_cYuvPredTemp;
     67#if H_3D_ARP
     68  TComYuv   m_acYuvPredBase[2];
     69#endif
    6770  TComYuv m_filteredBlock[4][4];
    6871  TComYuv m_filteredBlockTmp[4];
     
    7780 
    7881  // motion compensation functions
     82#if H_3D_ARP
     83  Void xPredInterUniARP         ( TComDataCU* pcCU,                          UInt uiPartAddr,               Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi=false, TComMvField * pNewMvFiled = NULL );
     84#endif
    7985  Void xPredInterUni            ( TComDataCU* pcCU,                          UInt uiPartAddr,               Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi=false          );
    8086  Void xPredInterBi             ( TComDataCU* pcCU,                          UInt uiPartAddr,               Int iWidth, Int iHeight,                         TComYuv*& rpcYuvPred );
    81   Void xPredInterLumaBlk  ( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi );
    82   Void xPredInterChromaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi );
     87  Void xPredInterLumaBlk  ( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi
     88#if H_3D_ARP
     89    , Bool filterType = false
     90#endif
     91    );
     92  Void xPredInterChromaBlk( TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, TComYuv *&dstPic, Bool bi
     93#if H_3D_ARP
     94    , Bool filterType = false
     95#endif
     96    );
    8397  Void xWeightedAverage         ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, Int iRefIdx0, Int iRefIdx1, UInt uiPartAddr, Int iWidth, Int iHeight, TComYuv*& rpcYuvDst );
    8498 
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComSlice.cpp

    r446 r464  
    14861486      m_dimensionId[i][j] = 0;
    14871487    }
     1488
     1489#if H_3D_ARP
     1490    m_uiUseAdvResPred[i]  = 0;
     1491    m_uiARPStepNum[i]     = 1;
     1492#endif
    14881493  }
    14891494#endif
     
    22572262  }
    22582263}
     2264
     2265#if H_3D_ARP
     2266Void TComSlice::setARPStepNum()                                 
     2267{
     2268  Bool bAllIvRef = true;
     2269
     2270  if(!getVPS()->getUseAdvRP(getLayerId()))
     2271  {
     2272    m_nARPStepNum = 0;
     2273  }
     2274  else
     2275  {
     2276    for( Int iRefListId = 0; iRefListId < 2; iRefListId++ )
     2277    {
     2278      RefPicList  eRefPicList = RefPicList( iRefListId );
     2279      Int iNumRefIdx = getNumRefIdx(eRefPicList);
     2280     
     2281      if( iNumRefIdx <= 0 )
     2282      {
     2283        continue;
     2284      }
     2285
     2286      for ( Int i = 0; i < iNumRefIdx; i++ )
     2287      {
     2288        if( getRefPic( eRefPicList, i)->getPOC() != getPOC() )
     2289        {
     2290          bAllIvRef = false;
     2291          break;
     2292        }
     2293      }
     2294
     2295      if( bAllIvRef == false ) { break; }
     2296    }
     2297    m_nARPStepNum = !bAllIvRef ? getVPS()->getARPStepNum(getLayerId()) : 0;
     2298  }
     2299}
     2300#endif
    22592301#endif
    22602302/** get scaling matrix from RefMatrixID
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComSlice.h

    r446 r464  
    524524#if H_3D
    525525  Int         m_viewIndex                [MAX_NUM_LAYERS   ];
     526#if H_3D_ARP
     527  UInt        m_uiUseAdvResPred          [MAX_NUM_LAYERS   ];
     528  UInt        m_uiARPStepNum             [MAX_NUM_LAYERS   ];
     529#endif
    526530#endif
    527531
     
    642646  Int     getDepthId      ( Int layerIdInVps )                             { return getScalabilityId( layerIdInVps, DEPTH_ID ); }
    643647  Int     getLayerIdInNuh( Int viewIndex, Bool depthFlag ); 
     648#if H_3D_ARP
     649  UInt    getUseAdvRP  ( Int layerIdInVps )                                { return m_uiUseAdvResPred[layerIdInVps];    }
     650  UInt    getARPStepNum( Int layerIdInVps )                                { return m_uiARPStepNum[layerIdInVps];       }
     651  Void    setUseAdvRP  ( Int layerIdInVps, UInt val )                      { m_uiUseAdvResPred[layerIdInVps] = val;     }
     652  Void    setARPStepNum( Int layerIdInVps, UInt val )                      { m_uiARPStepNum[layerIdInVps]    = val;     }
     653#endif
    644654#endif
    645655
     
    14861496  Int        m_aaiCodedScale [2][MAX_NUM_LAYERS];
    14871497  Int        m_aaiCodedOffset[2][MAX_NUM_LAYERS];
     1498#if H_3D_ARP
     1499  TComList<TComPic*> * m_pBaseViewRefPicList[MAX_NUM_LAYERS];
     1500  UInt                 m_nARPStepNum;
     1501#endif
    14881502#endif
    14891503#endif
     
    16111625#endif
    16121626#endif
     1627
     1628#if H_3D_ARP
     1629  Void      setBaseViewRefPicList( TComList<TComPic*> *pListPic, Int iViewIdx )      { m_pBaseViewRefPicList[iViewIdx] = pListPic;                   }
     1630  Void      setARPStepNum();                                 
     1631  TComPic*  getBaseViewRefPic    ( UInt uiPOC , Int iViewIdx )                       { return xGetRefPic( *m_pBaseViewRefPicList[iViewIdx], uiPOC ); }
     1632  UInt      getARPStepNum( )                                                         { return m_nARPStepNum;                                         } 
     1633#endif
     1634
    16131635  Void      setRefPOCList       ();
    16141636  Void      setColFromL0Flag    ( UInt colFromL0 ) { m_colFromL0Flag = colFromL0; }
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComYuv.cpp

    r446 r464  
    661661  }
    662662}
     663
     664#if H_3D_ARP
     665Void TComYuv::addARP( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
     666{
     667  addARPLuma   ( pcYuvSrc0, pcYuvSrc1, uiAbsPartIdx, uiWidth   , uiHeight    , bClip );
     668  addARPChroma ( pcYuvSrc0, pcYuvSrc1, uiAbsPartIdx, uiWidth>>1, uiHeight>>1 , bClip );
     669}
     670
     671Void TComYuv::addARPLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
     672{
     673  Int x, y;
     674
     675  Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiAbsPartIdx );
     676  Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiAbsPartIdx );
     677  Pel* pDst  = getLumaAddr( uiAbsPartIdx );
     678
     679  UInt iSrc0Stride = pcYuvSrc0->getStride();
     680  UInt iSrc1Stride = pcYuvSrc1->getStride();
     681  UInt iDstStride  = getStride();
     682  for ( y = uiHeight-1; y >= 0; y-- )
     683  {
     684    for ( x = uiWidth-1; x >= 0; x-- )
     685    {
     686      pDst[x] = pSrc0[x] + pSrc1[x];
     687      if( bClip )
     688      {
     689        pDst[x] = ClipY( pDst[x] );
     690      }
     691    }
     692    pSrc0 += iSrc0Stride;
     693    pSrc1 += iSrc1Stride;
     694    pDst  += iDstStride;
     695  }
     696}
     697
     698Void TComYuv::addARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, Bool bClip )
     699{
     700  Int x, y;
     701
     702  Pel* pSrcU0 = pcYuvSrc0->getCbAddr( uiAbsPartIdx );
     703  Pel* pSrcU1 = pcYuvSrc1->getCbAddr( uiAbsPartIdx );
     704  Pel* pSrcV0 = pcYuvSrc0->getCrAddr( uiAbsPartIdx );
     705  Pel* pSrcV1 = pcYuvSrc1->getCrAddr( uiAbsPartIdx );
     706  Pel* pDstU = getCbAddr( uiAbsPartIdx );
     707  Pel* pDstV = getCrAddr( uiAbsPartIdx );
     708
     709  UInt  iSrc0Stride = pcYuvSrc0->getCStride();
     710  UInt  iSrc1Stride = pcYuvSrc1->getCStride();
     711  UInt  iDstStride  = getCStride();
     712  for ( y = uiHeight-1; y >= 0; y-- )
     713  {
     714    for ( x = uiWidth-1; x >= 0; x-- )
     715    {
     716      pDstU[x] = pSrcU0[x] + pSrcU1[x];
     717      pDstV[x] = pSrcV0[x] + pSrcV1[x];
     718      if( bClip )
     719      {
     720        pDstU[x] = ClipC( pDstU[x] );
     721        pDstV[x] = ClipC( pDstV[x] );
     722      }
     723    }
     724
     725    pSrcU0 += iSrc0Stride;
     726    pSrcU1 += iSrc1Stride;
     727    pSrcV0 += iSrc0Stride;
     728    pSrcV1 += iSrc1Stride;
     729    pDstU  += iDstStride;
     730    pDstV  += iDstStride;
     731  }
     732}
     733
     734Void TComYuv::subtractARP( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
     735{
     736  subtractARPLuma  ( pcYuvSrc0, pcYuvSrc1,  uiAbsPartIdx, uiWidth    , uiHeight    );
     737  subtractARPChroma( pcYuvSrc0, pcYuvSrc1,  uiAbsPartIdx, uiWidth>>1 , uiHeight>>1 );
     738}
     739
     740Void TComYuv::subtractARPLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
     741{
     742  Int x, y;
     743
     744  Pel* pSrc0 = pcYuvSrc0->getLumaAddr( uiAbsPartIdx );
     745  Pel* pSrc1 = pcYuvSrc1->getLumaAddr( uiAbsPartIdx );
     746  Pel* pDst  = getLumaAddr( uiAbsPartIdx );
     747
     748  Int  iSrc0Stride = pcYuvSrc0->getStride();
     749  Int  iSrc1Stride = pcYuvSrc1->getStride();
     750  Int  iDstStride  = getStride();
     751  for ( y = uiHeight-1; y >= 0; y-- )
     752  {
     753    for ( x = uiWidth-1; x >= 0; x-- )
     754    {
     755      pDst[x] = pSrc0[x] - pSrc1[x];
     756    }
     757    pSrc0 += iSrc0Stride;
     758    pSrc1 += iSrc1Stride;
     759    pDst  += iDstStride;
     760  }
     761}
     762
     763Void TComYuv::subtractARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight )
     764{
     765  Int x, y;
     766
     767  Pel* pSrcU0 = pcYuvSrc0->getCbAddr( uiAbsPartIdx );
     768  Pel* pSrcU1 = pcYuvSrc1->getCbAddr( uiAbsPartIdx );
     769  Pel* pSrcV0 = pcYuvSrc0->getCrAddr( uiAbsPartIdx );
     770  Pel* pSrcV1 = pcYuvSrc1->getCrAddr( uiAbsPartIdx );
     771  Pel* pDstU  = getCbAddr( uiAbsPartIdx );
     772  Pel* pDstV  = getCrAddr( uiAbsPartIdx );
     773
     774  Int  iSrc0Stride = pcYuvSrc0->getCStride();
     775  Int  iSrc1Stride = pcYuvSrc1->getCStride();
     776  Int  iDstStride  = getCStride();
     777  for ( y = uiHeight-1; y >= 0; y-- )
     778  {
     779    for ( x = uiWidth-1; x >= 0; x-- )
     780    {
     781      pDstU[x] = pSrcU0[x] - pSrcU1[x];
     782      pDstV[x] = pSrcV0[x] - pSrcV1[x];
     783    }
     784    pSrcU0 += iSrc0Stride;
     785    pSrcU1 += iSrc1Stride;
     786    pSrcV0 += iSrc0Stride;
     787    pSrcV1 += iSrc1Stride;
     788    pDstU  += iDstStride;
     789    pDstV  += iDstStride;
     790  }
     791}
     792
     793Void TComYuv::multiplyARP( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
     794{
     795  multiplyARPLuma( uiAbsPartIdx , uiWidth , uiHeight , dW );
     796  multiplyARPChroma( uiAbsPartIdx , uiWidth >> 1 , uiHeight >> 1 , dW );
     797}
     798
     799Void TComYuv::xxMultiplyLine( Pel* pSrcDst , UInt uiWidth , UChar dW )
     800{
     801  assert( dW == 2 );
     802  for( UInt x = 0 ; x < uiWidth ; x++ )
     803    pSrcDst[x] =  pSrcDst[x] >> 1;
     804}
     805
     806Void TComYuv::multiplyARPLuma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
     807{
     808  Pel* pDst  = getLumaAddr( uiAbsPartIdx );
     809  Int  iDstStride  = getStride();
     810  for ( Int y = uiHeight-1; y >= 0; y-- )
     811  {
     812    xxMultiplyLine( pDst , uiWidth , dW );
     813    pDst  += iDstStride;
     814  }
     815}
     816
     817Void TComYuv::multiplyARPChroma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW )
     818{
     819  Pel* pDstU  = getCbAddr( uiAbsPartIdx );
     820  Pel* pDstV  = getCrAddr( uiAbsPartIdx );
     821
     822  Int  iDstStride  = getCStride();
     823  for ( Int y = uiHeight-1; y >= 0; y-- )
     824  {
     825    xxMultiplyLine( pDstU , uiWidth , dW );
     826    xxMultiplyLine( pDstV , uiWidth , dW );
     827    pDstU  += iDstStride;
     828    pDstV  += iDstStride;
     829  }
     830}
     831#endif
    663832#endif
    664833//! \}
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComYuv.h

    r446 r464  
    182182#if H_3D
    183183  Void addClipPartLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize );
     184
     185#if H_3D_ARP
     186  Void    addARP           ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight , Bool bClip );
     187  Void    addARPLuma       ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight , Bool bClip );
     188  Void    addARPChroma     ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight , Bool bClip );
     189  Void    subtractARP      ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight );
     190  Void    subtractARPLuma  ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight );
     191  Void    subtractARPChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiAbsPartIdx, UInt uiWidth , UInt uiHeight );
     192  Void    multiplyARP      ( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW );
     193  Void    multiplyARPLuma  ( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW );
     194  Void    multiplyARPChroma( UInt uiAbsPartIdx , UInt uiWidth , UInt uiHeight , UChar dW );
     195private:
     196  Void    xxMultiplyLine( Pel * pSrcDst , UInt uiWidth , UChar dW );
    184197#endif
     198#endif
    185199
    186200};// END CLASS DEFINITION TComYuv
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TypeDef.h

    r456 r464  
    8989                                              // QC_CU_NBDV_D0181
    9090                                              // SEC_DEFAULT_DV_D0112
     91
     92#define H_3D_ARP                          1   // Advanced residual prediction (ARP), JCT3V-D0177
    9193#endif
    9294
     
    115117#define DVFROM_ABOVELEFT                  5
    116118#endif
     119
     120///// ***** ADVANCED INTERVIEW RESIDUAL PREDICTION *********
     121#if H_3D_ARP
     122#define H_3D_ARP_WFNR                     3
     123#endif
     124
    117125/////////////////////////////////////////////////////////////////////////////////////////
    118126///////////////////////////////////   HM RELATED DEFINES ////////////////////////////////
Note: See TracChangeset for help on using the changeset viewer.