Changeset 77 in 3DVCSoftware


Ignore:
Timestamp:
14 Jun 2012, 16:38:29 (12 years ago)
Author:
tech
Message:

Merged with branch/HTM-3.0Samsung REV74 including:

  • restricted residual prediction m24766
  • Inter-view residual prediction m24938
  • VPS concept m24714,m24878, m24945,m24896, m2491
  • reference list modification, restriction on IDR m24876, m24874
  • depth based motion parameter prediction m24829

Fixed bugs:

  • interview prediction
  • VSO

Added:

  • xcode project
Location:
trunk
Files:
8 added
1 deleted
50 edited

Legend:

Unmodified
Added
Removed
  • trunk/build/vc8/TLibCommon_vc8.vcproj

    r56 r77  
    357357                        </File>
    358358                        <File
     359                                RelativePath="..\..\source\Lib\TLibCommon\TComResidualGenerator.cpp"
     360                                >
     361                        </File>
     362                        <File
    359363                                RelativePath="..\..\source\Lib\TLibCommon\TComRom.cpp"
    360364                                >
     
    499503                        </File>
    500504                        <File
     505                                RelativePath="..\..\source\Lib\TLibCommon\TComResidualGenerator.h"
     506                                >
     507                        </File>
     508                        <File
    501509                                RelativePath="..\..\source\Lib\TLibCommon\TComRom.h"
    502510                                >
     
    512520                        <File
    513521                                RelativePath="..\..\source\Lib\TLibCommon\TComTrQuant.h"
     522                                >
     523                        </File>
     524                        <File
     525                                RelativePath="..\..\source\Lib\TLibCommon\TComWedgelet.h"
    514526                                >
    515527                        </File>
  • trunk/source/App/TAppDecoder/TAppDecTop.cpp

    r57 r77  
    8282Void TAppDecTop::decode()
    8383{
     84#if VIDYO_VPS_INTEGRATION
     85  increaseNumberOfViews( 0, 0, 0 );
     86#else
    8487  increaseNumberOfViews( 1 );
     88#endif
     89 
    8590#if SONY_COLPIC_AVAILABILITY
    8691  m_tDecTop[0]->setViewOrderIdx(0);
     
    140145    {
    141146      read(nalu, nalUnit);
     147#if VIDYO_VPS_INTEGRATION
     148      Int viewId = 0;
     149      Int depth = 0;
     150     
     151      if(nalu.m_nalUnitType != NAL_UNIT_VPS || nalu.m_layerId)
     152      {
     153        // code assumes that the first nal unit is VPS
     154        // currently, this is a hack that requires non-first VPSs have non-zero layer_id
     155        viewId = getVPSAccess()->getActiveVPS()->getViewId(nalu.m_layerId);
     156        depth = getVPSAccess()->getActiveVPS()->getDepthFlag(nalu.m_layerId);
     157      }
     158      viewDepthId = nalu.m_layerId;   // coding order T0D0T1D1T2D2
     159#else
    142160      Int viewId = nalu.m_viewId;
    143161      Int depth = nalu.m_isDepth ? 1 : 0;
    144162      viewDepthId = viewId * 2 + depth;   // coding order T0D0T1D1T2D2
     163#endif
     164     
    145165      newPicture[viewDepthId] = false;
    146166      if( viewDepthId >= m_tDecTop.size() )     
    147167      {
     168#if VIDYO_VPS_INTEGRATION
     169        increaseNumberOfViews( viewDepthId, viewId, depth );
     170#else
    148171        increaseNumberOfViews( viewDepthId +1 );
     172#endif   
    149173      }
    150174      if(m_iMaxTemporalLayer >= 0 && nalu.m_temporalId > m_iMaxTemporalLayer)
     
    392416  m_pocLastDisplay[viewDepthId] = -MAX_INT;
    393417}
    394 
     418#if VIDYO_VPS_INTEGRATION
     419Void  TAppDecTop::increaseNumberOfViews  ( UInt layerId, UInt viewId, UInt isDepth )
     420#else
    395421Void  TAppDecTop::increaseNumberOfViews  ( Int newNumberOfViewDepth )
    396 {
     422#endif
     423{
     424#if VIDYO_VPS_INTEGRATION
     425  Int newNumberOfViewDepth = layerId + 1;
     426#endif
    397427  if ( m_outputBitDepth == 0 )
    398428  {
    399429    m_outputBitDepth = g_uiBitDepth + g_uiBitIncrement;
    400430  }
     431#if !VIDYO_VPS_INTEGRATION
    401432  Int viewId = (newNumberOfViewDepth-1)>>1;   // coding order T0D0T1D1T2D2
    402433  Bool isDepth = ((newNumberOfViewDepth % 2) == 0);  // coding order T0D0T1D1T2D2
     434#endif
    403435  if( isDepth )
    404436    m_useDepth = true;
  • trunk/source/App/TAppDecoder/TAppDecTop.h

    r56 r77  
    7474  CamParsCollector                m_cCamParsCollector;
    7575#if DEPTH_MAP_GENERATION
     76#if VIDYO_VPS_INTEGRATION
     77  TComVPSAccess                   m_cVPSAccess;
     78#endif
    7679  TComSPSAccess                   m_cSPSAccess;
    7780  TComAUPicAccess                 m_cAUPicAccess;
     
    8588  Void  destroy           (); ///< destroy internal members
    8689  Void  decode            (); ///< main decoding function
     90#if VIDYO_VPS_INTEGRATION
     91  Void  increaseNumberOfViews   (UInt layerId, UInt viewId, UInt isDepth);
     92#else
    8793  Void  increaseNumberOfViews   (Int newNumberOfViewDepth);
     94#endif
    8895  TDecTop* getTDecTop     ( Int viewId, Bool isDepth );
    8996
     
    9299
    93100#if DEPTH_MAP_GENERATION
     101#if VIDYO_VPS_INTEGRATION
     102  TComVPSAccess*    getVPSAccess  () { return &m_cVPSAccess;   }
     103#endif
    94104  TComSPSAccess*    getSPSAccess  () { return &m_cSPSAccess;   }
    95105  TComAUPicAccess*  getAUPicAccess() { return &m_cAUPicAccess; }
  • trunk/source/App/TAppEncoder/TAppEncTop.cpp

    r56 r77  
    6767Void TAppEncTop::xInitLibCfg()
    6868{
     69#if VIDYO_VPS_INTEGRATION
     70  UInt layerId = 0;
     71  // TODO: fix the assumption here that the temporal structures are all equal across all layers???
     72  m_cVPS.setMaxTLayers( m_maxTempLayer[0] );
     73  m_cVPS.setMaxLayers( m_iNumberOfViews * (m_bUsingDepthMaps ? 2:1) );
     74  for(Int i = 0; i < MAX_TLAYER; i++)
     75  {
     76    m_cVPS.setNumReorderPics( m_numReorderPics[0][i], i );
     77    m_cVPS.setMaxDecPicBuffering( m_maxDecPicBuffering[0][i], i );
     78  }
     79#endif
     80 
    6981  for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++)
    7082  {
     
    90102    m_acTEncTopList[iViewIdx]->setIsDepth                      ( false );
    91103    m_acTEncTopList[iViewIdx]->setViewOrderIdx                 ( m_cCameraData.getViewOrderIndex()[ iViewIdx ] );
     104#if VIDYO_VPS_INTEGRATION
     105    layerId = iViewIdx * (m_bUsingDepthMaps ? 2:1);
     106    m_acTEncTopList[iViewIdx]->setLayerId                      ( layerId );
     107    m_cVPS.setDepthFlag                                        ( false, layerId );
     108    m_cVPS.setViewId                                           ( iViewIdx, layerId );
     109    m_cVPS.setViewOrderIdx                                     ( m_cCameraData.getViewOrderIndex()[ iViewIdx ], layerId );
     110    // TODO: set correct dependentFlag and dependentLayer
     111    m_cVPS.setDependentFlag                                    ( iViewIdx ? true:false, layerId );
     112    m_cVPS.setDependentLayer                                   ( layerId - (m_bUsingDepthMaps ? 2:1), layerId );
     113#endif
     114   
    92115    m_acTEncTopList[iViewIdx]->setCamParPrecision              ( m_cCameraData.getCamParsCodedPrecision  () );
    93116    m_acTEncTopList[iViewIdx]->setCamParInSliceHeader          ( m_cCameraData.getVaryingCameraParameters() );
     
    364387      m_acTEncDepthTopList[iViewIdx]->setIsDepth                      ( true );
    365388      m_acTEncDepthTopList[iViewIdx]->setViewOrderIdx                 ( m_cCameraData.getViewOrderIndex()[ iViewIdx ] );
     389#if VIDYO_VPS_INTEGRATION
     390      layerId = iViewIdx * 2 + 1;
     391      m_acTEncDepthTopList[iViewIdx]->setLayerId                      ( layerId );
     392      m_cVPS.setDepthFlag                                             ( true, layerId );
     393      m_cVPS.setViewId                                                ( iViewIdx, layerId );
     394      m_cVPS.setViewOrderIdx                                          ( m_cCameraData.getViewOrderIndex()[ iViewIdx ], layerId );
     395      m_cVPS.setDependentFlag                                         ( true, layerId );
     396      m_cVPS.setDependentLayer                                        ( layerId-1, layerId);
     397#endif
    366398      m_acTEncDepthTopList[iViewIdx]->setCamParPrecision              ( 0 );
    367399      m_acTEncDepthTopList[iViewIdx]->setCamParInSliceHeader          ( false );
     
    11341166    case NAL_UNIT_SPS:
    11351167    case NAL_UNIT_PPS:
     1168#if VIDYO_VPS_INTEGRATION
     1169    case NAL_UNIT_VPS:
     1170#endif
    11361171      m_essentialBytes += *it_stats;
    11371172      break;
  • trunk/source/App/TAppEncoder/TAppEncTop.h

    r56 r77  
    8080
    8181#if DEPTH_MAP_GENERATION
     82#if VIDYO_VPS_INTEGRATION
     83  TComVPSAccess               m_cVPSAccess;
     84#endif
    8285  TComSPSAccess               m_cSPSAccess;
    8386  TComAUPicAccess             m_cAUPicAccess;
    8487#endif
    8588
     89#if VIDYO_VPS_INTEGRATION
     90  TComVPS                     m_cVPS;
     91#endif
     92 
    8693#if HHI_VSO
    8794  TRenTop                     m_cRendererTop;
     
    131138#endif
    132139 
     140#if VIDYO_VPS_INTEGRATION
     141  TComVPS*          getVPS()  { return &m_cVPS; }
     142  TComVPSAccess*    getVPSAccess  () { return &m_cVPSAccess;   }
     143#endif
     144 
    133145#if DEPTH_MAP_GENERATION
    134146  TComSPSAccess*    getSPSAccess  () { return &m_cSPSAccess;   }
  • trunk/source/Lib/TLibCommon/CommonDef.h

    r56 r77  
    5858
    5959#define HM_VERSION        "6.1"
    60 #define NV_VERSION        "3.0"                 ///< Current software version
     60#define NV_VERSION        "3.1rc1"                 ///< Current software version
    6161
    6262// ====================================================================================================================
     
    138138#define PDM_NO_INTER_UPDATE               1         // no update for inter (but not inter-view) predicted blocks
    139139#define PDM_MERGE_POS                     0         // position of pdm in merge list (0..4)
     140#if SAIT_IMPROV_MOTION_PRED_M24829
     141#define PDM_AMVP_POS                      0         // position of pdm in amvp list  (0..3)
     142#else
    140143#define PDM_AMVP_POS                      2         // position of pdm in amvp list  (0..3)
     144#endif
    141145#define PDM_OUTPUT_PRED_DEPTH_MAP         0         // output prediction depth map (for debugging)
    142146
     
    168172#define LOG2_DISP_PREC_LUT                              2                               ///< log2 of disparity precision used in integer disparity LUTs
    169173
     174// ====================================================================================================================
     175// VPS constants
     176// ====================================================================================================================
     177#if VIDYO_VPS_INTEGRATION
     178#define MAX_LAYER_NUM                     MAX_VIEW_NUM
     179#define VPS_EXTENSION_TYPE_MULTI_VIEW     0
     180#endif
    170181
    171182// ====================================================================================================================
     
    483494  NAL_UNIT_RESERVED_23,
    484495  NAL_UNIT_UNSPECIFIED_24,
     496#if VIDYO_VPS_INTEGRATION
     497        NAL_UNIT_VPS,
     498#else
    485499  NAL_UNIT_UNSPECIFIED_25,
     500#endif
    486501  NAL_UNIT_UNSPECIFIED_26,
    487502  NAL_UNIT_UNSPECIFIED_27,
  • trunk/source/Lib/TLibCommon/NAL.h

    r56 r77  
    5151  NalRefIdc   m_nalRefIDC;   ///< nal_ref_idc
    5252#endif
     53#if VIDYO_VPS_INTEGRATION
     54        unsigned    m_layerId;
     55  unsigned    m_temporalId;  ///< temporal_id
     56#else
    5357  Int         m_viewId;      ///< view_id
    5458  Bool        m_isDepth;     ///< is_depth
     
    5660#if !H0388
    5761  bool        m_OutputFlag;  ///< output_flag
     62#endif
    5863#endif
    5964
     
    6469    NalUnitType nalUnitType,
    6570    Bool        nalRefFlag,
     71#if !VIDYO_VPS_INTEGRATION   
    6672    Int         viewId,
    6773    Bool        isDepth,
    68     Int         temporalId = 0)
     74#else
     75    unsigned    layerId,
     76#endif
     77    unsigned       temporalId = 0)
    6978    :m_nalUnitType (nalUnitType)
    7079    ,m_nalRefFlag  (nalRefFlag)
     80#if !VIDYO_VPS_INTEGRATION
    7181    ,m_viewId      (viewId)
    7282    ,m_isDepth     (isDepth)
     83#else
     84    ,m_layerId     (layerId)
     85#endif
    7386    ,m_temporalId  (temporalId)
    7487  {}
     
    8396    m_nalUnitType = nalUnitType;
    8497    m_nalRefIDC   = nalRefIDC;
     98#if !VIDYO_VPS_INTEGRATION
    8599    m_viewId      = viewId;
    86100    m_isDepth     = isDepth;
     101#else
     102                m_layerId = layerId;
     103#endif
    87104    m_temporalId  = temporalID;
    88105  }
     
    92109    NalUnitType  nalUnitType,
    93110    NalRefIdc    nalRefIDC,
     111#if !VIDYO_VPS_INTEGRATION   
    94112    Int          viewId,
    95113    Bool         isDepth,
     114#else
     115    unsigned         layerId,
     116#endif
    96117    unsigned     temporalID = 0,
    97118    bool         outputFlag = true)
     
    99120    m_nalUnitType = nalUnitType;
    100121    m_nalRefIDC   = nalRefIDC;
     122#if !VIDYO_VPS_INTEGRATION
    101123    m_viewId      = viewId;
    102124    m_isDepth     = isDepth;
     125#else
     126                m_layerId = layerId;
     127#endif
    103128    m_temporalId  = temporalID;
    104129    m_OutputFlag  = outputFlag;
  • trunk/source/Lib/TLibCommon/TComDataCU.cpp

    r56 r77  
    28832883}
    28842884
     2885#if LG_RESTRICTEDRESPRED_M24766
     2886Void TComDataCU::getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx, Bool bLCU)
     2887{
     2888        UInt uiNumPartition  = bLCU ? (getWidth(uiAbsPartIdx)*getHeight(uiAbsPartIdx) >> 4) : m_uiNumPartition;
     2889        UInt uiTmpAbsPartIdx = bLCU ? uiAbsPartIdx : 0;
     2890
     2891        switch ( m_pePartSize[uiTmpAbsPartIdx] )
     2892        {
     2893        case SIZE_2NxN:
     2894                riWidth = getWidth(uiTmpAbsPartIdx);      riHeight = getHeight(uiTmpAbsPartIdx) >> 1; ruiPartAddr = ( uiPartIdx == 0 )? 0 : uiNumPartition >> 1;
     2895                break;
     2896        case SIZE_Nx2N:
     2897                riWidth = getWidth(uiTmpAbsPartIdx) >> 1; riHeight = getHeight(uiTmpAbsPartIdx);      ruiPartAddr = ( uiPartIdx == 0 )? 0 : uiNumPartition >> 2;
     2898                break;
     2899        case SIZE_NxN:
     2900                riWidth = getWidth(uiTmpAbsPartIdx) >> 1; riHeight = getHeight(uiTmpAbsPartIdx) >> 1; ruiPartAddr = ( uiNumPartition >> 2 ) * uiPartIdx;
     2901                break;
     2902        case SIZE_2NxnU:
     2903                riWidth     = getWidth(uiTmpAbsPartIdx);
     2904                riHeight    = ( uiPartIdx == 0 ) ?  getHeight(uiTmpAbsPartIdx) >> 2 : ( getHeight(uiTmpAbsPartIdx) >> 2 ) + ( getHeight(uiTmpAbsPartIdx) >> 1 );
     2905                ruiPartAddr = ( uiPartIdx == 0 ) ? 0 : uiNumPartition >> 3;
     2906                break;
     2907        case SIZE_2NxnD:
     2908                riWidth     = getWidth(uiTmpAbsPartIdx);
     2909                riHeight    = ( uiPartIdx == 0 ) ?  ( getHeight(uiTmpAbsPartIdx) >> 2 ) + ( getHeight(uiTmpAbsPartIdx) >> 1 ) : getHeight(uiTmpAbsPartIdx) >> 2;
     2910                ruiPartAddr = ( uiPartIdx == 0 ) ? 0 : (uiNumPartition >> 1) + (uiNumPartition >> 3);
     2911                break;
     2912        case SIZE_nLx2N:
     2913                riWidth     = ( uiPartIdx == 0 ) ? getWidth(uiTmpAbsPartIdx) >> 2 : ( getWidth(uiTmpAbsPartIdx) >> 2 ) + ( getWidth(uiTmpAbsPartIdx) >> 1 );
     2914                riHeight    = getHeight(uiTmpAbsPartIdx);
     2915                ruiPartAddr = ( uiPartIdx == 0 ) ? 0 : uiNumPartition >> 4;
     2916                break;
     2917        case SIZE_nRx2N:
     2918                riWidth     = ( uiPartIdx == 0 ) ? ( getWidth(uiTmpAbsPartIdx) >> 2 ) + ( getWidth(uiTmpAbsPartIdx) >> 1 ) : getWidth(uiTmpAbsPartIdx) >> 2;
     2919                riHeight    = getHeight(uiTmpAbsPartIdx);
     2920                ruiPartAddr = ( uiPartIdx == 0 ) ? 0 : (uiNumPartition >> 2) + (uiNumPartition >> 4);
     2921                break;
     2922        default:
     2923                assert ( m_pePartSize[0] == SIZE_2Nx2N );
     2924                riWidth = getWidth(uiTmpAbsPartIdx);      riHeight = getHeight(uiTmpAbsPartIdx);      ruiPartAddr = 0;
     2925                break;
     2926        }
     2927}
     2928#else
    28852929Void TComDataCU::getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight )
    28862930{
     
    29222966  }
    29232967}
    2924 
     2968#endif
     2969
     2970#if LG_RESTRICTEDRESPRED_M24766
     2971Int TComDataCU::getResiPredMode(UInt uiPartAddr)
     2972{
     2973        Int iAddResiShift = -1;
     2974
     2975        for(UInt uiRefIdx = 0; uiRefIdx < 2; uiRefIdx++)
     2976        {
     2977                RefPicList eRefList = uiRefIdx ? REF_PIC_LIST_1 : REF_PIC_LIST_0;
     2978                Int iBestRefIdx = getCUMvField(eRefList)->getRefIdx(uiPartAddr);
     2979                if(iBestRefIdx >= 0 && getSlice()->getViewId() == getSlice()->getRefViewId(eRefList, iBestRefIdx))
     2980                        iAddResiShift++;
     2981        }
     2982
     2983        return iAddResiShift;
     2984}
     2985
     2986Void TComDataCU::getPUResiPredShift(Int *iPUResiPredShift, UInt uiAbsPartIndex)
     2987{
     2988        UInt uiPartSize = getPartitionSize(uiAbsPartIndex);
     2989        UInt uiPartAddr;
     2990        Int iWidth, iHeight;
     2991        Int iAddResiShift;
     2992
     2993        if(uiPartSize == SIZE_2Nx2N)
     2994        {
     2995                iAddResiShift = getResiPredMode(uiAbsPartIndex);
     2996                for(UInt i = 0; i < 4; i++)
     2997                        iPUResiPredShift[i] = (getSlice()->getPPS()->getUseWP() || getInterDir(uiAbsPartIndex) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     2998                return;
     2999        }
     3000
     3001        if(uiPartSize == SIZE_2NxN || uiPartSize == SIZE_2NxnU || uiPartSize == SIZE_2NxnD)
     3002        {
     3003                for(UInt i = 0; i < 2; i++)
     3004                {
     3005                        getPartIndexAndSize(i, uiPartAddr, iWidth, iHeight, uiAbsPartIndex, true);
     3006                        uiPartAddr += uiAbsPartIndex;
     3007                        iAddResiShift = getResiPredMode(uiPartAddr);
     3008                        iPUResiPredShift[2*i] = iPUResiPredShift[2*i+1] = (getSlice()->getPPS()->getUseWP() || getInterDir(uiPartAddr) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     3009                }
     3010                return;
     3011        }
     3012
     3013        if(uiPartSize == SIZE_Nx2N || uiPartSize == SIZE_nLx2N || uiPartSize == SIZE_nRx2N)
     3014        {
     3015                for(UInt i = 0; i < 2; i++)
     3016                {
     3017                        getPartIndexAndSize(i, uiPartAddr, iWidth, iHeight, uiAbsPartIndex, true);
     3018                        uiPartAddr += uiAbsPartIndex;
     3019                        iAddResiShift = getResiPredMode(uiPartAddr);
     3020                        iPUResiPredShift[i] = iPUResiPredShift[2+i] = (getSlice()->getPPS()->getUseWP() || getInterDir(uiPartAddr) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     3021                }
     3022                return;
     3023        }
     3024
     3025        if(uiPartSize == SIZE_NxN)
     3026        {
     3027                for(UInt i = 0; i < 4; i++)
     3028                {
     3029                        getPartIndexAndSize(i, uiPartAddr, iWidth, iHeight, uiAbsPartIndex, true);
     3030                        uiPartAddr += uiAbsPartIndex;
     3031                        iAddResiShift = getResiPredMode(uiPartAddr);
     3032                        iPUResiPredShift[i] = (getSlice()->getPPS()->getUseWP() || getInterDir(uiPartAddr) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     3033                }
     3034        }
     3035
     3036}
     3037#endif
    29253038
    29263039Void TComDataCU::getMvField ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, TComMvField& rcMvField )
     
    47234836  Int iNeibRefPOC;
    47244837
     4838#if HHI_FIX
     4839  if( pcTmpCU->getCUMvField(eRefPicList2nd)->getRefIdx(uiIdx) >= 0 )
     4840  {
     4841    iNeibRefPOC = pcTmpCU->getSlice()->getRefPOC( eRefPicList2nd, pcTmpCU->getCUMvField(eRefPicList2nd)->getRefIdx(uiIdx) );
     4842    if( pcTmpCU->getSlice()->getRefViewId( eRefPicList2nd, pcTmpCU->getCUMvField(eRefPicList2nd)->getRefIdx(uiIdx) ) != m_pcSlice->getRefViewId( eRefPicList, iRefIdx ) )
     4843      return false;
     4844    if( iNeibRefPOC == iCurrRefPOC ) // Same Reference Frame But Diff List//
     4845    {
     4846      TComMv cMvPred = pcTmpCU->getCUMvField(eRefPicList2nd)->getMv(uiIdx);
     4847
     4848      clipMv(cMvPred);
     4849      pInfo->m_acMvCand[ pInfo->iN++] = cMvPred;
     4850      return true;
     4851    }
     4852  }
     4853#endif
    47254854  //---------------  V1 (END) ------------------//
    47264855  if( pcTmpCU->getCUMvField(eRefPicList)->getRefIdx(uiIdx) >= 0)
     
    48514980  iColRefViewOrderIdx = pColCU->getSlice()->getRefPic( eColRefPicList, pColCU->getCUMvField(eColRefPicList)->getRefIdx(uiAbsPartAddr))->getViewOrderIdx();
    48524981#else
     4982#if HHI_FIX
     4983  if( pColCU->getSlice()->getRefViewId( eColRefPicList, iColRefIdx ) != pColCU->getSlice()->getViewId() )
     4984#else
    48534985  if( pColCU->getSlice()->getRefViewId( eColRefPicList, iColRefIdx ) != m_pcSlice->getRefPic( eRefPicList, riRefIdx )->getViewId() )
     4986#endif
    48544987  {
    48554988    return false;
     
    48675000  else if((iColPOC == iColRefPOC)&&(iCurrPOC == iCurrRefPOC))
    48685001    iScale = xGetDistScaleFactor(iCurrViewOrderIdx, iCurrRefViewOrderIdx, iColViewOrderIdx, iColRefViewOrderIdx);
     5002#if HHI_FIX //GT: fix reported by Sony
     5003  else
     5004    return false;
     5005#endif
    48695006#else
    48705007  iScale = xGetDistScaleFactor(iCurrPOC, iCurrRefPOC, iColPOC, iColRefPOC);
     
    58395976#if HHI_INTER_VIEW_RESIDUAL_PRED
    58405977Bool
    5841 TComDataCU::getResidualSamples( UInt uiPartIdx, TComYuv* pcYuv )
     5978TComDataCU::getResidualSamples( UInt uiPartIdx,
     5979#if QC_SIMPLIFIEDIVRP_M24938
     5980  Bool bRecon ,
     5981#endif
     5982  TComYuv* pcYuv )
    58425983{
    58435984  TComResidualGenerator*  pcResidualGenerator = m_pcSlice->getSPS()->getResidualGenerator();
    58445985  ROFRS( pcResidualGenerator, false );
    5845   return pcResidualGenerator->getResidualSamples( this, uiPartIdx, pcYuv );
     5986  return pcResidualGenerator->getResidualSamples( this, uiPartIdx, pcYuv
     5987#if QC_SIMPLIFIEDIVRP_M24938
     5988    , bRecon
     5989#endif
     5990    );
    58465991}
    58475992#endif
  • trunk/source/Lib/TLibCommon/TComDataCU.h

    r56 r77  
    521521#endif
    522522#if HHI_INTER_VIEW_RESIDUAL_PRED
    523   Bool          getResidualSamples( UInt uiPartIdx, TComYuv* pcYuv = 0 );
     523  Bool          getResidualSamples( UInt uiPartIdx,
     524#if QC_SIMPLIFIEDIVRP_M24938
     525    Bool bRecon ,
     526#endif
     527    TComYuv* pcYuv = 0 );
    524528#endif
    525529  // -------------------------------------------------------------------------------------------------------------------
    526530  // member functions for accessing partition information
    527531  // -------------------------------------------------------------------------------------------------------------------
    528  
     532#if LG_RESTRICTEDRESPRED_M24766
     533  Void          getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx = 0, Bool bLCU = false);
     534#else
    529535  Void          getPartIndexAndSize   ( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight );
     536#endif
     537#if LG_RESTRICTEDRESPRED_M24766
     538  Int           getResiPredMode(UInt uiPartAddr);
     539  Void          getPUResiPredShift (Int *iPUPredResiShift, UInt uiAbsPartIndex);
     540#endif
    530541  UChar         getNumPartInter       ();
    531542  Bool          isFirstAbsZorderIdxInDepth (UInt uiAbsPartIdx, UInt uiDepth);
  • trunk/source/Lib/TLibCommon/TComDepthMapGenerator.cpp

    r56 r77  
    122122}
    123123
     124#if VIDYO_VPS_INTEGRATION
     125Void
     126TComDepthMapGenerator::init( TComPrediction* pcPrediction, TComVPSAccess* pcVPSAccess, TComSPSAccess* pcSPSAccess, TComAUPicAccess* pcAUPicAccess )
     127#else
    124128Void
    125129TComDepthMapGenerator::init( TComPrediction* pcPrediction, TComSPSAccess* pcSPSAccess, TComAUPicAccess* pcAUPicAccess )
     130#endif
    126131{
    127132  AOF( pcPrediction  );
     
    130135  uninit();
    131136  m_pcPrediction  = pcPrediction;
     137#if VIDYO_VPS_INTEGRATION
     138  m_pcVPSAccess   = pcVPSAccess;
     139#endif
    132140  m_pcSPSAccess   = pcSPSAccess;
    133141  m_pcAUPicAccess = pcAUPicAccess;
     
    157165
    158166  // update SPS list and AU pic list and set depth map generator in SPS
     167#if VIDYO_VPS_INTEGRATION
     168  m_pcVPSAccess  ->addVPS( pcPic->getVPS() );
     169#endif
    159170  m_pcSPSAccess  ->addSPS( pcPic->getSPS() );
    160171  m_pcAUPicAccess->addPic( pcPic );
     
    14671478  Int           iCurrPosY;
    14681479  pcPredDepthMap->getTopLeftSamplePos( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr, iCurrPosX, iCurrPosY );
     1480#if SAIT_IMPROV_MOTION_PRED_M24829 // max disparity within PU
     1481  Int DiWidth  = iCurrPosX+(iWidth  >> m_uiSubSampExpX);
     1482  Int DiHeight = iCurrPosY+(iHeight >> m_uiSubSampExpY);
     1483  Int maxDepth = MIN_INT;
     1484
     1485  for(Int y=iCurrPosY; y<DiHeight ;y++)
     1486  {
     1487    for(Int x=iCurrPosX; x<DiWidth; x++)
     1488    {
     1489      if(piPredDepthMap[ x + y * iCurrStride ] > maxDepth)
     1490      {
     1491        maxDepth = piPredDepthMap[ x + y * iCurrStride ];
     1492      }
     1493    }
     1494  }
     1495  iCurrPosX  += ( ( iWidth  >> m_uiSubSampExpX ) - 1 ) >> 1;
     1496  iCurrPosY  += ( ( iHeight >> m_uiSubSampExpY ) - 1 ) >> 1;
     1497  riPrdDepth  = maxDepth;
     1498#else
    14691499  iCurrPosX  += ( ( iWidth  >> m_uiSubSampExpX ) - 1 ) >> 1;
    14701500  iCurrPosY  += ( ( iHeight >> m_uiSubSampExpY ) - 1 ) >> 1;
    14711501  riPrdDepth  = piPredDepthMap[ iCurrPosX + iCurrPosY * iCurrStride ];
     1502#endif
    14721503  if( piPosX )
    14731504  {
  • trunk/source/Lib/TLibCommon/TComDepthMapGenerator.h

    r56 r77  
    5050
    5151#if DEPTH_MAP_GENERATION
    52 
     52#if VIDYO_VPS_INTEGRATION
     53class TComVPSAccess // would be better to have a real VPS buffer
     54{
     55public:
     56  TComVPSAccess ()  { clear(); }
     57  ~TComVPSAccess()  {}
     58
     59  Void      clear   ()                                { ::memset( m_aacVPS, 0x00, sizeof( m_aacVPS ) ); m_uiActiceVPSId = 0;}
     60  Void      addVPS  ( TComVPS* pcVPS )                { m_aacVPS[ pcVPS->getVPSId() ] = pcVPS; }
     61  TComVPS*  getVPS  ( UInt uiVPSId )                  { return m_aacVPS[ uiVPSId ]; }
     62  TComVPS*  getActiveVPS  ( )                         { return m_aacVPS[ m_uiActiceVPSId ]; }
     63  Void      setActiveVPSId  ( UInt activeVPSId )      { m_uiActiceVPSId = activeVPSId; }
     64private:
     65  TComVPS*  m_aacVPS[ MAX_NUM_VPS ];
     66  UInt      m_uiActiceVPSId;
     67};
     68#endif
    5369
    5470class TComSPSAccess // would be better to have a real SPS buffer
     
    113129  Void  destroy               ();
    114130
     131#if VIDYO_VPS_INTEGRATION
     132  Void  init( TComPrediction* pcPrediction, TComVPSAccess* pcVPSAccess, TComSPSAccess* pcSPSAccess, TComAUPicAccess* pcAUPicAccess );
     133#endif
    115134  Void  init                  ( TComPrediction* pcPrediction, TComSPSAccess* pcSPSAccess, TComAUPicAccess* pcAUPicAccess );
    116135  Void  uninit                ();
     
    136155
    137156  TComPrediction*   getPrediction ()  { return m_pcPrediction;  }
     157#if VIDYO_VPS_INTEGRATION
     158  TComVPSAccess*    getVPSAccess  ()  { return m_pcVPSAccess;   }
     159#endif
    138160  TComSPSAccess*    getSPSAccess  ()  { return m_pcSPSAccess;   }
    139161  TComAUPicAccess*  getAUPicAccess()  { return m_pcAUPicAccess; }
     
    198220  Bool              m_bDecoder;
    199221  TComPrediction*   m_pcPrediction;
     222#if VIDYO_VPS_INTEGRATION
     223  TComVPSAccess*    m_pcVPSAccess;
     224#endif
    200225  TComSPSAccess*    m_pcSPSAccess;
    201226  TComAUPicAccess*  m_pcAUPicAccess;
  • trunk/source/Lib/TLibCommon/TComPic.h

    r56 r77  
    120120  TComSlice*    getSlice(Int i)       { return  m_apcPicSym->getSlice(i);  }
    121121  TComSlice*    getCurrSlice()        { return  m_apcPicSym->getSlice(m_uiCurrSliceIdx);  }
     122#if VIDYO_VPS_INTEGRATION
     123  TComVPS*      getVPS()              { return  m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getVPS();  }
     124#endif
    122125  TComSPS*      getSPS()              { return  m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getSPS();  }
    123126  Int           getPOC()              { return  m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getPOC();  }
  • trunk/source/Lib/TLibCommon/TComResidualGenerator.cpp

    r56 r77  
    221221
    222222Bool
    223 TComResidualGenerator::getResidualSamples( TComDataCU* pcCU, UInt uiPUIdx, TComYuv* pcYuv )
     223TComResidualGenerator::getResidualSamples( TComDataCU* pcCU, UInt uiPUIdx, TComYuv* pcYuv
     224#if QC_SIMPLIFIEDIVRP_M24938
     225  , Bool bRecon
     226#endif
     227  )
    224228{
    225229  AOF(  pcCU );
     
    231235  iBlkHeight  = pcCU->getHeight ( 0 );
    232236  pcCU->getPic()->getPicYuvRec()->getTopLeftSamplePos( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr, iXPos, iYPos );
    233   return getResidualSamples( pcCU->getPic(), (UInt)iXPos, (UInt)iYPos, (UInt)iBlkWidth, (UInt)iBlkHeight, pcYuv );
     237  return getResidualSamples( pcCU->getPic(), (UInt)iXPos, (UInt)iYPos, (UInt)iBlkWidth, (UInt)iBlkHeight, pcYuv
     238#if QC_SIMPLIFIEDIVRP_M24938
     239    , bRecon
     240#endif
     241    );
    234242}
    235243 
    236244Bool
    237 TComResidualGenerator::getResidualSamples( TComPic* pcPic, UInt uiXPos, UInt uiYPos, UInt uiBlkWidth, UInt uiBlkHeight, TComYuv* pcYuv )
     245TComResidualGenerator::getResidualSamples( TComPic* pcPic, UInt uiXPos, UInt uiYPos, UInt uiBlkWidth, UInt uiBlkHeight, TComYuv* pcYuv
     246#if QC_SIMPLIFIEDIVRP_M24938
     247  , Bool bRecon
     248#endif
     249  )
    238250{
    239251  UInt  uiBaseViewId  = m_pcDepthMapGenerator->getBaseViewId( 0 );
     
    243255    pcYuv = m_ppcYuvTmp[1];
    244256  }
    245   xSetPredResidualBlock( pcPic, uiBaseViewId, uiXPos, uiYPos, uiBlkWidth, uiBlkHeight, pcYuv );
     257#if QC_SIMPLIFIEDIVRP_M24938
     258  UInt uiXPosInRefView = uiXPos , uiYPosInRefView = uiYPos;
     259#endif
     260  xSetPredResidualBlock( pcPic, uiBaseViewId, uiXPos, uiYPos, uiBlkWidth, uiBlkHeight, pcYuv
     261#if QC_SIMPLIFIEDIVRP_M24938
     262    , &uiXPosInRefView , &uiYPosInRefView , bRecon
     263#endif
     264    );
     265
     266#if QC_SIMPLIFIEDIVRP_M24938
     267  return xIsNonZeroByCBF( uiBaseViewId , uiXPosInRefView , uiYPosInRefView , uiBlkWidth , uiBlkHeight );
     268#else
    246269  return xIsNonZero( pcYuv, uiBlkWidth, uiBlkHeight );
    247 }
     270#endif
     271}
     272
     273#if QC_SIMPLIFIEDIVRP_M24938
     274Bool TComResidualGenerator::xIsNonZeroByCBF( UInt uiBaseViewId , UInt uiXPos , UInt uiYPos, UInt uiBlkWidth , UInt uiBlkHeight )
     275{
     276  TComPic* pcBasePic   = m_pcAUPicAccess->getPic( uiBaseViewId );
     277  const Int nMaxPicX = pcBasePic->getSPS()->getPicWidthInLumaSamples() - 1;
     278  const Int nMaxPicY = pcBasePic->getSPS()->getPicHeightInLumaSamples() - 1;
     279  for( UInt y = 0 ; y < uiBlkHeight ; y +=4 )
     280  {
     281    for( UInt x = 0 ; x <= uiBlkWidth ; x += 4 )
     282    {      // to cover both the mapped CU and the 1-pixel-right-shifted mapped CU
     283      Int iCuAddr = 0, iAbsZorderIdx = 0;
     284      pcBasePic->getPicYuvRec()->getCUAddrAndPartIdx( Min( uiXPos + x , nMaxPicX ) , Min( uiYPos + y , nMaxPicY ) , iCuAddr , iAbsZorderIdx );
     285      TComDataCU *pCUInRefView = pcBasePic->getCU( iCuAddr );
     286      if( pCUInRefView->isIntra( iAbsZorderIdx ) )
     287        // no inter-view residual pred from a intra CU
     288        continue;
     289      UInt uiTempTrDepth = pCUInRefView->getTransformIdx( iAbsZorderIdx );
     290      if( pCUInRefView->getCbf( iAbsZorderIdx , TEXT_LUMA , uiTempTrDepth )
     291        || pCUInRefView->getCbf( iAbsZorderIdx , TEXT_CHROMA_U , uiTempTrDepth )
     292        || pCUInRefView->getCbf( iAbsZorderIdx , TEXT_CHROMA_V , uiTempTrDepth ) )
     293        return( true );
     294}
     295  }
     296
     297  return( false );
     298}
     299#endif
    248300
    249301
     
    335387  Pel*    pRes      = pcCUResidual->getLumaAddr();
    336388  UInt    uiLumaTrMode, uiChromaTrMode;
     389#if LG_RESTRICTEDRESPRED_M24766
     390  Int     iPUPredResiShift[4];
     391#endif
    337392  pcCU->convertTransIdx             ( 0, pcCU->getTransformIdx( 0 ), uiLumaTrMode, uiChromaTrMode );
    338393#if H0736_AVC_STYLE_QP_RANGE
     
    361416  {
    362417    AOF( pcCU->getResPredAvail( 0 ) );
    363     Bool bOK = pcCU->getResidualSamples( 0, m_ppcYuvTmp[0] );
     418    Bool bOK = pcCU->getResidualSamples( 0,
     419#if QC_SIMPLIFIEDIVRP_M24938
     420      true,
     421#endif
     422      m_ppcYuvTmp[0] );
    364423    AOF( bOK );
     424#if LG_RESTRICTEDRESPRED_M24766
     425        pcCU->getPUResiPredShift(iPUPredResiShift, 0);
     426        pcCUResidual->add(iPUPredResiShift, pcCU->getPartitionSize(0), m_ppcYuvTmp[0], pcCU->getWidth( 0 ), pcCU->getHeight( 0 ) );
     427#else
    365428    pcCUResidual->add( m_ppcYuvTmp[0], pcCU->getWidth( 0 ), pcCU->getHeight( 0 ) );
     429#endif
    366430  }
    367431
     
    423487
    424488Void 
    425 TComResidualGenerator::xSetPredResidualBlock( TComPic* pcPic, UInt uiBaseViewId, UInt uiXPos, UInt uiYPos, UInt uiBlkWidth, UInt uiBlkHeight, TComYuv* pcYuv )
     489TComResidualGenerator::xSetPredResidualBlock( TComPic* pcPic, UInt uiBaseViewId, UInt uiXPos, UInt uiYPos, UInt uiBlkWidth, UInt uiBlkHeight, TComYuv* pcYuv
     490#if QC_SIMPLIFIEDIVRP_M24938
     491  , UInt * puiXPosInRefView , UInt * puiYPosInRefView , Bool bRecon
     492#endif
     493  )
    426494{
    427495  //===== set and check some basic variables =====
     
    456524  Pel*          pSrcSamplesY= pcBaseRes->getLumaAddr ( 0 ) + uiYPos * iSrcStrideY;
    457525  Pel*          pDesSamplesY= pcYuv    ->getLumaAddr ();
     526
     527#if QC_SIMPLIFIEDIVRP_M24938
     528  if( puiXPosInRefView != NULL )
     529    *puiXPosInRefView = Max( 0, Min( iYMaxPosX, iYRefPosX0 ) );
     530  if( puiYPosInRefView != NULL )
     531    *puiYPosInRefView = uiYPos;
     532  if( bRecon == false )
     533    return;
     534#endif
     535
    458536  for(   Int iY = 0; iY < iYHeight; iY++, pSrcSamplesY += iSrcStrideY, pDesSamplesY += iDesStrideY )
    459537  {
  • trunk/source/Lib/TLibCommon/TComResidualGenerator.h

    r5 r77  
    6969  Void  setRecResidualPic     ( TComPic*      pcPic );
    7070
    71   Bool  getResidualSamples    ( TComDataCU*   pcCU,  UInt uiPUIdx, TComYuv* pcYuv );
    72   Bool  getResidualSamples    ( TComPic* pcPic, UInt uiXPos, UInt uiYPos, UInt uiBlkWidth, UInt uiBlkHeight, TComYuv* pcYuv );
     71  Bool  getResidualSamples    ( TComDataCU*   pcCU,  UInt uiPUIdx, TComYuv* pcYuv
     72#if QC_SIMPLIFIEDIVRP_M24938
     73    , Bool bRecon
     74#endif
     75    );
     76  Bool  getResidualSamples    ( TComPic* pcPic, UInt uiXPos, UInt uiYPos, UInt uiBlkWidth, UInt uiBlkHeight, TComYuv* pcYuv
     77#if QC_SIMPLIFIEDIVRP_M24938
     78    , Bool bRecon
     79#endif
     80    );
    7381
    7482private:
     
    8088  Void  xClearResidual        (                      TComYuv* pcCUResidual, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight );
    8189
    82   Void  xSetPredResidualBlock ( TComPic*      pcPic, UInt uiBaseViewId, UInt uiXPos, UInt uiYPos, UInt uiBlkWidth, UInt uiBlkHeight, TComYuv* pcYuv );
     90  Void  xSetPredResidualBlock ( TComPic*      pcPic, UInt uiBaseViewId, UInt uiXPos, UInt uiYPos, UInt uiBlkWidth, UInt uiBlkHeight, TComYuv* pcYuv
     91#if QC_SIMPLIFIEDIVRP_M24938
     92    , UInt * puiXPosInRefView , UInt * puiYPosInRefView , Bool bRecon
     93#endif
     94    );
    8395  Bool  xIsNonZero            ( TComYuv*      pcYuv, UInt uiBlkWidth, UInt uiBlkHeight );
     96#if QC_SIMPLIFIEDIVRP_M24938
     97  Bool  xIsNonZeroByCBF       ( UInt uiBaseViewId , UInt uiXPos , UInt uiYPos, UInt uiBlkWidth , UInt uiBlkHeight );
     98#endif
    8499
    85100  Void  xDumpResidual         ( TComPic*      pcPic, char* pFilenameBase );
  • trunk/source/Lib/TLibCommon/TComRom.cpp

    r56 r77  
    11881188  assert( uiWidth == uiHeight );
    11891189
    1190   UChar    uhStartX,    uhStartY,    uhEndX,    uhEndY;
    1191   Int   iStepStartX, iStepStartY, iStepEndX, iStepEndY;
     1190  UChar    uhStartX = 0,    uhStartY = 0,    uhEndX = 0,    uhEndY = 0;
     1191  Int   iStepStartX = 0, iStepStartY = 0, iStepEndX = 0, iStepEndY = 0;
    11921192
    11931193  UInt uiBlockSize = 0;
  • trunk/source/Lib/TLibCommon/TComSlice.cpp

    r61 r77  
    13051305}
    13061306
     1307// ------------------------------------------------------------------------------------------------
     1308// Video parameter set (VPS)
     1309// ------------------------------------------------------------------------------------------------
     1310#if VIDYO_VPS_INTEGRATION
     1311TComVPS::TComVPS()
     1312: m_VPSId                     (  0)
     1313, m_uiMaxTLayers              (  1)
     1314, m_uiMaxLayers               (  1)
     1315, m_bTemporalIdNestingFlag    (false)
     1316, m_uiExtensionType           (  0)
     1317{
     1318  for( Int i = 0; i < MAX_LAYER_NUM; i++)
     1319  {
     1320    m_uiDependentLayer[i] = i? i-1: 0;
     1321    m_bDependentFlag[i] = false;
     1322    m_uiViewId[i] = 0;
     1323    m_bDepthFlag[i] = 0;
     1324    m_iViewOrderIdx[i] = 0;
     1325  }
     1326 
     1327  for( Int i = 0; i < MAX_TLAYER; i++)
     1328  {
     1329    m_numReorderPics[i] = 0;
     1330    m_uiMaxDecPicBuffering[i] = 0;
     1331    m_uiMaxLatencyIncrease[i] = 0;
     1332  }
     1333}
     1334
     1335TComVPS::~TComVPS()
     1336{
     1337       
     1338       
     1339}
     1340
     1341#endif
     1342
    13071343
    13081344// ------------------------------------------------------------------------------------------------
     
    13111347
    13121348TComSPS::TComSPS()
     1349#if VIDYO_VPS_INTEGRATION
     1350: m_VPSId                     (  0)
     1351, m_SPSId                     (  0)
     1352#else
    13131353: m_SPSId                     (  0)
     1354#endif
    13141355, m_ProfileIdc                (  0)
    13151356, m_LevelIdc                  (  0)
     
    21552196, m_ppsMap(MAX_NUM_PPS)
    21562197, m_apsMap(MAX_NUM_APS)
     2198#if VIDYO_VPS_INTEGRATION
     2199, m_vpsMap(MAX_NUM_VPS)
     2200#endif
    21572201{
    21582202}
  • trunk/source/Lib/TLibCommon/TComSlice.h

    r56 r77  
    144144#endif
    145145
     146#if VIDYO_VPS_INTEGRATION
     147/// VPS class
     148
     149class TComVPS
     150{
     151private:
     152  Int         m_VPSId;
     153        UInt                            m_uiMaxTLayers;
     154        UInt                            m_uiMaxLayers;
     155        Bool                            m_bTemporalIdNestingFlag;
     156
     157        UInt        m_uiExtensionType;
     158 
     159  Bool        m_bDependentFlag[MAX_LAYER_NUM];
     160  UInt        m_uiViewId[MAX_LAYER_NUM];
     161  Bool        m_bDepthFlag[MAX_LAYER_NUM];
     162  Int         m_iViewOrderIdx[MAX_LAYER_NUM];
     163  UInt        m_uiDependentLayer[MAX_LAYER_NUM];
     164
     165  UInt        m_numReorderPics[MAX_TLAYER];
     166  UInt        m_uiMaxDecPicBuffering[MAX_TLAYER];
     167  UInt        m_uiMaxLatencyIncrease[MAX_TLAYER];
     168 
     169public:
     170  TComVPS();
     171  virtual ~TComVPS();
     172       
     173  Int     getVPSId       ()                   { return m_VPSId;          }
     174  Void    setVPSId       (Int i)              { m_VPSId = i;             }
     175       
     176  UInt    getMaxTLayers  ()                   { return m_uiMaxTLayers;   }
     177  Void    setMaxTLayers  (UInt t)             { m_uiMaxTLayers = t; }
     178   
     179  UInt    getMaxLayers   ()                   { return m_uiMaxLayers;   }
     180        Void    setMaxLayers   (UInt l)             { m_uiMaxLayers = l; }
     181       
     182  Bool    getTemporalNestingFlag   ()         { return m_uiMaxLayers;   }
     183        Void    setTemporalNestingFlag   (UInt t)   { m_bTemporalIdNestingFlag = t; }
     184 
     185  Void    setExtensionType(UInt v)                     { m_uiExtensionType = v;    }
     186  UInt    getExtensionType()                             { return m_uiExtensionType; }
     187 
     188  Void    setDependentFlag(Bool d, UInt layer)              { m_bDependentFlag[layer] = d;    }
     189  Bool    getDependentFlag(UInt layer)                      { return m_bDependentFlag[layer]; }
     190
     191  Void    setViewId(UInt v, UInt layer)                     { m_uiViewId[layer] = v;    }
     192  UInt    getViewId(UInt layer)                             { return m_uiViewId[layer]; }
     193 
     194  Void    setDepthFlag(Bool d, UInt layer)                  { m_bDepthFlag[layer] = d;    }
     195  Bool    getDepthFlag(UInt layer)                          { return m_bDepthFlag[layer]; }
     196
     197  Void    setViewOrderIdx(Int v, UInt layer)                { m_iViewOrderIdx[layer] = v;    }
     198  Int     getViewOrderIdx(UInt layer)                       { return m_iViewOrderIdx[layer]; }
     199 
     200  Void    setDependentLayer(UInt v, UInt layer)                     { m_uiDependentLayer[layer] = v;    }
     201  UInt    getDependentLayer(UInt layer)                             { return m_uiDependentLayer[layer]; }
     202 
     203  Void    setNumReorderPics(UInt v, UInt tLayer)                { m_numReorderPics[tLayer] = v;    }
     204  UInt    getNumReorderPics(UInt tLayer)                        { return m_numReorderPics[tLayer]; }
     205 
     206  Void    setMaxDecPicBuffering(UInt v, UInt tLayer)          { m_uiMaxDecPicBuffering[tLayer] = v;    }
     207  UInt    getMaxDecPicBuffering(UInt tLayer)                  { return m_uiMaxDecPicBuffering[tLayer]; }
     208 
     209  Void    setMaxLatencyIncrease(UInt v, UInt tLayer)                { m_uiMaxLatencyIncrease[tLayer] = v;    }
     210  UInt    getMaxLatencyIncrease(UInt tLayer)                        { return m_uiMaxLatencyIncrease[tLayer]; }
     211 
     212};
     213
     214#endif
     215
    146216/// SPS class
    147217class TComSPS
    148218{
    149219private:
     220#if VIDYO_VPS_INTEGRATION
     221        Int                                     m_VPSId;
     222#endif
    150223  Int         m_SPSId;
    151224  Int         m_ProfileIdc;
     
    305378  TComSPS();
    306379  virtual ~TComSPS();
    307 
     380#if VIDYO_VPS_INTEGRATION
     381        Int  getVPSId       ()         { return m_VPSId;          }
     382  Void setVPSId       (Int i)    { m_VPSId = i;             }
     383#endif
    308384  Int  getSPSId       ()         { return m_SPSId;          }
    309385  Void setSPSId       (Int i)    { m_SPSId = i;             }
     
    11091185 
    11101186  // access channel
     1187#if VIDYO_VPS_INTEGRATION
     1188  TComVPS*    m_pcVPS;
     1189#endif
    11111190  TComSPS*    m_pcSPS;
    11121191  TComPPS*    m_pcPPS;
     
    11931272  Void      initTiles();
    11941273
    1195  
     1274#if VIDYO_VPS_INTEGRATION
     1275  Void      setVPS          ( TComVPS* pcVPS ) { m_pcVPS = pcVPS; }
     1276  TComVPS*  getVPS          () { return m_pcVPS; }
     1277#endif
    11961278  Void      setSPS          ( TComSPS* pcSPS ) { m_pcSPS = pcSPS; }
    11971279  TComSPS*  getSPS          () { return m_pcSPS; }
     
    15381620  ParameterSetManager();
    15391621  virtual ~ParameterSetManager();
    1540 
     1622#if VIDYO_VPS_INTEGRATION
     1623  //! store video parameter set and take ownership of it
     1624  Void storeVPS(TComVPS *vps) { m_vpsMap.storePS( vps->getVPSId(), vps); };
     1625  //! get pointer to existing video parameter set 
     1626  TComVPS* getVPS(Int vpsId)  { return m_vpsMap.getPS(vpsId); };
     1627  TComVPS* getFirstVPS()      { return m_vpsMap.getFirstPS(); };
     1628#endif
    15411629  //! store sequence parameter set and take ownership of it
    15421630  Void storeSPS(TComSPS *sps) { m_spsMap.storePS( sps->getSPSId(), sps); };
     
    15601648  ParameterSetMap<TComPPS> m_ppsMap;
    15611649  ParameterSetMap<TComAPS> m_apsMap;
     1650#if VIDYO_VPS_INTEGRATION
     1651  ParameterSetMap<TComVPS> m_vpsMap;
     1652#endif
    15621653};
    15631654
  • trunk/source/Lib/TLibCommon/TComYuv.cpp

    r56 r77  
    392392}
    393393
    394 
     394#if LG_RESTRICTEDRESPRED_M24766
     395Void
     396TComYuv::add(Int *iPUResiPredShift, PartSize uhPartitionSize,  TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract )
     397{
     398        addLuma   (iPUResiPredShift, uhPartitionSize, pcYuvAdd, iWidth,    iHeight,    bSubtract );
     399        addChroma (iPUResiPredShift, uhPartitionSize, pcYuvAdd, iWidth>>1, iHeight>>1, bSubtract );
     400}
     401#else
    395402Void
    396403TComYuv::add( TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract )
     
    399406  addChroma ( pcYuvAdd, iWidth>>1, iHeight>>1, bSubtract );
    400407}
    401 
     408#endif
     409
     410#if LG_RESTRICTEDRESPRED_M24766
     411void
     412TComYuv::getPUXYOffset(PartSize uhPartitionSize, Int iWidth, Int iHeight, Int &iXOffset, Int &iYOffset)
     413{
     414        switch(uhPartitionSize)
     415        {         
     416        case SIZE_2NxN:
     417                iXOffset = iWidth;      iYOffset = iHeight >> 1;   break;
     418        case SIZE_2NxnU:
     419                iXOffset = iWidth;      iYOffset = iHeight >> 2;   break;
     420        case SIZE_2NxnD:
     421                iXOffset = iWidth;      iYOffset = (iHeight >> 1) + (iHeight >> 2);   break;
     422        case SIZE_Nx2N:
     423                iXOffset = iWidth >> 1; iYOffset = iHeight; break;
     424        case SIZE_nLx2N:
     425                iXOffset = iWidth >> 2; iYOffset = iHeight; break;
     426        case SIZE_nRx2N:
     427                iXOffset = (iWidth >> 1) + (iWidth >> 2); iYOffset = iHeight; break;
     428        case SIZE_NxN:
     429                iXOffset = iWidth >> 1; iYOffset = iHeight >> 1;  break;
     430        default:
     431                assert(uhPartitionSize == SIZE_2Nx2N);
     432                iXOffset = iWidth;        iYOffset = iHeight;     break;
     433        }
     434}
     435#endif
     436
     437#if LG_RESTRICTEDRESPRED_M24766
     438Void
     439TComYuv::addLuma(Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract )
     440#else
    402441Void
    403442TComYuv::addLuma( TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract )
     443#endif
    404444{
    405445  Int   iScale      = ( bSubtract ? -1 : 1 );
     
    408448  Pel*  pAddSamples = pcYuvAdd->getLumaAddr();
    409449  Pel*  pDstSamples = getLumaAddr();
     450
     451#if LG_RESTRICTEDRESPRED_M24766
     452  Int iXOffset, iYOffset;
     453
     454  getPUXYOffset(uhPartitionSize, iWidth, iHeight, iXOffset, iYOffset);
     455
     456  for( Int iY = 0; iY < iYOffset; iY++, pDstSamples += iDstStride, pAddSamples += iAddStride )
     457  {
     458          if(iPUResiPredShift[0] >= 0)
     459          {
     460                  for( Int iX = 0; iX < iXOffset; iX++ )
     461                  {
     462                          pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[0]);
     463                  }
     464          }
     465
     466          if(iPUResiPredShift[1] >= 0)
     467          {
     468                  for( Int iX = iXOffset; iX < iWidth; iX++ )
     469                  {
     470                          pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[1]);
     471                  }
     472          }
     473  }
     474
     475  for( Int iY = iYOffset; iY < iHeight; iY++, pDstSamples += iDstStride, pAddSamples += iAddStride )
     476  {
     477          if(iPUResiPredShift[2] >= 0)
     478          {
     479                  for( Int iX = 0; iX < iXOffset; iX++ )
     480                  {
     481                          pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[2]);
     482                  }
     483          }
     484
     485          if(iPUResiPredShift[3] >= 0)
     486          {
     487                  for( Int iX = iXOffset; iX < iWidth; iX++ )
     488                  {
     489                          pDstSamples[iX] += iScale * (pAddSamples[iX] >> iPUResiPredShift[3]);
     490                  }
     491          }
     492  }
     493#else
    410494  for( Int iY = 0; iY < iHeight; iY++, pDstSamples += iDstStride, pAddSamples += iAddStride )
    411495  {
     
    415499    }
    416500  }
    417 }
    418 
     501#endif
     502}
     503
     504#if LG_RESTRICTEDRESPRED_M24766
     505Void
     506TComYuv::addChroma(Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract )
     507#else
    419508Void
    420509TComYuv::addChroma( TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract )
     510#endif
    421511{
    422512  Int   iScale        = ( bSubtract ? -1 : 1 );
     
    427517  Pel*  pDstSamplesCb = getCbAddr();
    428518  Pel*  pDstSamplesCr = getCrAddr();
     519
     520#if LG_RESTRICTEDRESPRED_M24766
     521  Int iXOffset, iYOffset;
     522 
     523  getPUXYOffset(uhPartitionSize, iWidth, iHeight, iXOffset, iYOffset);
     524
     525  for( Int iY = 0; iY < iYOffset; iY++, pDstSamplesCb += iDstStride, pAddSamplesCb += iAddStride,
     526          pDstSamplesCr += iDstStride, pAddSamplesCr += iAddStride  )
     527  {
     528          if(iPUResiPredShift[0] >= 0)
     529          {
     530                  for( Int iX = 0; iX < iXOffset; iX++ )
     531                  {
     532                          pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[0]);
     533                          pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[0]);
     534                  }
     535          }
     536
     537          if(iPUResiPredShift[1] >= 0)
     538          {
     539                  for( Int iX = iXOffset; iX < iWidth; iX++ )
     540                  {
     541                          pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[1]);
     542                          pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[1]);
     543                  }
     544          }
     545  }
     546
     547  for( Int iY = iYOffset; iY < iHeight; iY++, pDstSamplesCb += iDstStride, pAddSamplesCb += iAddStride,
     548          pDstSamplesCr += iDstStride, pAddSamplesCr += iAddStride  )
     549  {
     550          if(iPUResiPredShift[2] >= 0)
     551          {
     552                  for( Int iX = 0; iX < iXOffset; iX++ )
     553                  {
     554                          pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[2]);
     555                          pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[2]);
     556                  }
     557          }
     558
     559          if(iPUResiPredShift[3] >= 0)
     560          {
     561                  for( Int iX = iXOffset; iX < iWidth; iX++ )
     562                  {
     563                          pDstSamplesCb[iX] += iScale * (pAddSamplesCb[iX] >> iPUResiPredShift[3]);
     564                          pDstSamplesCr[iX] += iScale * (pAddSamplesCr[iX] >> iPUResiPredShift[3]);
     565                  }
     566          }
     567  }
     568#else
    429569  for( Int iY = 0; iY < iHeight; iY++, pDstSamplesCb += iDstStride, pAddSamplesCb += iAddStride,
    430570                                       pDstSamplesCr += iDstStride, pAddSamplesCr += iAddStride  )
     
    436576    }
    437577  }
     578#endif
    438579}
    439580
     
    535676}
    536677
     678#if LG_RESTRICTEDRESPRED_M24766
     679Void TComYuv::subtract(Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
     680{
     681        subtractLuma  (iPUResiPredShift, uhPartitionSize, pcYuvSrc0, pcYuvSrc1,  uiTrUnitIdx, uiPartSize    );
     682        subtractChroma(iPUResiPredShift, uhPartitionSize, pcYuvSrc0, pcYuvSrc1,  uiTrUnitIdx, uiPartSize>>1 );
     683}
     684#else
    537685Void TComYuv::subtract( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
    538686{
     
    540688  subtractChroma( pcYuvSrc0, pcYuvSrc1,  uiTrUnitIdx, uiPartSize>>1 );
    541689}
    542 
     690#endif
     691
     692#if LG_RESTRICTEDRESPRED_M24766
     693Void TComYuv::subtractLuma(Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
     694#else
    543695Void TComYuv::subtractLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
     696#endif
    544697{
    545698  Int x, y;
     
    552705  Int  iSrc1Stride = pcYuvSrc1->getStride();
    553706  Int  iDstStride  = getStride();
     707
     708#if LG_RESTRICTEDRESPRED_M24766
     709  Int iXOffset, iYOffset;
     710
     711  getPUXYOffset(uhPartitionSize, uiPartSize, uiPartSize, iXOffset, iYOffset);
     712
     713  for ( y = uiPartSize-1; y >= iYOffset; y-- )
     714  {
     715          if(iPUResiPredShift[3] >= 0)
     716          {
     717                  for ( x = uiPartSize-1; x >= iXOffset; x-- )
     718                  {
     719                          pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[3]);
     720                  }
     721          }
     722
     723          if(iPUResiPredShift[2] >= 0)
     724          {
     725                  for ( x = iXOffset-1; x >= 0; x-- )
     726                  {
     727                          pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[2]);
     728                  }
     729          }
     730          pSrc0 += iSrc0Stride;
     731          pSrc1 += iSrc1Stride;
     732          pDst  += iDstStride;
     733  }
     734
     735  for ( y = iYOffset-1; y >= 0; y-- )
     736  {
     737          if(iPUResiPredShift[1] >= 0)
     738          {
     739                  for ( x = uiPartSize-1; x >= iXOffset; x-- )
     740                  {
     741                          pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[3]);
     742                  }
     743          }
     744
     745          if(iPUResiPredShift[0] >= 0)
     746          {
     747                  for ( x = iXOffset-1; x >= 0; x-- )
     748                  {
     749                          pDst[x] = pSrc0[x] - (pSrc1[x] >> iPUResiPredShift[2]);
     750                  }
     751          }
     752          pSrc0 += iSrc0Stride;
     753          pSrc1 += iSrc1Stride;
     754          pDst  += iDstStride;
     755  }
     756
     757#else
    554758  for ( y = uiPartSize-1; y >= 0; y-- )
    555759  {
     
    562766    pDst  += iDstStride;
    563767  }
    564 }
    565 
     768#endif
     769}
     770
     771#if LG_RESTRICTEDRESPRED_M24766
     772Void TComYuv::subtractChroma(Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
     773#else
    566774Void TComYuv::subtractChroma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize )
     775#endif
    567776{
    568777  Int x, y;
     
    578787  Int  iSrc1Stride = pcYuvSrc1->getCStride();
    579788  Int  iDstStride  = getCStride();
     789#if LG_RESTRICTEDRESPRED_M24766
     790  Int iXOffset, iYOffset;
     791 
     792  getPUXYOffset(uhPartitionSize, uiPartSize, uiPartSize, iXOffset, iYOffset);
     793
     794  for ( y = uiPartSize-1; y >= iYOffset; y-- )
     795  {
     796          if(iPUResiPredShift[3] >= 0)
     797          {
     798                  for ( x = uiPartSize-1; x >= iXOffset; x-- )
     799                  {
     800                          pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[3]);
     801                          pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[3]);
     802                  }
     803          }
     804
     805          if(iPUResiPredShift[2] >= 0)
     806          {
     807                  for ( x = iXOffset-1; x >= 0; x-- )
     808                  {
     809                          pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[2]);
     810                          pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[2]);
     811                  }
     812          }
     813          pSrcU0 += iSrc0Stride;
     814          pSrcU1 += iSrc1Stride;
     815          pSrcV0 += iSrc0Stride;
     816          pSrcV1 += iSrc1Stride;
     817          pDstU  += iDstStride;
     818          pDstV  += iDstStride;
     819  }
     820
     821  for ( y = iYOffset-1; y >= 0; y-- )
     822  {
     823          if(iPUResiPredShift[1] >= 0)
     824          {
     825                  for ( x = uiPartSize-1; x >= iXOffset; x-- )
     826                  {
     827                          pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[1]);
     828                          pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[1]);
     829                  }
     830          }
     831
     832          if(iPUResiPredShift[0] >= 0)
     833          {
     834                  for ( x = iXOffset-1; x >= 0; x-- )
     835                  {
     836                          pDstU[x] = pSrcU0[x] - (pSrcU1[x]>>iPUResiPredShift[0]);
     837                          pDstV[x] = pSrcV0[x] - (pSrcV1[x]>>iPUResiPredShift[0]);
     838                  }
     839          }
     840          pSrcU0 += iSrc0Stride;
     841          pSrcU1 += iSrc1Stride;
     842          pSrcV0 += iSrc0Stride;
     843          pSrcV1 += iSrc1Stride;
     844          pDstU  += iDstStride;
     845          pDstV  += iDstStride;
     846  }
     847#else
    580848  for ( y = uiPartSize-1; y >= 0; y-- )
    581849  {
     
    592860    pDstV  += iDstStride;
    593861  }
     862#endif
    594863}
    595864
  • trunk/source/Lib/TLibCommon/TComYuv.h

    r56 r77  
    146146  Void    addClipPartLuma   ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize ); //GT
    147147
    148  
     148#if LG_RESTRICTEDRESPRED_M24766
    149149  //  pcYuvSrc0 - pcYuvSrc1 -> m_apiBuf
     150  Void    subtract          (Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize );
     151  Void    subtractLuma      (Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize );
     152  Void    subtractChroma    (Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize );
     153#else
    150154  Void    subtract          ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize );
    151155  Void    subtractLuma      ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize );
    152156  Void    subtractChroma    ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize );
     157#endif
    153158 
    154159  //  (pcYuvSrc0 + pcYuvSrc1)/2 for YUV partition
     
    161166  //   Remove High frequency
    162167  Void    removeHighFreq    ( TComYuv* pcYuvSrc, UInt uiPartIdx, UInt uiWidht, UInt uiHeight );
    163  
     168#if LG_RESTRICTEDRESPRED_M24766
     169  void    getPUXYOffset     (PartSize uhPartitionSize, Int iWidth, Int iHeight, Int &iXOffset, Int &iYOffset);
     170  Void    add               (Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract = false );
     171  Void    addLuma           (Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract );
     172  Void    addChroma         (Int *iPUResiPredShift, PartSize uhPartitionSize, TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract );
     173#else
    164174  Void    add               ( TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract = false );
    165175  Void    addLuma           ( TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract );
    166176  Void    addChroma         ( TComYuv* pcYuvAdd, Int iWidth, Int iHeight, Bool bSubtract );
     177#endif
    167178
    168179  Void    clip              ( Int iWidth, Int iHeight );
  • trunk/source/Lib/TLibCommon/TypeDef.h

    r56 r77  
    4646#define HHI_INTER_VIEW_MOTION_PRED        1   // inter-view motion parameter prediction
    4747#define HHI_INTER_VIEW_RESIDUAL_PRED      1   // inter-view residual prediction
     48#define HHI_FIX                           1   // inter-view prediction and other fixes
    4849
    4950#define HHI_VSO                           1
    5051#define HHI_VSO_LS_TABLE                  1
    5152#define HHI_VSO_DIST_INT                  1
     53#define HHI_VSO_SYNTH_DIST_OUT            0
     54#define HHI_VSO_COLOR_PLANES              1
    5255
    5356#define HHI_INTERVIEW_SKIP                1
     
    6770#define HHI_FULL_PEL_DEPTH_MAP_MV_ACC   1   // full-pel mv accuracy for depth maps
    6871
    69 
    70 
     72#if HHI_INTER_VIEW_MOTION_PRED
     73#define SAIT_IMPROV_MOTION_PRED_M24829  1   // improved inter-view motion vector prediction
     74#else
     75#define SAIT_IMPROV_MOTION_PRED_M24829  0   
     76#endif
     77
     78#if HHI_INTER_VIEW_RESIDUAL_PRED
     79#define LG_RESTRICTEDRESPRED_M24766     1   // restricted inter-view residual prediction
     80#define QC_SIMPLIFIEDIVRP_M24938        1
     81#else
     82#define LG_RESTRICTEDRESPRED_M24766     0
     83#define QC_SIMPLIFIEDIVRP_M24938        0
     84#endif
    7185
    7286
     
    344358#define COMPLETE_SLICES_IN_TILE     1 // Among the constraints between slices and tiles, all slices within a tile shall be complete (JCTVC-H0348/JCTVC-H0463) for SliceMode 1&2
    345359#define WPP_SIMPLIFICATION          1 // JCTVC-H0349/JCTVC-0517
     360
     361// ====================================================================================================================
     362// VPS INTEGRATION
     363// ====================================================================================================================
     364#define VIDYO_VPS_INTEGRATION       1
     365#if VIDYO_VPS_INTEGRATION
     366#define MAX_NUM_VPS 10
     367#endif
     368
    346369// ====================================================================================================================
    347370// Basic type redefinition
     
    751774};
    752775
    753 
    754776//! \}
    755777
  • trunk/source/Lib/TLibDecoder/NALread.cpp

    r56 r77  
    136136 //  unsigned reserved_one_5bits = bs.read(5);
    137137 //  assert(reserved_one_5bits == 1);
     138#if VIDYO_VPS_INTEGRATION
     139  nalu.m_layerId  = bs.read(5) - 1;
     140#else
    138141  nalu.m_viewId   = bs.read(4)-1;
    139142  nalu.m_isDepth  = bs.read(1);
    140 
     143#endif
    141144#if H0566_TLA
    142145  if ( nalu.m_temporalId )
     
    159162    {
    160163      nalu.m_temporalId = bs.read(3);
     164#if VIDYO_VPS_INTEGRATION
     165      nalu.m_layerId    = bs.read(5) - 1;
     166#else
    161167      nalu.m_OutputFlag = bs.read(1);
    162168  //    unsigned reserved_one_4bits = bs.read(4);
     
    164170      nalu.m_viewId   = bs.read(3)-1;
    165171      nalu.m_isDepth  = bs.read(1);
     172#endif
    166173
    167174#if H0566_TLA
  • trunk/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r56 r77  
    13391339}
    13401340
     1341#if VIDYO_VPS_INTEGRATION
     1342Void TDecCavlc::parseVPS(TComVPS* pcVPS)
     1343{
     1344  UInt  uiCode;
     1345  Int   iCode;
     1346 
     1347  READ_CODE( 3, uiCode, "max_temporal_layers_minus1" );   pcVPS->setMaxTLayers( uiCode + 1 );
     1348  READ_CODE( 5, uiCode, "max_layers_minus1" );            pcVPS->setMaxLayers( uiCode + 1 );
     1349  READ_FLAG( uiCode,  "temporal_id_nesting_flag" );       pcVPS->setTemporalNestingFlag( uiCode ? true:false );
     1350  READ_UVLC( uiCode,  "video_parameter_set_id" );         pcVPS->setVPSId( uiCode );
     1351  for(UInt i = 0; i <= pcVPS->getMaxTLayers()-1; i++)
     1352  {
     1353    READ_UVLC( uiCode,  "max_dec_pic_buffering[i]" );     pcVPS->setMaxDecPicBuffering( uiCode, i );
     1354    READ_UVLC( uiCode,  "num_reorder_pics[i]" );          pcVPS->setNumReorderPics( uiCode, i );
     1355    READ_UVLC( uiCode,  "max_latency_increase[i]" );      pcVPS->setMaxLatencyIncrease( uiCode, i );
     1356  }
     1357 
     1358  READ_CODE( 1, uiCode, "bit_equal_to_one" );             assert( uiCode );
     1359 
     1360  if( pcVPS->getMaxLayers() - 1 > 0 )
     1361  {
     1362    READ_UVLC( uiCode,  "extension_type" );               pcVPS->setExtensionType( uiCode );
     1363   
     1364    pcVPS->setViewOrderIdx( 0, 0 );
     1365    pcVPS->setViewId( 0, 0 );
     1366    pcVPS->setDepthFlag( 0, 0 );
     1367    for(UInt i = 1; i <= pcVPS->getMaxLayers()-1; i++)
     1368    {
     1369      READ_FLAG( uiCode, "dependent_flag[i]" );           pcVPS->setDependentFlag( uiCode ? true:false, i);
     1370      if( pcVPS->getDependentFlag(i) )
     1371      {
     1372        READ_UVLC( uiCode,  "delta_reference_layer_id_minus1[i]" ); pcVPS->setDependentLayer( i - uiCode + 1, i );
     1373        if( pcVPS->getExtensionType() == VPS_EXTENSION_TYPE_MULTI_VIEW )
     1374        {
     1375          READ_UVLC( uiCode,  "view_id[i]" );             pcVPS->setViewId( uiCode, i );
     1376          READ_FLAG( uiCode,  "depth_flag[i]" );          pcVPS->setDepthFlag( uiCode ? true:false, i );
     1377          READ_SVLC( iCode,  "view_order_idx[i]" );       pcVPS->setViewOrderIdx( iCode, i );
     1378        }
     1379       
     1380      }
     1381    }
     1382  }
     1383 
     1384  READ_FLAG( uiCode,  "vps_extension_flag" );          assert(!uiCode);
     1385  //future extensions go here..
     1386 
     1387  return;
     1388}
     1389
     1390#endif
     1391
    13411392#if HHI_MPI
    13421393Void TDecCavlc::parseSPS(TComSPS* pcSPS, Bool bIsDepth)
     
    13561407  READ_CODE( 8,  uiCode, "level_idc" );                          pcSPS->setLevelIdc( uiCode );
    13571408  READ_UVLC(     uiCode, "seq_parameter_set_id" );               pcSPS->setSPSId( uiCode );
     1409#if VIDYO_VPS_INTEGRATION
     1410  READ_UVLC(     uiCode, "video_parameter_set_id" );             pcSPS->setVPSId( uiCode );
     1411#endif
    13581412  READ_UVLC(     uiCode, "chroma_format_idc" );                  pcSPS->setChromaFormatIdc( uiCode );
    13591413  READ_CODE( 3,  uiCode, "max_temporal_layers_minus1" );         pcSPS->setMaxTLayers( uiCode+1 );
     
    18371891      rpcSlice->setPOC( iPOCmsb+iPOClsb );
    18381892
     1893#if HHI_FIX
     1894      if( rpcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDV && rpcSlice->getPOC() == 0 )
     1895#else
    18391896      if( rpcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDV )
     1897#endif
    18401898      {
    18411899        TComReferencePictureSet* rps = rpcSlice->getLocalRPS();
  • trunk/source/Lib/TLibDecoder/TDecCAVLC.h

    r56 r77  
    113113  Void  parseQtRootCbf      ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt& uiQtRootCbf );
    114114
     115#if VIDYO_VPS_INTEGRATION
     116  Void  parseVPS            ( TComVPS* pcVPS );
     117#endif
    115118#if HHI_MPI
    116119  Void  parseSPS            ( TComSPS* pcSPS, Bool bIsDepth );
  • trunk/source/Lib/TLibDecoder/TDecCu.cpp

    r56 r77  
    636636  {
    637637    AOF( pcCU->getResPredAvail( 0 ) );
    638     Bool bOK = pcCU->getResidualSamples( 0, m_ppcYuvResPred[uiDepth] );
     638    Bool bOK = pcCU->getResidualSamples( 0,
     639#if QC_SIMPLIFIEDIVRP_M24938
     640      true,
     641#endif
     642      m_ppcYuvResPred[uiDepth] );
    639643    AOF( bOK );
     644#if LG_RESTRICTEDRESPRED_M24766
     645        Int iPUResiPredShift[4];
     646        pcCU->getPUResiPredShift(iPUResiPredShift, 0);
     647        m_ppcYuvReco[uiDepth]->add(iPUResiPredShift, pcCU->getPartitionSize(0), m_ppcYuvResPred[uiDepth], pcCU->getWidth( 0 ), pcCU->getHeight( 0 ) );
     648#else
    640649    m_ppcYuvReco[uiDepth]->add( m_ppcYuvResPred[uiDepth], pcCU->getWidth( 0 ), pcCU->getHeight( 0 ) );
     650#endif
    641651  }
    642652#endif
  • trunk/source/Lib/TLibDecoder/TDecEntropy.cpp

    r56 r77  
    9898  if( bResPredAllowed )
    9999  {
    100     bResPredAvailable       = pcSubCU->getResidualSamples( uiPUIdx );
     100    bResPredAvailable       = pcSubCU->getResidualSamples( uiPUIdx
     101#if QC_SIMPLIFIEDIVRP_M24938
     102      , false
     103#endif
     104      );
    101105  }
    102106
     
    104108  if( bResPredAvailable )
    105109  {
     110#if LG_RESTRICTEDRESPRED_M24766
     111          Int iPUResiPredShift[4];
     112          pcCU->getPUResiPredShift(iPUResiPredShift, uiAbsPartIdx);
     113          if(iPUResiPredShift[0] >= 0 || iPUResiPredShift[1] >= 0  || iPUResiPredShift[2] >= 0  || iPUResiPredShift[3] >= 0 )
     114#endif
    106115    m_pcEntropyDecoderIf->parseResPredFlag( pcCU, bResPredFlag, uiAbsPartIdx, uiDepth );
    107116  }
  • trunk/source/Lib/TLibDecoder/TDecEntropy.h

    r56 r77  
    7171#endif
    7272
     73#if VIDYO_VPS_INTEGRATION
     74  virtual Void  parseVPS                  ( TComVPS* pcVPS )                       = 0;
     75#endif
    7376#if HHI_MPI
    7477  virtual Void  parseSPS                  ( TComSPS* pcSPS, Bool bIsDepth )                       = 0;
     
    163166  Void    resetEntropy                ( TComSlice* p)           { m_pcEntropyDecoderIf->resetEntropy(p);                    }
    164167
     168#if VIDYO_VPS_INTEGRATION
     169  Void    decodeVPS                   ( TComVPS* pcVPS ) { m_pcEntropyDecoderIf->parseVPS(pcVPS); }
     170#endif
     171 
    165172#if HHI_MPI
    166173  Void    decodeSPS                   ( TComSPS* pcSPS, Bool bIsDepth ) { m_pcEntropyDecoderIf->parseSPS(pcSPS, bIsDepth); }
  • trunk/source/Lib/TLibDecoder/TDecSbac.h

    r56 r77  
    8787  Void  setBitstream              ( TComInputBitstream* p  ) { m_pcBitstream = p; m_pcTDecBinIf->init( p ); }
    8888 
     89#if VIDYO_VPS_INTEGRATION
     90  Void  parseVPS                  ( TComVPS* pcVPS )  {}
     91#endif
    8992#if HHI_MPI
    9093  Void  parseSPS                  ( TComSPS* pcSPS, Bool bIsDepth ) {}
  • trunk/source/Lib/TLibDecoder/TDecSlice.cpp

    r56 r77  
    446446, m_ppsBuffer(16)
    447447, m_apsBuffer(64)
     448#if VIDYO_VPS_INTEGRATION
     449, m_vpsBuffer(16)
     450#endif
    448451{
    449452
     
    454457
    455458}
     459
     460#if VIDYO_VPS_INTEGRATION
     461TComVPS* ParameterSetManagerDecoder::getPrefetchedVPS  (Int vpsId)
     462{
     463  if (m_vpsBuffer.getPS(vpsId) != NULL )
     464  {
     465    return m_vpsBuffer.getPS(vpsId);
     466  }
     467  else
     468  {
     469    return getVPS(vpsId);
     470  }
     471}
     472#endif
    456473
    457474TComSPS* ParameterSetManagerDecoder::getPrefetchedSPS  (Int spsId)
     
    496513  m_ppsMap.mergePSList(m_ppsBuffer);
    497514  m_spsMap.mergePSList(m_spsBuffer);
     515#if VIDYO_VPS_INTEGRATION
     516  m_vpsMap.mergePSList(m_vpsBuffer);
     517#endif
    498518}
    499519
  • trunk/source/Lib/TLibDecoder/TDecSlice.h

    r56 r77  
    9696  Void     storePrefetchedAPS(TComAPS *aps)  { m_apsBuffer.storePS( aps->getAPSID(), aps); };
    9797  TComAPS* getPrefetchedAPS  (Int apsId);
    98 
     98#if VIDYO_VPS_INTEGRATION
     99  Void     storePrefetchedVPS(TComVPS *vps)  { m_vpsBuffer.storePS( vps->getVPSId(), vps); };
     100  TComVPS* getPrefetchedVPS  (Int vpsId);
     101#endif
    99102  Void     applyPrefetchedPS();
    100103
     
    103106  ParameterSetMap<TComPPS> m_ppsBuffer;
    104107  ParameterSetMap<TComAPS> m_apsBuffer;
     108#if VIDYO_VPS_INTEGRATION
     109        ParameterSetMap<TComVPS> m_vpsBuffer;
     110#endif
    105111};
    106112
  • trunk/source/Lib/TLibDecoder/TDecTop.cpp

    r57 r77  
    319319  m_tAppDecTop = pcTAppDecTop;
    320320#if DEPTH_MAP_GENERATION
     321#if VIDYO_VPS_INTEGRATION
     322  m_cDepthMapGenerator.init( &m_cPrediction, m_tAppDecTop->getVPSAccess(), m_tAppDecTop->getSPSAccess(), m_tAppDecTop->getAUPicAccess() );
     323#else
    321324  m_cDepthMapGenerator.init( &m_cPrediction, m_tAppDecTop->getSPSAccess(), m_tAppDecTop->getAUPicAccess() );
     325#endif
    322326#endif
    323327#if HHI_INTER_VIEW_RESIDUAL_PRED
     
    571575  TComSPS *sps = m_parameterSetManagerDecoder.getSPS(pps->getSPSId());
    572576  assert (sps != 0);
    573 
     577#if VIDYO_VPS_INTEGRATION
     578  TComVPS *vps = m_parameterSetManagerDecoder.getVPS(sps->getVPSId());
     579  assert (vps != 0);
     580  if( m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA )
     581    // VPS can only be activated on IDR or CRA...
     582    getTAppDecTop()->getVPSAccess()->setActiveVPSId( sps->getVPSId() );
     583#endif
    574584  m_apcSlicePilot->setPPS(pps);
    575585  m_apcSlicePilot->setSPS(sps);
     586#if VIDYO_VPS_INTEGRATION
     587  m_apcSlicePilot->setVPS(vps);
     588#endif
    576589  pps->setSPS(sps);
    577590
     
    613626  m_apcSlicePilot->setPPS(m_parameterSetManagerDecoder.getPrefetchedPPS(0));
    614627  m_apcSlicePilot->setSPS(m_parameterSetManagerDecoder.getPrefetchedSPS(0));
     628#if VIDYO_VPS_INTEGRATION
     629  m_apcSlicePilot->setVPS(m_parameterSetManagerDecoder.getPrefetchedVPS(0));
     630#endif
    615631  m_apcSlicePilot->initTiles();
    616632
     
    629645  if( m_bFirstSliceInPicture )
    630646  {
     647#if VIDYO_VPS_INTEGRATION
     648    if( m_apcSlicePilot->getVPS()->getViewId(nalu.m_layerId) == 0 ) { m_nalUnitTypeBaseView = nalu.m_nalUnitType; }
     649    else { m_nalUnitTypeBaseView = m_tAppDecTop->getTDecTop( 0, m_apcSlicePilot->getVPS()->getDepthFlag(nalu.m_layerId) )->getNalUnitTypeBaseView(); }
     650#else
    631651    if( nalu.m_viewId == 0 ) { m_nalUnitTypeBaseView = nalu.m_nalUnitType; }
    632652    else                     { m_nalUnitTypeBaseView = m_tAppDecTop->getTDecTop( 0, nalu.m_isDepth )->getNalUnitTypeBaseView(); }
     653#endif
     654   
    633655    m_apcSlicePilot->setNalUnitTypeBaseViewMvc( m_nalUnitTypeBaseView );
    634656  }
     
    929951
    930952    // Set reference list
     953#if VIDYO_VPS_INTEGRATION
     954    pcSlice->setViewId( pcSlice->getVPS()->getViewId(nalu.m_layerId) );
     955    pcSlice->setIsDepth( pcSlice->getVPS()->getDepthFlag(nalu.m_layerId) );
     956#else
    931957    pcSlice->setViewId(m_viewId);
    932958    pcSlice->setIsDepth(m_isDepth);
     959#endif
    933960
    934961#if SONY_COLPIC_AVAILABILITY
     962#if VIDYO_VPS_INTEGRATION
     963    pcSlice->setViewOrderIdx( pcSlice->getVPS()->getViewOrderIdx(nalu.m_layerId) );
     964#else
    935965    pcSlice->setViewOrderIdx( pcPic->getViewOrderIdx() );
     966#endif
    936967#endif
    937968
     
    10511082}
    10521083
     1084#if VIDYO_VPS_INTEGRATION
     1085Void TDecTop::xDecodeVPS()
     1086{
     1087  TComVPS* vps = new TComVPS();
     1088 
     1089  m_cEntropyDecoder.decodeVPS( vps );
     1090  m_parameterSetManagerDecoder.storePrefetchedVPS(vps); 
     1091  getTAppDecTop()->getVPSAccess()->addVPS( vps );
     1092}
     1093#endif
    10531094
    10541095Void TDecTop::xDecodeSPS()
     
    11141155  switch (nalu.m_nalUnitType)
    11151156  {
     1157#if VIDYO_VPS_INTEGRATION
     1158    case NAL_UNIT_VPS:
     1159      xDecodeVPS();
     1160      return false;
     1161#endif
    11161162    case NAL_UNIT_SPS:
    11171163      xDecodeSPS();
  • trunk/source/Lib/TLibDecoder/TDecTop.h

    r57 r77  
    208208  Bool      xDecodeSlice(InputNALUnit &nalu, Int iSkipFrame, Int iPOCLastDisplay);
    209209#endif
     210#if VIDYO_VPS_INTEGRATION
     211        Void      xDecodeVPS();
     212#endif
    210213  Void      xDecodeSPS();
    211214  Void      xDecodePPS();
  • trunk/source/Lib/TLibEncoder/NALwrite.cpp

    r56 r77  
    6464#endif
    6565
     66#if VIDYO_VPS_INTEGRATION
     67  bsNALUHeader.write(nalu.m_temporalId, 3); // temporal_id
     68  bsNALUHeader.write(nalu.m_layerId + 1, 5); // layer_id_plus1
     69#else
    6670#if H0388
    6771  bsNALUHeader.write(nalu.m_temporalId, 3); // temporal_id
     
    9094  }
    9195#endif
     96#endif
     97 
    9298  out.write(bsNALUHeader.getByteStream(), bsNALUHeader.getByteStreamLength());
    9399
     
    201207  naluDest.m_nalRefIDC   = naluSrc.m_nalRefIDC;
    202208#endif
     209#if !VIDYO_VPS_INTEGRATION
    203210  naluDest.m_viewId      = naluSrc.m_viewId;
    204211  naluDest.m_isDepth     = naluSrc.m_isDepth;
     212#endif
    205213  naluDest.m_temporalId  = naluSrc.m_temporalId;
     214#if VIDYO_VPS_INTEGRATION
     215  naluDest.m_layerId = naluSrc.m_layerId;
     216#else
     217 
    206218#if !H0388
    207219  naluDest.m_OutputFlag  = naluSrc.m_OutputFlag;
    208220#endif
     221#endif
    209222  naluDest.m_Bitstream   = naluSrc.m_Bitstream;
    210223}
  • trunk/source/Lib/TLibEncoder/NALwrite.h

    r56 r77  
    6262    NalRefIdc nalRefIDC,
    6363#endif
     64#if VIDYO_VPS_INTEGRATION
     65    unsigned layerId,
     66#else
    6467    Int viewId,
    6568    Bool isDepth,
     69#endif
    6670    unsigned temporalID = 0)
    6771#if NAL_REF_FLAG
     72#if VIDYO_VPS_INTEGRATION
     73  : NALUnit(nalUnitType, nalRefFlag, layerId, temporalID)
     74#else
    6875  : NALUnit(nalUnitType, nalRefFlag, viewId, isDepth, temporalID)
     76#endif
     77#else
     78#if VIDYO_VPS_INTEGRATION
     79  : NALUnit(nalUnitType, nalRefIDC, layerId, temporalID)
    6980#else
    7081  : NALUnit(nalUnitType, nalRefIDC, viewId, isDepth, temporalID)
     82#endif
    7183#endif
    7284  , m_Bitstream()
  • trunk/source/Lib/TLibEncoder/TEncCavlc.cpp

    r56 r77  
    375375}
    376376
     377#if VIDYO_VPS_INTEGRATION
     378Void TEncCavlc::codeVPS( TComVPS* pcVPS )
     379{
     380        WRITE_CODE( pcVPS->getMaxTLayers() - 1,     3,        "max_temporal_layers_minus1" );
     381  WRITE_CODE( pcVPS->getMaxLayers() - 1,      5,        "max_layers_minus1" );
     382  WRITE_FLAG( pcVPS->getTemporalNestingFlag() - 1,      "temporal_id_nesting_flag" );
     383  WRITE_UVLC( pcVPS->getVPSId(),                        "video_parameter_set_id" );
     384  for(UInt i=0; i <= pcVPS->getMaxTLayers()-1; i++)
     385  {
     386    WRITE_UVLC( pcVPS->getMaxDecPicBuffering(i),           "max_dec_pic_buffering[i]" );
     387    WRITE_UVLC( pcVPS->getNumReorderPics(i),               "num_reorder_pics[i]" );
     388    WRITE_UVLC( pcVPS->getMaxLatencyIncrease(i),           "max_latency_increase[i]" );
     389  }
     390 
     391  WRITE_CODE( 1,      1,        "bit_equal_to_one" );
     392 
     393  if( pcVPS->getMaxLayers() - 1 > 0 )
     394  {
     395    WRITE_UVLC( pcVPS->getExtensionType(),                        "extension_type" );
     396   
     397    for(UInt i=1; i <= pcVPS->getMaxLayers()-1; i++)
     398    {
     399      WRITE_FLAG( pcVPS->getDependentFlag(i),                     "dependent_flag[i]" );
     400      if( pcVPS->getDependentFlag(i) )
     401      {
     402        WRITE_UVLC( i - pcVPS->getDependentLayer(i) - 1,          "delta_reference_layer_id_minus1[i]" );
     403        if( pcVPS->getExtensionType() == VPS_EXTENSION_TYPE_MULTI_VIEW )
     404        {
     405          WRITE_UVLC( pcVPS->getViewId(i),                        "view_id[i]" );
     406          WRITE_FLAG( pcVPS->getDepthFlag(i),                     "depth_flag[i]" );
     407          WRITE_SVLC( pcVPS->getViewOrderIdx(i),                  "view_order_idx[i]" );
     408        }
     409       
     410      }
     411    }
     412  }
     413 
     414  WRITE_FLAG( 0,                     "vps_extension_flag" );
     415 
     416  //future extensions here..
     417 
     418  return;
     419}
     420#endif
     421
    377422#if HHI_MPI
    378423Void TEncCavlc::codeSPS( TComSPS* pcSPS, Bool bIsDepth )
     
    388433  WRITE_CODE( pcSPS->getLevelIdc (),       8,       "level_idc" );
    389434  WRITE_UVLC( pcSPS->getSPSId (),                   "seq_parameter_set_id" );
     435#if VIDYO_VPS_INTEGRATION
     436  WRITE_UVLC( pcSPS->getVPSId (),                   "video_parameter_set_id" );
     437#endif
    390438  WRITE_UVLC( pcSPS->getChromaFormatIdc (),         "chroma_format_idc" );
    391439  WRITE_CODE( pcSPS->getMaxTLayers() - 1,  3,       "max_temporal_layers_minus1" );
     
    727775    {
    728776      WRITE_CODE( (pcSlice->getPOC()-pcSlice->getLastIDR()+(1<<pcSlice->getSPS()->getBitsForPOC()))%(1<<pcSlice->getSPS()->getBitsForPOC()), pcSlice->getSPS()->getBitsForPOC(), "pic_order_cnt_lsb");
    729 
    730       if( pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_IDV )
     777#if HHI_FIX
     778      if( pcSlice->getPOC() == 0 && pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_IDV )
    731779      {
    732780        TComReferencePictureSet* rps = pcSlice->getRPS();
     
    799847        }
    800848      }
     849      if( pcSlice->getPOC() != 0 )
     850#else
     851      if( pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_IDV )
     852#endif
     853      {
     854        TComReferencePictureSet* rps = pcSlice->getRPS();
     855        if(pcSlice->getRPSidx() < 0)
     856        {
     857          WRITE_FLAG( 0, "short_term_ref_pic_set_sps_flag");
     858#if RPS_IN_SPS
     859          codeShortTermRefPicSet(pcSlice->getSPS(), rps);
     860#else
     861          codeShortTermRefPicSet(pcSlice->getPPS(), rps);
     862#endif
     863        }
     864        else
     865        {
     866          WRITE_FLAG( 1, "short_term_ref_pic_set_sps_flag");
     867          WRITE_UVLC( pcSlice->getRPSidx(), "short_term_ref_pic_set_idx" );
     868        }
     869#if RPS_IN_SPS
     870        if(pcSlice->getSPS()->getLongTermRefsPresent())
     871#else
     872        if(pcSlice->getPPS()->getLongTermRefsPresent())
     873#endif
     874        {
     875          WRITE_UVLC( rps->getNumberOfLongtermPictures(), "num_long_term_pics");
     876          Int maxPocLsb = 1<<pcSlice->getSPS()->getBitsForPOC();
     877          Int prev = 0;
     878#if LTRP_MULT
     879          Int prevDeltaPocLt=0;
     880          Int currDeltaPocLt=0;
     881#endif
     882          for(Int i=rps->getNumberOfPictures()-1 ; i > rps->getNumberOfPictures()-rps->getNumberOfLongtermPictures()-1; i--)
     883          {
     884            WRITE_UVLC((maxPocLsb-rps->getDeltaPOC(i)+prev)%maxPocLsb, "delta_poc_lsb_lt");
     885         
     886#if LTRP_MULT
     887            currDeltaPocLt=((maxPocLsb-rps->getDeltaPOC(i)+prev)%maxPocLsb)+prevDeltaPocLt;
     888
     889            Int deltaMsbCycle=0;
     890            if( (i==(rps->getNumberOfPictures()-1)) )
     891            {
     892              deltaMsbCycle=((-rps->getDeltaPOC(i))/maxPocLsb)-1;
     893            }
     894            else if( prevDeltaPocLt!=currDeltaPocLt )
     895            {
     896              deltaMsbCycle=((-rps->getDeltaPOC(i))/maxPocLsb)-1;
     897              if( ((prevDeltaPocLt==maxPocLsb-1) && (currDeltaPocLt==maxPocLsb+1)) ||  ((prevDeltaPocLt==maxPocLsb-2) && (currDeltaPocLt==maxPocLsb)))
     898              {
     899                deltaMsbCycle=deltaMsbCycle-1;
     900              }
     901            }
     902            else
     903            {
     904              deltaMsbCycle=((rps->getDeltaPOC(i+1)-rps->getDeltaPOC(i))/maxPocLsb)-1;
     905            }
     906
     907            if(deltaMsbCycle>=0)
     908            {
     909              WRITE_FLAG( 1, "delta_poc_msb_present_flag");
     910              WRITE_UVLC(deltaMsbCycle, "delta_poc_msb_cycle_lt_minus1");
     911            }
     912            else
     913            {
     914              WRITE_FLAG( 0, "delta_poc_msb_present_flag");
     915            }
     916            prevDeltaPocLt=currDeltaPocLt;
     917#endif
     918            prev = rps->getDeltaPOC(i);
     919            WRITE_FLAG( rps->getUsed(i), "used_by_curr_pic_lt_flag");
     920          }
     921        }
     922      }
    801923    }
    802924
  • trunk/source/Lib/TLibEncoder/TEncCavlc.h

    r56 r77  
    114114  UInt  getCoeffCost          ()                { return  m_uiCoeffCost;  }
    115115 
     116#if VIDYO_VPS_INTEGRATION
     117  Void  codeVPS                 ( TComVPS* pcVPS );
     118#endif
     119
    116120#if HHI_MPI
    117121  Void  codeSPS                 ( TComSPS* pcSPS, Bool bIsDepth );
  • trunk/source/Lib/TLibEncoder/TEncCfg.h

    r56 r77  
    290290#endif
    291291
     292#if VIDYO_VPS_INTEGRATION
     293  UInt     m_layerId;
     294#endif
     295 
    292296  Int      m_viewId;
    293297  Bool     m_isDepth;
     
    765769  Int       getTSIG()                            { return m_signHidingThreshold; }
    766770#endif
     771#if VIDYO_VPS_INTEGRATION
     772  Void      setLayerId             ( UInt layerId )   { m_layerId = layerId; }
     773  UInt      getLayerId             ()               { return m_layerId; }
     774#endif
    767775
    768776  Void      setViewId             ( Int viewId )   { m_viewId = viewId; }
  • trunk/source/Lib/TLibEncoder/TEncCu.cpp

    r61 r77  
    604604        if( bResPredAllowed )
    605605        {
    606           bResPredAvailable       = rpcBestCU->getResidualSamples( 0, m_ppcResPredTmp[uiDepth] );
     606          bResPredAvailable       = rpcBestCU->getResidualSamples( 0,
     607#if QC_SIMPLIFIEDIVRP_M24938
     608            true ,
     609#endif
     610            m_ppcResPredTmp[uiDepth] );
    607611        }
    608612
     
    698702        if( bResPredAllowed )
    699703        {
    700           bResPredAvailable       = rpcBestCU->getResidualSamples( 0, m_ppcResPredTmp[uiDepth] );
     704          bResPredAvailable       = rpcBestCU->getResidualSamples( 0,
     705#if QC_SIMPLIFIEDIVRP_M24938
     706            true,
     707#endif
     708            m_ppcResPredTmp[uiDepth] );
    701709        }
    702710
     
    19031911 
    19041912#if HHI_INTER_VIEW_RESIDUAL_PRED
     1913#if !LG_RESTRICTEDRESPRED_M24766
    19051914  if( rpcTempCU->getResPredFlag( 0 ) )
    19061915  { // subtract residual prediction from original in motion search
     
    19081917  }
    19091918#endif
     1919#endif
    19101920
    19111921#if AMP_MRG
    19121922  rpcTempCU->setMergeAMP (true);
    19131923  #if HHI_INTERVIEW_SKIP
     1924#if LG_RESTRICTEDRESPRED_M24766
     1925  m_pcPredSearch->predInterSearch ( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcResPredTmp[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcRecoYuvTemp[uhDepth], bSkipRes, bUseMRG  );
     1926#else
    19141927  m_pcPredSearch->predInterSearch ( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcRecoYuvTemp[uhDepth], bSkipRes, bUseMRG  );
     1928#endif
    19151929#else
    19161930  m_pcPredSearch->predInterSearch ( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcRecoYuvTemp[uhDepth], false, bUseMRG );
     
    19251939
    19261940#if HHI_INTER_VIEW_RESIDUAL_PRED
     1941#if !LG_RESTRICTEDRESPRED_M24766
    19271942  if( rpcTempCU->getResPredFlag( 0 ) )
    19281943  { // add residual prediction to original again
    19291944    m_ppcOrigYuv[uhDepth]->add( m_ppcResPredTmp [uhDepth], rpcTempCU->getWidth( 0 ), rpcTempCU->getHeight( 0 ) );
    19301945  }
     1946#endif
    19311947#endif
    19321948
  • trunk/source/Lib/TLibEncoder/TEncEntropy.cpp

    r56 r77  
    121121}
    122122
     123#if VIDYO_VPS_INTEGRATION
     124Void TEncEntropy::encodeVPS( TComVPS* pcVPS )
     125{
     126  m_pcEntropyCoderIf->codeVPS( pcVPS );
     127  return;
     128}
     129#endif
     130
     131#if VIDYO_VPS_INTEGRATION
     132Void  codeVPS                 ( TComVPS* pcVPS );
     133#endif
     134
    123135#if HHI_MPI
    124136Void TEncEntropy::encodeSPS( TComSPS* pcSPS, Bool bIsDepth )
     
    471483  ROTVS( pcCU->isIntra           ( uiAbsPartIdx )              );
    472484  ROFVS( pcCU->getResPredAvail   ( uiAbsPartIdx )              );
    473 
     485#if LG_RESTRICTEDRESPRED_M24766
     486  Int iPUResiPredShift[4];
     487  pcCU->getPUResiPredShift(iPUResiPredShift, uiAbsPartIdx);
     488  if(iPUResiPredShift[0] >= 0 || iPUResiPredShift[1] >= 0  || iPUResiPredShift[2] >= 0  || iPUResiPredShift[3] >= 0 )
     489#endif
    474490  // encode flag
    475491  m_pcEntropyCoderIf->codeResPredFlag( pcCU, uiAbsPartIdx );
  • trunk/source/Lib/TLibEncoder/TEncEntropy.h

    r56 r77  
    7676  virtual UInt  getCoeffCost          ()                = 0;
    7777
     78#if VIDYO_VPS_INTEGRATION
     79        virtual Void  codeVPS                 ( TComVPS* pcVPS )                                      = 0;
     80#endif
     81       
    7882#if HHI_MPI
    7983  virtual Void  codeSPS                 ( TComSPS* pcSPS, Bool bIsDepth )                       = 0;
     
    229233 
    230234public:
     235#if VIDYO_VPS_INTEGRATION
     236        Void encodeVPS               ( TComVPS* pcVPS);
     237#endif
    231238  // SPS
    232239#if HHI_MPI
  • trunk/source/Lib/TLibEncoder/TEncGOP.cpp

    r56 r77  
    246246
    247247      std::vector<TComAPS>& vAPS = m_pcEncTop->getAPS();
     248#if VIDYO_VPS_INTEGRATION
     249    m_pcSliceEncoder->initEncSlice ( pcPic, iPOCLast, uiPOCCurr, iNumPicRcvd, iGOPid, pcSlice, m_pcEncTop->getEncTop()->getVPS(), m_pcEncTop->getSPS(), m_pcEncTop->getPPS() );
     250#else
    248251      m_pcSliceEncoder->initEncSlice ( pcPic, iPOCLast, uiPOCCurr, iNumPicRcvd, iGOPid, pcSlice, m_pcEncTop->getSPS(), m_pcEncTop->getPPS() );
     252#endif
    249253      pcSlice->setLastIDR(m_iLastIDR);
    250254      pcSlice->setSliceIdx(0);
     
    809813      if ( m_bSeqFirst )
    810814      {
     815#if VIDYO_VPS_INTEGRATION
     816        {
     817          OutputNALUnit nalu(NAL_UNIT_VPS, true, m_pcEncTop->getLayerId());
     818          m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
     819          m_pcEntropyCoder->encodeVPS(m_pcEncTop->getEncTop()->getVPS());
     820          writeRBSPTrailingBits(nalu.m_Bitstream);
     821          accessUnit.push_back(new NALUnitEBSP(nalu));
     822        }
     823#endif
    811824#if NAL_REF_FLAG
     825#if VIDYO_VPS_INTEGRATION
     826        OutputNALUnit nalu(NAL_UNIT_SPS, true, m_pcEncTop->getLayerId());
     827#else
    812828        OutputNALUnit nalu(NAL_UNIT_SPS, true, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());
     829#endif
    813830#else
    814831        OutputNALUnit nalu(NAL_UNIT_SPS, NAL_REF_IDC_PRIORITY_HIGHEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());
     
    827844
    828845#if NAL_REF_FLAG
     846#if VIDYO_VPS_INTEGRATION
     847        nalu = NALUnit(NAL_UNIT_PPS, true, m_pcEncTop->getLayerId());
     848#else
    829849        nalu = NALUnit(NAL_UNIT_PPS, true, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());
     850#endif
    830851#else
    831852        nalu = NALUnit(NAL_UNIT_PPS, NAL_REF_IDC_PRIORITY_HIGHEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());
     
    954975#if H0388
    955976#if NAL_REF_FLAG
    956         OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced(), m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer() );
    957 #else
    958         OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced() ? NAL_REF_IDC_PRIORITY_HIGHEST: NAL_REF_IDC_PRIORITY_LOWEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer() );
    959 #endif
    960 #else
    961         OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced() ? NAL_REF_IDC_PRIORITY_HIGHEST: NAL_REF_IDC_PRIORITY_LOWEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer(), true);
    962 #endif
     977        OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced(),
     978#if !VIDYO_VPS_INTEGRATION
     979                           m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer() );
     980#else
     981                           m_pcEncTop->getLayerId(), pcSlice->getTLayer() );
     982#endif
     983#else
     984        OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced() ? NAL_REF_IDC_PRIORITY_HIGHEST: NAL_REF_IDC_PRIORITY_LOWEST,
     985#if !VIDYO_VPS_INTEGRATION
     986                           m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer() );
     987#else
     988                           m_pcEncTop->getLayerId(), pcSlice->getTLayer() );
     989#endif
     990#endif
     991#else
     992        OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced() ? NAL_REF_IDC_PRIORITY_HIGHEST: NAL_REF_IDC_PRIORITY_LOWEST,
     993#if !VIDYO_VPS_INTEGRATION
     994                           m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer(), true );
     995#else
     996                           m_pcEncTop->getLayerId(), pcSlice->getTLayer(), true );
     997#endif
     998
     999#endif
     1000           
    9631001        Bool bEntropySlice = (!pcSlice->isNextSlice());
    9641002        if (!bEntropySlice)
     
    14141452          {
    14151453#if NAL_REF_FLAG
     1454#if VIDYO_VPS_INTEGRATION
     1455            OutputNALUnit nalu(NAL_UNIT_APS, true, m_pcEncTop->getLayerId());
     1456#else
    14161457            OutputNALUnit nalu(NAL_UNIT_APS, true, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());
     1458#endif
    14171459#else
    14181460            OutputNALUnit nalu(NAL_UNIT_APS, NAL_REF_IDC_PRIORITY_HIGHEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());
     
    14761518
    14771519#if NAL_REF_FLAG
     1520#if VIDYO_VPS_INTEGRATION
     1521        OutputNALUnit nalu(NAL_UNIT_SEI, false, m_pcEncTop->getLayerId());
     1522#else
    14781523        OutputNALUnit nalu(NAL_UNIT_SEI, false, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());
     1524#endif
    14791525#else
    14801526        OutputNALUnit nalu(NAL_UNIT_SEI, NAL_REF_IDC_PRIORITY_LOWEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());
     
    19622008 
    19632009#if HHI_VSO
     2010#if HHI_VSO_SYNTH_DIST_OUT
    19642011  if ( m_pcRdCost->getUseRenModel() )
    19652012  {
     
    19752022  }
    19762023  else
     2024#endif
    19772025#endif
    19782026  {
  • trunk/source/Lib/TLibEncoder/TEncSbac.cpp

    r58 r77  
    342342}
    343343
     344#if VIDYO_VPS_INTEGRATION
     345Void TEncSbac::codeVPS( TComVPS* pcVPS )
     346{
     347        assert (0);
     348  return;
     349}
     350#endif
     351
    344352#if HHI_MPI
    345353Void TEncSbac::codeSPS( TComSPS* pcSPS, Bool bIsDepth )
  • trunk/source/Lib/TLibEncoder/TEncSbac.h

    r56 r77  
    9898  //--SBAC RD
    9999
     100#if VIDYO_VPS_INTEGRATION
     101  Void  codeVPS                 ( TComVPS* pcVPS );
     102#endif
     103       
    100104#if HHI_MPI
    101105  Void  codeSPS                 ( TComSPS* pcSPS, Bool bIsDepth );
  • trunk/source/Lib/TLibEncoder/TEncSearch.cpp

    r56 r77  
    25052505Void TEncSearch::xMergeEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPUIdx, UInt& uiInterDir, TComMvField* pacMvField, UInt& uiMergeIndex, UInt& ruiCost, TComMvField* cMvFieldNeighbours, UChar* uhInterDirNeighbours, Int& numValidMergeCand )
    25062506#else
     2507#if LG_RESTRICTEDRESPRED_M24766
     2508Void TEncSearch::xMergeEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, TComYuv* rpcResiPredYuv, Int iPUIdx, UInt& uiInterDir, TComMvField* pacMvField, UInt& uiMergeIndex, UInt& ruiCost )
     2509#else
    25072510Void TEncSearch::xMergeEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPUIdx, UInt& uiInterDir, TComMvField* pacMvField, UInt& uiMergeIndex, UInt& ruiCost )
     2511#endif
    25082512#endif
    25092513{
     
    25532557  const int maxNumMergeCand = MRG_MAX_NUM_CANDS_SIGNALED + ( pcCU->getSlice()->getSPS()->getMultiviewMvPredMode() ? 1 : 0 );
    25542558#endif
    2555 
     2559#if LG_RESTRICTEDRESPRED_M24766
     2560  Int iPUResiPredShift[4];
     2561  Int iLastAddResiShift = -1000;
     2562#endif
    25562563  ruiCost = MAX_UINT;
    25572564  for( UInt uiMergeCand = 0; uiMergeCand < numValidMergeCand; ++uiMergeCand )
     
    25652572      pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
    25662573      pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
    2567 
     2574#if LG_RESTRICTEDRESPRED_M24766
     2575          Int iAddResiShift;
     2576          UInt uiPartAddr;
     2577          Int iRoiWidth, iRoiHeight;
     2578
     2579          pcCU->getPartIndexAndSize( iPUIdx, uiPartAddr, iRoiWidth, iRoiHeight );
     2580          iAddResiShift = pcCU->getResiPredMode(uiPartAddr);
     2581          iAddResiShift = (pcCU->getSlice()->getPPS()->getUseWP() || pcCU->getInterDir(uiPartAddr) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1 - iAddResiShift : -1);
     2582
     2583          if( pcCU->getResPredFlag( 0 ))
     2584          { // subtract residual prediction from original in motion search
     2585                  if(iLastAddResiShift != iAddResiShift)
     2586                  {
     2587                          //add subtracted residual last time
     2588                          if(iLastAddResiShift >= 0)
     2589                          {
     2590                                  iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = iLastAddResiShift;
     2591                                  pcYuvOrg->add(iPUResiPredShift, ePartSize, rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ));
     2592                          }
     2593                          //subtract residual
     2594                          if(iAddResiShift >= 0)
     2595                          {
     2596                                  iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = iAddResiShift;
     2597                                  pcYuvOrg->add(iPUResiPredShift, ePartSize, rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ), true );
     2598                          }
     2599                          iLastAddResiShift = iAddResiShift;
     2600                  }
     2601          }
     2602#endif
    25682603      xGetInterPredictionError( pcCU, pcYuvOrg, iPUIdx, uiCostCand, m_pcEncCfg->getUseHADME() );
    25692604      uiBitsCand = uiMergeCand + 1;
     
    25872622    }
    25882623  }
     2624#if LG_RESTRICTEDRESPRED_M24766
     2625  if( pcCU->getResPredFlag( 0 ) && iLastAddResiShift >= 0)
     2626  {
     2627          iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = iLastAddResiShift;
     2628          pcYuvOrg->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ));
     2629  }
     2630#endif
    25892631}
    25902632
     
    25992641 */
    26002642#if AMP_MRG
     2643#if LG_RESTRICTEDRESPRED_M24766
     2644Void TEncSearch::predInterSearch( TComDataCU* pcCU, TComYuv* pcOrgYuv, TComYuv* rpcResiPredYuv, TComYuv*& rpcPredYuv, TComYuv*& rpcResiYuv, TComYuv*& rpcRecoYuv, Bool bUseRes, Bool bUseMRG )
     2645#else
    26012646Void TEncSearch::predInterSearch( TComDataCU* pcCU, TComYuv* pcOrgYuv, TComYuv*& rpcPredYuv, TComYuv*& rpcResiYuv, TComYuv*& rpcRecoYuv, Bool bUseRes, Bool bUseMRG )
     2647#endif
    26022648#else
    26032649Void TEncSearch::predInterSearch( TComDataCU* pcCU, TComYuv* pcOrgYuv, TComYuv*& rpcPredYuv, TComYuv*& rpcResiYuv, TComYuv*& rpcRecoYuv, Bool bUseRes )
     
    27022748    for (Int iNumRef=0; iNumRef < MAX_NUM_REF; iNumRef++) uiCostTempL0[iNumRef] = MAX_UINT;
    27032749    UInt          uiBitsTempL0[MAX_NUM_REF];
    2704 
     2750#if LG_RESTRICTEDRESPRED_M24766
     2751        Int iPUResiPredShift[4] = {0, 0, 0, 0};
     2752#endif
    27052753    xGetBlkBits( ePartSize, pcCU->getSlice()->isInterP(), iPartIdx, uiLastMode, uiMbBits);
    27062754   
     
    27182766    {
    27192767#endif
    2720 
     2768#if LG_RESTRICTEDRESPRED_M24766
     2769                Bool bLastResiFlag = false;
     2770#endif
    27212771    //  Uni-directional prediction
    27222772    for ( Int iRefList = 0; iRefList < iNumPredDir; iRefList++ )
     
    27262776      for ( Int iRefIdxTemp = 0; iRefIdxTemp < pcCU->getSlice()->getNumRefIdx(eRefPicList); iRefIdxTemp++ )
    27272777      {
     2778#if LG_RESTRICTEDRESPRED_M24766
     2779                  if( pcCU->getResPredFlag( 0 ))
     2780                  {
     2781                          if(pcCU->getSlice()->getViewId() == pcCU->getSlice()->getRefViewId(eRefPicList, iRefIdxTemp))
     2782                          { // subtract residual prediction from original in motion search
     2783                                  if(!bLastResiFlag)
     2784                                          pcOrgYuv->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ), true );
     2785                                  bLastResiFlag = true;
     2786                          }
     2787                          else
     2788                          {
     2789                                  if(bLastResiFlag)
     2790                                          pcOrgYuv->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ));
     2791                                  bLastResiFlag = false;
     2792                          }
     2793                  }
     2794#endif
    27282795        uiBitsTemp = uiMbBits[iRefList];
    27292796        if ( pcCU->getSlice()->getNumRefIdx(eRefPicList) > 1 )
     
    28892956      }
    28902957    }
     2958#if LG_RESTRICTEDRESPRED_M24766
     2959        if( pcCU->getResPredFlag( 0 ) && bLastResiFlag)
     2960        { // subtract residual prediction from original in motion search
     2961                pcOrgYuv->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ));
     2962        }
     2963#endif
    28912964    //  Bi-directional prediction
    28922965    if ( pcCU->getSlice()->isInterB() )
    28932966    {
    2894      
     2967#if LG_RESTRICTEDRESPRED_M24766
     2968                Int iLastAddResiShift = -1000;
     2969#endif
    28952970      cMvBi[0] = cMv[0];            cMvBi[1] = cMv[1];
    28962971      iRefIdxBi[0] = iRefIdx[0];    iRefIdxBi[1] = iRefIdx[1];
     
    29943069#else
    29953070          uiBitsTemp += m_auiMVPIdxCost[aaiMvpIdxBi[iRefList][iRefIdxTemp]][AMVP_MAX_NUM_CANDS];
     3071#endif
     3072#if LG_RESTRICTEDRESPRED_M24766
     3073                  Int iAddResiShift = -1, iPredFrom = 0;
     3074                  Int iBestRefIdx = pcCU->getCUMvField(eRefPicList == REF_PIC_LIST_0 ? REF_PIC_LIST_1 : REF_PIC_LIST_0)->getRefIdx(uiPartAddr);
     3075
     3076                  iPredFrom = iBestRefIdx >= 0 ? 3 : 1;
     3077                  if(iBestRefIdx >= 0 && pcCU->getSlice()->getViewId() == pcCU->getSlice()->getRefViewId(eRefPicList == REF_PIC_LIST_0 ? REF_PIC_LIST_1 : REF_PIC_LIST_0, iBestRefIdx))
     3078                          iAddResiShift++;
     3079                  if(pcCU->getSlice()->getViewId() == pcCU->getSlice()->getRefViewId(eRefPicList, iRefIdxTemp))
     3080                          iAddResiShift++;
     3081                  iAddResiShift = (pcCU->getSlice()->getPPS()->getUseWP() || iPredFrom != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     3082
     3083                  if( pcCU->getResPredFlag( 0 ) )
     3084                  {
     3085                          if(iLastAddResiShift != iAddResiShift)
     3086                          {
     3087                                  //add substracted residual last time
     3088                                  if(iLastAddResiShift >= 0 )
     3089                                  {
     3090                                          iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = iLastAddResiShift;
     3091                                          pcOrgYuv->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ));
     3092                                  }
     3093                                  //substract residual
     3094                                  if(iAddResiShift >= 0)
     3095                                  {
     3096                                          iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = iAddResiShift;
     3097                                          pcOrgYuv->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ), true );
     3098                                  }
     3099                                  iLastAddResiShift = iAddResiShift;
     3100                          }
     3101                  }
    29963102#endif
    29973103          // call ME
     
    30493155        }
    30503156      } // for loop-iter
     3157#if LG_RESTRICTEDRESPRED_M24766
     3158          if( pcCU->getResPredFlag( 0 ) && iLastAddResiShift >= 0)
     3159          {
     3160                  iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = iLastAddResiShift;
     3161                  pcOrgYuv->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ));
     3162          }
     3163#endif
    30513164    } // if (B_SLICE)
    30523165#if ZERO_MVD_EST
     
    32553368      if (bTestNormalMC)
    32563369      {
     3370#if LG_RESTRICTEDRESPRED_M24766
     3371                  Int iAddResiShift = pcCU->getResiPredMode(uiPartAddr);
     3372                  iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = \
     3373                          (pcCU->getSlice()->getPPS()->getUseWP() || pcCU->getInterDir(uiPartAddr) != 3)? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     3374                  if(pcCU->getResPredFlag(0) && iAddResiShift >= 0)
     3375                  {
     3376                          pcOrgYuv->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ), true);
     3377                  }
     3378#endif
    32573379        xGetInterPredictionError( pcCU, pcOrgYuv, iPartIdx, uiMEError, m_pcEncCfg->getUseHADME() );
    32583380        uiMECost = uiMEError + m_pcRdCost->getCost( uiMEBits );
     3381#if LG_RESTRICTEDRESPRED_M24766
     3382                if(pcCU->getResPredFlag(0) && iAddResiShift >= 0)
     3383                {
     3384                        pcOrgYuv->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcResiPredYuv, pcCU->getWidth( 0 ), pcCU->getHeight( 0 ));
     3385                }
     3386#endif
    32593387      }
    32603388#else
     
    32743402      xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);
    32753403#else
     3404#if LG_RESTRICTEDRESPRED_M24766
     3405      xMergeEstimation( pcCU, pcOrgYuv, rpcResiPredYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost );
     3406#else
    32763407      xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost );
     3408#endif
    32773409#endif
    32783410      if ( uiMRGCost < uiMECost )
     
    41164248  UInt      uiWidth      = pcCU->getWidth ( 0 );
    41174249  UInt      uiHeight     = pcCU->getHeight( 0 );
    4118  
     4250#if LG_RESTRICTEDRESPRED_M24766
     4251  Int       iPUResiPredShift[4];
     4252#endif
    41194253  //  No residual coding : SKIP mode
    41204254  if ( ePredMode == MODE_SKIP && bSkipRes )
     
    41284262    if( pcCU->getResPredFlag( 0 ) )
    41294263    {
     4264#if LG_RESTRICTEDRESPRED_M24766
     4265                pcCU->getPUResiPredShift(iPUResiPredShift, 0);
     4266                rpcYuvRec->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcYuvResPrd, uiWidth, uiHeight );
     4267#else
    41304268      rpcYuvRec->add( rpcYuvResPrd, uiWidth, uiHeight );
     4269#endif
    41314270      rpcYuvRec->clip( uiWidth, uiHeight );
    41324271    }
     
    42374376  else
    42384377  {
     4378#if LG_RESTRICTEDRESPRED_M24766
     4379          iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = 0;
     4380          rpcYuvResi->subtract(iPUResiPredShift, pcCU->getPartitionSize(0), pcYuvOrg, pcYuvPred, 0, uiWidth );
     4381#else
    42394382  rpcYuvResi->subtract( pcYuvOrg, pcYuvPred, 0, uiWidth );
     4383#endif
    42404384#if HHI_INTER_VIEW_RESIDUAL_PRED
    42414385    // subtract residual prediction
    42424386    if( pcCU->getResPredFlag( 0 ) )
    42434387    {
     4388#if LG_RESTRICTEDRESPRED_M24766
     4389                pcCU->getPUResiPredShift(iPUResiPredShift, 0);
     4390                rpcYuvResi->subtract(iPUResiPredShift, pcCU->getPartitionSize(0), rpcYuvResi, rpcYuvResPrd, 0, uiWidth );
     4391#else
    42444392      rpcYuvResi->subtract( rpcYuvResi, rpcYuvResPrd, 0, uiWidth );
     4393#endif
    42454394    }
    42464395#endif
     
    44564605  {
    44574606    pcYuvPred->copyToPartYuv( rpcYuvRec, 0 );
     4607#if LG_RESTRICTEDRESPRED_M24766
     4608        pcCU->getPUResiPredShift(iPUResiPredShift, 0);
     4609        rpcYuvRec->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcYuvResPrd,   uiWidth, uiHeight );
     4610        iPUResiPredShift[0] = iPUResiPredShift[1] = iPUResiPredShift[2] = iPUResiPredShift[3] = 0;
     4611    rpcYuvRec->add(iPUResiPredShift, pcCU->getPartitionSize(0), rpcYuvResiBest, uiWidth, uiHeight );
     4612#else
    44584613    rpcYuvRec->add( rpcYuvResPrd,   uiWidth, uiHeight );
    44594614    rpcYuvRec->add( rpcYuvResiBest, uiWidth, uiHeight );
     4615#endif
    44604616    rpcYuvRec->clip( uiWidth, uiHeight );
    44614617  }
  • trunk/source/Lib/TLibEncoder/TEncSearch.h

    r56 r77  
    188188  Void predInterSearch          ( TComDataCU* pcCU,
    189189                                  TComYuv*    pcOrgYuv,
     190#if LG_RESTRICTEDRESPRED_M24766
     191                                                                  TComYuv*     rpcResiPredYuv,
     192#endif
    190193                                  TComYuv*&   rpcPredYuv,
    191194                                  TComYuv*&   rpcResiYuv,
     
    440443  Void xMergeEstimation           ( TComDataCU*     pcCU,
    441444                                    TComYuv*        pcYuvOrg,
     445#if LG_RESTRICTEDRESPRED_M24766
     446                                                                        TComYuv*        rpcResiPredYuv,
     447#endif
    442448                                    Int             iPartIdx,
    443449                                    UInt&           uiInterDir,
  • trunk/source/Lib/TLibEncoder/TEncSlice.cpp

    r56 r77  
    161161 \param pPPS          PPS associated with the slice
    162162 */
     163#if VIDYO_VPS_INTEGRATION
     164Void TEncSlice::initEncSlice( TComPic* pcPic, Int iPOCLast, UInt uiPOCCurr, Int iNumPicRcvd, Int iGOPid, TComSlice*& rpcSlice, TComVPS * pVPS, TComSPS* pSPS, TComPPS *pPPS )
     165#else
    163166Void TEncSlice::initEncSlice( TComPic* pcPic, Int iPOCLast, UInt uiPOCCurr, Int iNumPicRcvd, Int iGOPid, TComSlice*& rpcSlice, TComSPS* pSPS, TComPPS *pPPS )
     167#endif
    164168{
    165169  Double dQP;
     
    167171 
    168172  rpcSlice = pcPic->getSlice(0);
     173#if VIDYO_VPS_INTEGRATION
     174  rpcSlice->setVPS( pVPS );
     175#endif
    169176  rpcSlice->setSPS( pSPS );
    170177  rpcSlice->setPPS( pPPS );
  • trunk/source/Lib/TLibEncoder/TEncSlice.h

    r56 r77  
    110110 
    111111  /// preparation of slice encoding (reference marking, QP and lambda)
     112#if VIDYO_VPS_INTEGRATION
     113  Void    initEncSlice        ( TComPic*  pcPic, Int iPOCLast, UInt uiPOCCurr, Int iNumPicRcvd, Int iGOPid, TComSlice*& rpcSlice, TComVPS* pVPS, TComSPS* pSPS, TComPPS *pPPS );
     114#else
    112115  Void    initEncSlice        ( TComPic*  pcPic, Int iPOCLast, UInt uiPOCCurr, Int iNumPicRcvd, Int iGOPid, TComSlice*& rpcSlice, TComSPS* pSPS, TComPPS *pPPS );
    113 
     116#endif
    114117  // compress and encode slice
    115118  Void    precompressSlice    ( TComPic*& rpcPic                                );      ///< precompress slice for multi-loop opt.
  • trunk/source/Lib/TLibEncoder/TEncTop.cpp

    r56 r77  
    348348
    349349#if DEPTH_MAP_GENERATION
     350#if VIDYO_VPS_INTEGRATION
     351  m_cDepthMapGenerator.init( (TComPrediction*)this->getPredSearch(), m_pcTAppEncTop->getVPSAccess(), m_pcTAppEncTop->getSPSAccess(), m_pcTAppEncTop->getAUPicAccess() );
     352#else
    350353  m_cDepthMapGenerator.init( (TComPrediction*)this->getPredSearch(), m_pcTAppEncTop->getSPSAccess(), m_pcTAppEncTop->getAUPicAccess() );
     354#endif
    351355#endif
    352356#if HHI_INTER_VIEW_RESIDUAL_PRED
     
    977981Void TEncTop::selectReferencePictureSet(TComSlice* slice, Int POCCurr, Int GOPid,TComList<TComPic*>& listPic )
    978982{
     983#if HHI_FIX
     984  if( slice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDV && POCCurr == 0 )
     985#else
    979986  if( slice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDV )
     987#endif
    980988  {
    981989    TComReferencePictureSet* rps = slice->getLocalRPS();
  • trunk/source/Lib/TLibExtractor/TExtrTop.cpp

    r56 r77  
    5555Bool TExtrTop::extract( InputNALUnit& nalu, std::set<UInt>& rsuiExtractLayerIds )
    5656{
     57#if VIDYO_VPS_INTEGRATION
     58        //extraction now has to be done using layer_id
     59  UInt uiLayerId = nalu.m_layerId;
     60#else
    5761  UInt uiLayerId = xGetLayerId( nalu.m_viewId, nalu.m_isDepth );
    58 
     62#endif
    5963  // Initialize entropy decoder
    6064  m_cEntropyDecoder.setEntropyDecoder( &m_cCavlcDecoder );
    6165  m_cEntropyDecoder.setBitstream     ( nalu.m_Bitstream );
    6266 
     67#if VIDYO_VPS_INTEGRATION
     68  if ( nalu.m_nalUnitType == NAL_UNIT_VPS )
     69  {
     70    // a hack for now assuming there's only one VPS in the bitstream
     71    m_cEntropyDecoder.decodeVPS( &m_cVPS );
     72     
     73  }
     74#endif
     75
    6376  if ( nalu.m_nalUnitType == NAL_UNIT_SPS )
    6477  {
     
    6982#endif
    7083#if HHI_MPI
     84#if VIDYO_VPS_INTEGRATION
     85     m_cEntropyDecoder.decodeSPS( &cSPS, m_cVPS.getDepthFlag(uiLayerId) );
     86#else
    7187     m_cEntropyDecoder.decodeSPS( &cSPS, nalu.m_isDepth );
     88#endif
    7289#else
    7390     m_cEntropyDecoder.decodeSPS( &cSPS );
  • trunk/source/Lib/TLibExtractor/TExtrTop.h

    r56 r77  
    5454{
    5555private:
     56#if VIDYO_VPS_INTEGRATION
     57  TComVPS                 m_cVPS;
     58#endif
    5659   std::list<TComSPS>      m_acSPSBuffer;
    5760
  • trunk/source/Lib/TLibRenderer/TRenSingleModel.cpp

    r56 r77  
    214214  AOT( (ppiShiftLutLeft  == NULL) && (m_iMode == 0 || m_iMode == 2) );
    215215  AOT( (ppiShiftLutRight == NULL) && (m_iMode == 1 || m_iMode == 2) );
     216#if HHI_FIX
     217#else
    216218  AOT( pcOrgVideo != NULL && bKeepReference );
     219#endif
    217220
    218221  m_appiShiftLut[0] = ppiShiftLutLeft;
     
    222225  m_pcPicYuvRef = pcOrgVideo;
    223226
     227#if HHI_FIX
     228  if ( pcOrgVideo && !bKeepReference )
     229#else
    224230  if ( pcOrgVideo )
     231#endif
    225232  {
    226233    TRenFilter::copy(             pcOrgVideo->getLumaAddr(), pcOrgVideo->getStride() , m_iWidth,      m_iHeight,      m_aapiRefVideoPel[0], m_aiRefVideoStrides[0]);
Note: See TracChangeset for help on using the changeset viewer.