Changeset 479 in 3DVCSoftware for branches/HTM-DEV-0.3-dev2/source
- Timestamp:
- 18 Jun 2013, 23:24:53 (12 years ago)
- Location:
- branches/HTM-DEV-0.3-dev2/source
- Files:
-
- 2 deleted
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-DEV-0.3-dev2/source/App/TAppDecoder/TAppDecTop.cpp
r478 r479 641 641 m_tDecTop[ decIdx ] = new TDecTop; 642 642 m_tDecTop[ decIdx ]->create(); 643 #if H_3D_IV_MERGE644 m_tDecTop[ decIdx ]->init(this );645 #else646 643 m_tDecTop[ decIdx ]->init( ); 647 #endif648 644 m_tDecTop[ decIdx ]->setLayerId( layerId ); 649 645 m_tDecTop[ decIdx ]->setDecodedPictureHashSEIEnabled(m_decodedPictureHashSEIEnabled); … … 682 678 } 683 679 #endif 684 #if H_3D_IV_MERGE685 // GT: This function is not necessary anymore m_ivPicLists should be used instead686 TComPic* TAppDecTop::xGetPicFromView( Int viewIdx, Int poc, Bool isDepth )687 {688 assert( ( viewIdx >= 0 ) );689 690 TComList<TComPic*>* apcListPic = m_tDecTop[ (isDepth ? 1 : 0) + viewIdx * 2 ]->getListPic();691 692 TComPic* pcPic = NULL;693 for( TComList<TComPic*>::iterator it=apcListPic->begin(); it!=apcListPic->end(); it++ )694 {695 if( (*it)->getPOC() == poc )696 {697 pcPic = *it;698 break;699 }700 }701 return pcPic;702 }703 #endif704 680 //! \} -
branches/HTM-DEV-0.3-dev2/source/App/TAppDecoder/TAppDecTop.h
r478 r479 49 49 #include "TAppDecCfg.h" 50 50 51 #if H_3D_IV_MERGE52 #include "TLibCommon/TComDepthMapGenerator.h"53 #endif54 51 //! \ingroup TAppDecoder 55 52 //! \{ … … 76 73 // for output control 77 74 Bool m_abDecFlag[ MAX_GOP ]; ///< decoded flag in one GOP 78 #if H_3D_IV_MERGE79 Int m_fcoViewDepthId;80 Char m_fcoOrder[MAX_VIEW_NUM*2];81 #endif82 75 #if H_MV 83 76 Int m_pocLastDisplay [ MAX_NUM_LAYERS ]; ///< last POC in display order … … 89 82 FILE* m_pScaleOffsetFile; 90 83 CamParsCollector m_cCamParsCollector; 91 #if H_3D_IV_MERGE92 TComVPSAccess m_cVPSAccess;93 TComSPSAccess m_cSPSAccess;94 TComAUPicAccess m_cAUPicAccess;95 #endif96 84 #endif 97 85 public: … … 103 91 Void decode (); ///< main decoding function 104 92 105 #if H_3D_IV_MERGE106 TDecTop* getTDecTop ( Int viewIdx, Bool isDepth );107 TComPic* getPicFromView ( Int viewIdx, Int poc, bool isDepth ) { return xGetPicFromView( viewIdx, poc, isDepth ); }108 TComVPSAccess* getVPSAccess () { return &m_cVPSAccess; }109 TComSPSAccess* getSPSAccess () { return &m_cSPSAccess; }110 TComAUPicAccess* getAUPicAccess() { return &m_cAUPicAccess; }111 TDecTop* getDecTop0 () { return m_tDecTop[0]; }112 #endif113 114 93 protected: 115 94 Void xCreateDecLib (); ///< create internal classes … … 117 96 Void xInitDecLib (); ///< initialize decoder class 118 97 119 #if H_3D_IV_MERGE120 TComPic* xGetPicFromView( Int viewIdx, Int poc, Bool isDepth );121 #endif122 98 #if H_MV 123 99 Void xWriteOutput ( TComList<TComPic*>* pcListPic, Int layerId, Int tId ); ///< write YUV to file -
branches/HTM-DEV-0.3-dev2/source/App/TAppEncoder/TAppEncCfg.cpp
r478 r479 718 718 #endif //HHI_VSO 719 719 #if H_3D_IV_MERGE 720 ("PredDepthMapGen", m_uiPredDepthMapGeneration, (UInt)0, "generation of prediction depth maps for motion data prediction" ) 721 ("MultiviewMvPred", m_uiMultiviewMvPredMode, (UInt)0, "usage of predicted depth maps" ) 720 ("IvMvPred", m_ivMvPredFlag, false , "inter view motion prediction " ) 722 721 #endif 723 722 #endif //H_3D … … 1443 1442 xConfirmPara( ((UInt) m_numberOfLayers >> 1 ) != m_cCameraData.getBaseViewNumbers().size(), "Number of Views in BaseViewCameraNumbers must be equal to NumberOfViews" ); 1444 1443 xConfirmPara ( m_iCodedCamParPrecision < 0 || m_iCodedCamParPrecision > 5, "CodedCamParsPrecision must be in range of 0..5" ); 1445 #if H_3D_IV_MERGE1446 xConfirmPara ( m_uiPredDepthMapGeneration > 2, "PredDepthMapGen must be less than or equal to 2" );1447 xConfirmPara ( m_uiMultiviewMvPredMode > 7, "MultiviewMvPred must be less than or equal to 7" );1448 xConfirmPara ( m_uiMultiviewMvPredMode > 0 && m_uiPredDepthMapGeneration == 0 , "MultiviewMvPred > 0 requires PredDepthMapGen > 0" );1449 #endif1450 1444 #if H_3D_VSO 1451 1445 if( m_bUseVSO ) … … 2288 2282 #endif 2289 2283 #if H_3D_IV_MERGE 2290 printf(" MultiviewMvPred:%d", m_uiMultiviewMvPredMode);2284 printf("IvMvPred:%d", m_ivMvPredFlag ); 2291 2285 #endif 2292 2286 printf("\n\n"); -
branches/HTM-DEV-0.3-dev2/source/App/TAppEncoder/TAppEncCfg.h
r476 r479 85 85 Bool m_splittingFlag; ///< Splitting Flag 86 86 Int m_scalabilityMask; ///< Mask indicating scalabilities, 1: texture; 3: texture + depth 87 std::vector<Int> m_dimensionIdLen; ///< Length of scalability dimension s 87 std::vector<Int> m_dimensionIdLen; ///< Length of scalability dimension s 88 #if H_3D_IV_MERGE 89 Bool m_ivMvPredFlag; ///< Interview motion vector prediction 90 #endif 88 91 #endif 89 92 Double m_adLambdaModifier[ MAX_TLAYER ]; ///< Lambda modifier array for each temporal layer … … 381 384 TAppComCamPara m_cCameraData; 382 385 Int m_iCodedCamParPrecision; ///< precision for coding of camera parameters 383 #if H_3D_IV_MERGE384 UInt m_uiMultiviewMvPredMode;385 UInt m_uiPredDepthMapGeneration;386 #endif387 386 #if H_3D_VSO 388 387 Char* m_pchVSOConfig; -
branches/HTM-DEV-0.3-dev2/source/App/TAppEncoder/TAppEncTop.cpp
r478 r479 121 121 #if H_3D 122 122 vps.initViewIndex(); 123 #if H_3D_GEN 124 xSetVPSExtension2 ( vps ); 125 #endif 123 126 m_ivPicLists.setVPS ( &vps ); 124 127 #endif … … 166 169 m_cTEncTop.setDWeight ( isDepth ? m_iDWeight : 0 ); 167 170 #endif // H_3D_VSO 168 #if H_3D_IV_MERGE169 m_cTEncTop.setMultiviewMvPredMode ( m_uiMultiviewMvPredMode );170 m_cTEncTop.setPredDepthMapGeneration ( m_uiPredDepthMapGeneration );171 #endif172 171 #endif // H_3D 173 172 … … 211 210 m_cTEncTop.setNumReorderPics ( m_numReorderPics[i], i ); 212 211 m_cTEncTop.setMaxDecPicBuffering ( m_maxDecPicBuffering[i], i ); 213 #if H_3D_IV_MERGE 214 m_acTEncDepthTopList[iViewIdx]->setNumReorderPics ( m_numReorderPics[iViewIdx][i], i ); 215 m_acTEncDepthTopList[iViewIdx]->setMaxDecPicBuffering ( m_maxDecPicBuffering[iViewIdx][i], i ); 216 #endif 217 } 218 #if H_3D_IV_MERGE 219 m_acTEncDepthTopList[iViewIdx]->setQP ( m_aiQP[1] ); 220 221 m_acTEncDepthTopList[iViewIdx]->setTemporalLayerQPOffset ( m_aiTLayerQPOffset ); 222 m_acTEncDepthTopList[iViewIdx]->setPad ( m_aiPad ); 223 224 m_acTEncDepthTopList[iViewIdx]->setMaxTempLayer ( m_maxTempLayer[iViewIdx] ); 225 226 m_acTEncDepthTopList[iViewIdx]->setDisInter4x4 ( m_bDisInter4x4); 227 228 m_acTEncDepthTopList[iViewIdx]->setUseNSQT( m_enableNSQT ); 229 m_acTEncDepthTopList[iViewIdx]->setUseAMP( m_enableAMP ); 230 #endif 212 } 231 213 #endif 232 214 for( UInt uiLoop = 0; uiLoop < MAX_TLAYER; ++uiLoop ) … … 625 607 for(Int layer=0; layer<m_numberOfLayers; layer++) 626 608 { 627 #if H_3D_IV_MERGE628 m_acTEncTopList[layer]->init(this );629 #else630 609 m_acTEncTopList[layer]->init( ); 631 #endif632 610 } 633 611 #else … … 1057 1035 } 1058 1036 #endif 1037 #if H_3D_GEN 1038 Void TAppEncTop::xSetVPSExtension2( TComVPS& vps ) 1039 { 1040 for ( Int layer = 0; layer < vps.getMaxLayers(); layer++ ) 1041 { 1042 if ( layer != 0 ) 1043 { 1044 if( ( vps.getDepthId( layer ) == 0 ) ) 1045 { 1059 1046 #if H_3D_IV_MERGE 1060 // GT: This function is not necessary anymore m_ivPicLists should be used instead 1061 TComPic* TAppEncTop::xGetPicFromView( Int viewIdx, Int poc, Bool isDepth ) 1062 { 1063 assert( ( viewIdx >= 0 ) && ( viewIdx < m_iNumberOfViews ) ); 1064 1065 TComList<TComPic*>* apcListPic = m_acTEncTopList[(isDepth ? 1 : 0) + viewIdx * 2]->getListPic() ; 1066 1067 1068 1069 TComPic* pcPic = NULL; 1070 for(TComList<TComPic*>::iterator it=apcListPic->begin(); it!=apcListPic->end(); it++) 1071 { 1072 if( (*it)->getPOC() == poc ) 1073 { 1074 pcPic = *it ; 1075 break ; 1076 } 1077 } 1078 1079 return pcPic; 1080 }; 1047 vps.setIvMvPredFlag( layer, m_ivMvPredFlag ); 1048 #endif 1049 } 1050 } 1051 } 1052 } 1081 1053 #endif 1082 1054 //! \} -
branches/HTM-DEV-0.3-dev2/source/App/TAppEncoder/TAppEncTop.h
r478 r479 48 48 #if H_3D 49 49 #include "../../Lib/TLibRenderer/TRenTop.h" 50 #if H_3D_IV_MERGE51 #include "TLibCommon/TComDepthMapGenerator.h"52 #endif53 50 #endif 54 51 … … 92 89 TRenModel m_cRendererModel; 93 90 #endif 94 #if H_3D_IV_MERGE95 TComVPSAccess m_cVPSAccess;96 TComSPSAccess m_cSPSAccess;97 TComAUPicAccess m_cAUPicAccess;98 #endif99 91 protected: 100 92 // initialization … … 122 114 void rateStatsAccum(const AccessUnit& au, const std::vector<UInt>& stats); 123 115 void printRateSummary(); 124 #if H_3D_IV_MERGE 125 TComPic* xGetPicFromView( Int viewIdx, Int iPoc, Bool isDepth ); 126 #endif 116 127 117 #if H_MV 128 118 Void xSetLayerIds ( TComVPS& vps ); … … 131 121 Int xGetMax( std::vector<Int>& vec); 132 122 #endif 123 #if H_3D_GEN 124 Void xSetVPSExtension2( TComVPS& vps ); 125 #endif 133 126 public: 134 127 TAppEncTop(); … … 136 129 137 130 Void encode (); ///< main encoding function 138 #if H_3D_IV_MERGE139 TComPic* getPicFromView ( Int viewIdx, Int poc, Bool isDepth ) { return xGetPicFromView( viewIdx, poc, isDepth ); }140 #endif141 131 #if H_MV 142 132 TEncTop* getTEncTop( UInt layer ) { return m_acTEncTopList[layer]; } ///< return pointer to encoder class for specific layer 143 133 #else 144 134 TEncTop& getTEncTop () { return m_cTEncTop; } ///< return encoder class pointer reference 145 #endif146 #if H_3D_IV_MERGE147 TComVPSAccess* getVPSAccess () { return &m_cVPSAccess; }148 TComSPSAccess* getSPSAccess () { return &m_cSPSAccess; }149 TComAUPicAccess* getAUPicAccess() { return &m_cAUPicAccess; }150 135 #endif 151 136 };// END CLASS DEFINITION TAppEncTop -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/CommonDef.h
r478 r479 178 178 } 179 179 180 #if H_3D_IV_MERGE181 #define ROFVS( exp ) \182 { \183 if( !( exp ) ) \184 { \185 return; \186 } \187 }188 189 #define ROTVS( exp ) \190 { \191 if( ( exp ) ) \192 { \193 return; \194 } \195 }196 197 #define ROTRS( exp, retVal ) \198 { \199 if( ( exp ) ) \200 { \201 return retVal; \202 } \203 }204 205 #define ROFRS( exp, retVal ) \206 { \207 if( !( exp ) ) \208 { \209 return retVal; \210 } \211 }212 #endif213 180 template <typename T> 214 181 __inline T gSign(const T& t) … … 360 327 #define STD_CAM_PARAMETERS_PRECISION 5 ///< quarter luma sample accuarcy for derived disparities (as default) 361 328 362 #if H_3D_IV_MERGE363 // GT: To be checked if all of this is still necessary.364 #define PDM_USE_FOR_IVIEW 1365 #define PDM_USE_FOR_INTER 2366 #define PDM_USE_FOR_MERGE 4367 368 #define MAX_VIEW_NUM 10369 #define PDM_SUBSAMPLING_EXP 2 // subsampling factor is 2^PDM_SUBSAMPLING_EXP370 #define PDM_SUB_SAMP_EXP_X(Pdm) ((Pdm)==1?PDM_SUBSAMPLING_EXP:0)371 #define PDM_SUB_SAMP_EXP_Y(Pdm) ((Pdm)==1?PDM_SUBSAMPLING_EXP:0)372 373 #define PDM_INTERNAL_CALC_BIT_DEPTH 31 // bit depth for internal calculations (32 - 1 for signed values)374 #define PDM_BITDEPTH_VIRT_DEPTH 15 // bit depth for virtual depth storage (16 - 1 for signed values)375 #define PDM_LOG2_MAX_ABS_NORMAL_DISPARITY 8 // maximum absolute normal disparity = 256 (for setting accuracy)376 #define PDM_VIRT_DEPTH_PRECISION 4 // must be greater than or equal to 2 (since MVs are given in quarter-pel units)377 378 #define PDM_INTER_CALC_SHIFT ( PDM_INTERNAL_CALC_BIT_DEPTH - PDM_BITDEPTH_VIRT_DEPTH ) // avoids overflow379 #define PDM_LOG4_SCALE_DENOMINATOR ( PDM_LOG2_MAX_ABS_NORMAL_DISPARITY + PDM_VIRT_DEPTH_PRECISION ) // accuracy of scaling factor380 #define PDM_OFFSET_SHIFT ( PDM_LOG2_MAX_ABS_NORMAL_DISPARITY ) // accuracy of offset381 382 #endif383 329 #endif // end of H_3D 384 330 //! \} -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComDataCU.cpp
r478 r479 40 40 #include "TComPic.h" 41 41 42 #if H_3D_IV_MERGE43 #include "TComDepthMapGenerator.h"44 #endif45 42 //! \ingroup TLibCommon 46 43 //! \{ … … 2458 2455 deriveLeftBottomIdxGeneral ( uiAbsPartIdx, uiPUIdx, uiPartIdxLB ); 2459 2456 #if H_3D_IV_MERGE 2460 Bool bNoPdmMerge = ( m_pcSlice->getSPS()->getViewIndex() == 0 || ( m_pcSlice->getSPS()->getMultiviewMvPredMode() & PDM_USE_FOR_MERGE ) != PDM_USE_FOR_MERGE);2457 Bool ivMvPredFlag = getSlice()->getVPS()->getIvMvPredFlag( getSlice()->getLayerIdInVps() ); 2461 2458 2462 2459 //===== add merge with predicted depth maps ===== … … 2556 2553 2557 2554 Int iPdmDir[2] = {0, 0}; 2558 get UnifiedMvPredCan(uiPUIdx, REF_PIC_LIST_0, 0, aiPdmRefIdx, acPdmMv, &cDisInfo, iPdmDir, true);2555 getInterViewMergeCands(uiPUIdx, aiPdmRefIdx, acPdmMv, &cDisInfo, iPdmDir ); 2559 2556 Int iPdmInterDir; 2560 2557 2561 if( iPdmDir[0] && !bNoPdmMerge)2558 if( iPdmDir[0] && ivMvPredFlag ) 2562 2559 { 2563 2560 abCandIsInter [ iCount ] = true; … … 2755 2752 2756 2753 #if H_3D_IV_MERGE 2757 if( !bNoPdmMerge&& iPdmDir[1] )2754 if(ivMvPredFlag && iPdmDir[1] ) 2758 2755 { 2759 2756 assert(iCount < getSlice()->getMaxNumMergeCand()); … … 4500 4497 #endif 4501 4498 #if H_3D_IV_MERGE 4502 Bool TComDataCU::getUnifiedMvPredCan(UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDInfo, Int* iPdm, Bool bMerge ) 4503 { 4504 TComDepthMapGenerator* pcDepthMapGenerator = m_pcSlice->getSPS()->getDepthMapGenerator(); 4505 ROFRS( pcDepthMapGenerator, false ); 4506 if (pcDepthMapGenerator->getPdmCandidate(this, uiPartIdx, eRefPicList, iRefIdx, paiPdmRefIdx, pacPdmMv, pDInfo, iPdm, bMerge)) 4507 return true; 4499 Bool 4500 TComDataCU::getInterViewMergeCands(UInt uiPartIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDInfo, Int* availableMcDc ) 4501 { 4502 TComSlice* pcSlice = getSlice (); 4503 4504 Bool valid = false; 4505 Int iViewIndex = 0; 4506 4507 for( UInt uiBIndex = 0; uiBIndex < pcSlice->getViewIndex( ) && !valid; uiBIndex++ ) 4508 { 4509 UInt uiBaseIndex = uiBIndex; 4510 TComPic* pcBasePic = pcSlice->getIvPic( false, uiBaseIndex ); 4511 for( Int iRefListId = 0; iRefListId < 2 && !valid; iRefListId++ ) 4512 { 4513 RefPicList eRefPicListTest = RefPicList( iRefListId ); 4514 Int iNumRefPics = pcSlice->getNumRefIdx( eRefPicListTest ) ; 4515 for( Int iRefIndex = 0; iRefIndex < iNumRefPics; iRefIndex++ ) 4516 { 4517 if(pcBasePic->getPOC() == pcSlice->getRefPic( eRefPicListTest, iRefIndex )->getPOC() 4518 && pcBasePic->getViewIndex() == pcSlice->getRefPic( eRefPicListTest, iRefIndex )->getViewIndex()) 4519 { 4520 valid = true; 4521 iViewIndex = uiBaseIndex; 4522 break; 4523 } 4524 } 4525 } 4526 } 4527 4528 if (!valid) 4529 return false; 4530 4531 //--- get base CU/PU and check prediction mode --- 4532 TComPic* pcBasePic = pcSlice->getIvPic( false, iViewIndex ); 4533 TComPicYuv* pcBaseRec = pcBasePic->getPicYuvRec (); 4534 4535 UInt uiPartAddr; 4536 Int iWidth; 4537 Int iHeight; 4538 getPartIndexAndSize( uiPartIdx, uiPartAddr, iWidth, iHeight ); 4539 4540 Int iCurrPosX, iCurrPosY; 4541 pcBaseRec->getTopLeftSamplePos( getAddr(), getZorderIdxInCU() + uiPartAddr, iCurrPosX, iCurrPosY ); 4542 4543 iCurrPosX += ( ( iWidth - 1 ) >> 1 ); 4544 iCurrPosY += ( ( iHeight - 1 ) >> 1 ); 4545 4546 Int iBasePosX = Clip3( 0, pcBaseRec->getWidth () - 1, iCurrPosX + ( (pDInfo->m_acNBDV.getHor() + 2 ) >> 2 ) ); 4547 Int iBasePosY = Clip3( 0, pcBaseRec->getHeight() - 1, iCurrPosY + ( (pDInfo->m_acNBDV.getVer() + 2 ) >> 2 )); 4548 4549 Int iBaseCUAddr; 4550 Int iBaseAbsPartIdx; 4551 pcBaseRec->getCUAddrAndPartIdx( iBasePosX , iBasePosY , iBaseCUAddr, iBaseAbsPartIdx ); 4552 4553 TComDataCU* pcBaseCU = pcBasePic->getCU( iBaseCUAddr ); 4554 4555 Bool abPdmAvailable[4] = {false, false, false, false}; 4556 if(!( pcBaseCU->getPredictionMode( iBaseAbsPartIdx ) == MODE_INTRA )) 4557 { 4558 for( UInt uiCurrRefListId = 0; uiCurrRefListId < 2; uiCurrRefListId++ ) 4559 { 4560 RefPicList eCurrRefPicList = RefPicList( uiCurrRefListId ); 4561 4562 Bool stopLoop = false; 4563 for(Int iLoop = 0; iLoop < 2 && !stopLoop; ++iLoop) 4564 { 4565 RefPicList eBaseRefPicList = (iLoop ==1)? RefPicList( 1 - uiCurrRefListId ) : RefPicList( uiCurrRefListId ); 4566 TComMvField cBaseMvField; 4567 pcBaseCU->getMvField( pcBaseCU, iBaseAbsPartIdx, eBaseRefPicList, cBaseMvField ); 4568 Int iBaseRefIdx = cBaseMvField.getRefIdx(); 4569 if (iBaseRefIdx >= 0) 4570 { 4571 Int iBaseRefPOC = pcBaseCU->getSlice()->getRefPOC(eBaseRefPicList, iBaseRefIdx); 4572 if (iBaseRefPOC != pcSlice->getPOC()) 4573 { 4574 for (Int iPdmRefIdx = 0; iPdmRefIdx < pcSlice->getNumRefIdx( eCurrRefPicList ); iPdmRefIdx++) 4575 { 4576 if (iBaseRefPOC == pcSlice->getRefPOC(eCurrRefPicList, iPdmRefIdx)) 4577 { 4578 abPdmAvailable[ uiCurrRefListId ] = true; 4579 TComMv cMv(cBaseMvField.getHor(), cBaseMvField.getVer()); 4580 4581 // cMv.m_bDvMcp = true; 4582 // cMv.m_iDvMcpDispX = pDInfo->m_acMvCand[0].getHor(); 4583 4584 clipMv( cMv ); 4585 paiPdmRefIdx [ uiCurrRefListId ] = iPdmRefIdx; 4586 pacPdmMv [ uiCurrRefListId ] = cMv; 4587 stopLoop = true; 4588 break; 4589 } 4590 } 4591 } 4592 } 4593 } 4594 } 4595 } 4596 availableMcDc[0] = ( abPdmAvailable[0] ? 1 : 0 ) + ( abPdmAvailable[1] ? 2 : 0 ); 4597 4598 for( Int iRefListId = 0; iRefListId < 2 ; iRefListId++ ) 4599 { 4600 RefPicList eRefPicListDMV = RefPicList( iRefListId ); 4601 Int iNumRefPics = pcSlice->getNumRefIdx( eRefPicListDMV ); 4602 for( Int iPdmRefIdx = 0; iPdmRefIdx < iNumRefPics; iPdmRefIdx++ ) 4603 { 4604 if( pcSlice->getRefPOC( eRefPicListDMV, iPdmRefIdx ) == pcSlice->getPOC()) 4605 { 4606 abPdmAvailable[ iRefListId+2 ] = true; 4607 paiPdmRefIdx [ iRefListId+2 ] = iPdmRefIdx; 4608 4609 TComMv cMv = pDInfo->m_acNBDV; 4610 cMv.setVer(0); 4611 clipMv( cMv ); 4612 pacPdmMv [ iRefListId + 2] = cMv; 4613 break; 4614 } 4615 } 4616 } 4617 availableMcDc[1] = ( abPdmAvailable[2] ? 1 : 0 ) + ( abPdmAvailable[3] ? 2 : 0 ); 4508 4618 return false; 4509 4619 } -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComDataCU.h
r478 r479 435 435 #endif 436 436 #if H_3D_IV_MERGE 437 Bool get UnifiedMvPredCan ( UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDInfo, Int* iPdm, Bool bMerge );437 Bool getInterViewMergeCands ( UInt uiPartIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDInfo, Int* availableMcDc ); 438 438 #endif 439 439 // ------------------------------------------------------------------------------------------------------------------- -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComPic.h
r476 r479 141 141 Int getPOC() { return m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getPOC(); } 142 142 TComDataCU*& getCU( UInt uiCUAddr ) { return m_apcPicSym->getCU( uiCUAddr ); } 143 #if H_3D_IV_MERGE144 TComSlice* getCurrSlice() { return m_apcPicSym->getSlice(m_uiCurrSliceIdx); }145 TComSPS* getSPS() { return m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getSPS(); }146 TComVPS* getVPS() { return m_apcPicSym->getSlice(m_uiCurrSliceIdx)->getVPS(); }147 #endif148 143 149 144 TComPicYuv* getPicYuvOrg() { return m_apcPicYuv[0]; } -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComSlice.cpp
r478 r479 68 68 , m_iSliceQpDeltaCb ( 0 ) 69 69 , m_iSliceQpDeltaCr ( 0 ) 70 #if H_3D_IV_MERGE71 , m_pcTexturePic ( NULL )72 #endif73 70 , m_iDepth ( 0 ) 74 71 , m_bRefenced ( false ) … … 174 171 175 172 m_colRefIdx = 0; 176 #if H_3D_IV_MERGE177 m_pcTexturePic = NULL;178 #endif179 173 initEqualRef(); 180 174 #if !L0034_COMBINED_LIST_CLEANUP … … 1497 1491 } 1498 1492 } 1493 #if H_3D_IV_MERGE 1494 for( Int i = 0; i < MAX_NUM_LAYERS; i++ ) 1495 { 1496 m_ivMvPredFlag[ i ] = false; 1497 } 1498 #endif 1499 1499 #endif 1500 1500 } … … 1857 1857 } 1858 1858 } 1859 #if H_3D_IV_MERGE1860 Void1861 TComSPS::setPredDepthMapGeneration( UInt uiViewIndex, Bool bIsDepth, UInt uiPdmGenMode, UInt uiPdmMvPredMode)1862 {1863 AOF( m_uiViewIndex == uiViewIndex );1864 AOF( m_bDepth == bIsDepth );1865 AOT( ( uiViewIndex == 0 || bIsDepth ) && uiPdmGenMode );1866 AOT( uiPdmMvPredMode && uiPdmGenMode == 0 );1867 1868 m_uiPredDepthMapGeneration = uiPdmGenMode;1869 m_uiMultiviewMvPredMode = uiPdmMvPredMode;1870 }1871 #endif1872 1859 const Int TComSPS::m_winUnitX[]={1,2,2,1}; 1873 1860 const Int TComSPS::m_winUnitY[]={1,2,1,1}; … … 1936 1923 ::memset( m_aaiCodedOffset, 0x00, sizeof( m_aaiCodedOffset ) ); 1937 1924 1938 #if H_3D_IV_MERGE1939 m_uiViewIndex = uiViewIndex;1940 m_bDepth = false;1941 #endif1942 1925 if( !m_bCamParInSliceHeader ) 1943 1926 { … … 1951 1934 } 1952 1935 } 1953 #if H_3D_IV_MERGE1954 Void1955 TComSPS::initCamParaSPSDepth( UInt uiViewIndex)1956 {1957 m_uiCamParPrecision = 0;1958 m_bCamParInSliceHeader = false;1959 1960 ::memset( m_aaiCodedScale, 0x00, sizeof( m_aaiCodedScale ) );1961 ::memset( m_aaiCodedOffset, 0x00, sizeof( m_aaiCodedOffset ) );1962 1963 m_uiViewIndex = uiViewIndex;1964 m_bDepth = true;1965 }1966 #endif1967 1936 #endif 1968 1937 … … 2298 2267 } 2299 2268 } 2269 #if H_3D_GEN 2270 Void TComSlice::setIvPicLists( TComPicLists* m_ivPicLists ) 2271 { 2272 for (Int i = 0; i < MAX_NUM_LAYERS; i++ ) 2273 { 2274 for ( Int depthId = 0; depthId < 2; depthId++ ) 2275 { 2276 m_ivPicsCurrPoc[ depthId ][ i ] = ( i <= m_viewIndex ) ? m_ivPicLists->getPic( i, ( depthId == 1) , getPOC() ) : NULL; 2277 } 2278 } 2279 } 2280 #endif 2300 2281 #endif 2301 2282 /** get scaling matrix from RefMatrixID … … 2606 2587 } 2607 2588 #endif 2589 2608 2590 //! \} -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComSlice.h
r478 r479 54 54 class TComPicLists; 55 55 #endif 56 #if H_3D_IV_MERGE57 class TComDepthMapGenerator;58 #endif59 56 // ==================================================================================================================== 60 57 // Constants … … 540 537 Int m_refLayerId [ MAX_NUM_LAYERS ][MAX_NUM_LAYERS]; 541 538 539 #if H_3D_IV_MERGE 540 Bool m_ivMvPredFlag [ MAX_NUM_LAYERS ]; 541 #endif 542 542 #endif 543 543 public: … … 673 673 Bool checkVPSExtensionSyntax(); 674 674 Int scalTypeToScalIdx ( ScalabilityType scalType ); 675 #if H_3D_IV_MERGE 676 Void setIvMvPredFlag ( Int layerIdInVps, Bool val ) { m_ivMvPredFlag[ layerIdInVps ] = val; } 677 Bool getIvMvPredFlag ( Int layerIdInVps ) { return m_ivMvPredFlag[ layerIdInVps ]; }; 678 #endif 675 679 #endif 676 680 }; … … 984 988 Int m_aaiCodedScale [2][MAX_NUM_LAYERS]; 985 989 Int m_aaiCodedOffset[2][MAX_NUM_LAYERS]; 986 #if H_3D_IV_MERGE987 UInt m_uiMultiviewMvPredMode;988 UInt m_uiPredDepthMapGeneration;989 990 UInt m_uiViewIndex;991 Bool m_bDepth;992 TComDepthMapGenerator* m_pcDepthMapGenerator;993 #endif994 990 #endif 995 991 public: … … 1135 1131 Int* getInvCodedScale () { return m_aaiCodedScale [1]; } 1136 1132 Int* getInvCodedOffset () { return m_aaiCodedOffset[1]; } 1137 #if H_3D_IV_MERGE1138 Void initCamParaSPSDepth ( UInt uiViewIndex);1139 UInt getMultiviewMvPredMode () { return m_uiMultiviewMvPredMode; }1140 UInt getPredDepthMapGeneration() { return m_uiPredDepthMapGeneration; }1141 1142 UInt getViewIndex () { return m_uiViewIndex; }1143 Bool isDepth () { return m_bDepth; }1144 Void setDepthMapGenerator( TComDepthMapGenerator* pcDepthMapGenerator ) { m_pcDepthMapGenerator = pcDepthMapGenerator; }1145 TComDepthMapGenerator* getDepthMapGenerator() { return m_pcDepthMapGenerator; }1146 Void setPredDepthMapGeneration( UInt uiViewIndex, Bool bIsDepth, UInt uiPdmGenMode = 0, UInt uiPdmMvPredMode = 0);1147 #endif1148 1133 #endif 1149 1134 }; … … 1436 1421 #endif 1437 1422 Bool m_bIsUsedAsLongTerm[2][MAX_NUM_REF+1]; 1438 #if H_3D_IV_MERGE1439 TComPic* m_pcTexturePic;1440 #endif1441 1423 Int m_iDepth; 1442 1424 … … 1510 1492 Bool m_isDepth; 1511 1493 Int m_aaiCodedScale [2][MAX_NUM_LAYERS]; 1512 Int m_aaiCodedOffset[2][MAX_NUM_LAYERS]; 1494 Int m_aaiCodedOffset[2][MAX_NUM_LAYERS]; 1495 #if H_3D_GEN 1496 TComPic* m_ivPicsCurrPoc [2][MAX_NUM_LAYERS]; 1497 #endif 1513 1498 #endif 1514 1499 #endif … … 1569 1554 TComPic* getRefPic ( RefPicList e, Int iRefIdx) { return m_apcRefPicList[e][iRefIdx]; } 1570 1555 Int getRefPOC ( RefPicList e, Int iRefIdx) { return m_aiRefPOCList[e][iRefIdx]; } 1556 #if H_3D_GEN 1557 TComPic* getIvPic ( Bool depthFlag, Int viewIndex){ return m_ivPicsCurrPoc[ depthFlag ? 1 : 0 ][ viewIndex ]; } 1558 #endif 1571 1559 #if H_3D_IV_MERGE 1572 TComPic* getTexturePic () const { return m_pcTexturePic; }1560 TComPic* getTexturePic () { return m_ivPicsCurrPoc[0][ m_viewIndex ]; } 1573 1561 #endif 1574 1562 Int getDepth () { return m_iDepth; } … … 1622 1610 Void setRefPic ( TComPic* p, RefPicList e, Int iRefIdx ) { m_apcRefPicList[e][iRefIdx] = p; } 1623 1611 Void setRefPOC ( Int i, RefPicList e, Int iRefIdx ) { m_aiRefPOCList[e][iRefIdx] = i; } 1624 #if H_3D_IV_MERGE1625 Void setTexturePic ( TComPic *pcTexturePic ) { m_pcTexturePic = pcTexturePic; }1626 #endif1627 1612 Void setNumRefIdx ( RefPicList e, Int i ) { m_aiNumRefIdx[e] = i; } 1628 1613 Void setPic ( TComPic* p ) { m_pcPic = p; } … … 1789 1774 #endif 1790 1775 #endif 1776 #if H_3D_GEN 1777 Void setIvPicLists( TComPicLists* m_ivPicLists ); 1778 #endif 1779 1791 1780 protected: 1792 1781 TComPic* xGetRefPic (TComList<TComPic*>& rcListPic, … … 1794 1783 TComPic* xGetLongTermRefPic(TComList<TComPic*>& rcListPic, Int poc, Bool pocHasMsb); 1795 1784 #if H_MV 1796 TComPic* xGetInterLayerRefPic( std::vector<TComPic*>& rcListIlPic, Int layerId ); 1785 TComPic* xGetInterLayerRefPic( std::vector<TComPic*>& rcListIlPic, Int layerId ); 1797 1786 #endif 1798 1787 };// END CLASS DEFINITION TComSlice -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TypeDef.h
r476 r479 97 97 // QC_AMVP_MRG_UNIFY_IVCAN_C0051 98 98 // TEXTURE MERGING CANDIDATE , JCT3V-C0137 99 99 #define H_3D_GEN 1 // Some general changes can be removed after merge 100 100 #endif 101 101 -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibDecoder/TDecCAVLC.cpp
r478 r479 759 759 } 760 760 #endif // !H_MV 761 #if H_3D_IV_MERGE762 READ_FLAG( uiCode, "base_view_flag" );763 if( uiCode )764 { // baseview SPS -> set standard values765 pcSPS->initCamParaSPS ( 0 );766 pcSPS->setPredDepthMapGeneration( 0, false );767 }768 else769 {770 READ_FLAG( uiCode, "depth_flag" );771 if( uiCode )772 {773 READ_UVLC( uiCode, "view_idx" );774 pcSPS->initCamParaSPSDepth ( uiCode );775 pcSPS->setPredDepthMapGeneration( uiCode, true );776 }777 else778 {779 UInt uiViewIndex;780 READ_UVLC( uiViewIndex, "view_idx" ); uiViewIndex++;781 UInt uiPredDepthMapGeneration = 0;782 UInt uiMultiviewMvPredMode = 0;783 784 READ_UVLC( uiPredDepthMapGeneration, "Pdm_generation" );785 if( uiPredDepthMapGeneration )786 {787 READ_UVLC( uiMultiviewMvPredMode, "multi_view_mv_pred_mode" );788 }789 790 pcSPS->setPredDepthMapGeneration( uiViewIndex, false, uiPredDepthMapGeneration, uiMultiviewMvPredMode);791 792 }793 }794 #endif795 761 } 796 762 } … … 987 953 if (uiCode) 988 954 { 955 #if H_3D 956 #if H_3D_IV_MERGE 957 for( Int layer = 0; layer <= pcVPS->getMaxLayers() - 1; layer++ ) 958 { 959 if (layer != 0) 960 { 961 if ( !( pcVPS->getDepthId( layer ) == 1 ) ) 962 { 963 READ_FLAG( uiCode, "ivMvPredFlag[i]"); pcVPS->setIvMvPredFlag( layer, uiCode == 1 ? true : false ); 964 } 965 } 966 } 967 #endif 968 #else 989 969 while ( xMoreRbspData() ) 990 970 { 991 971 READ_FLAG( uiCode, "vps_extension2_data_flag"); 992 972 } 973 #endif 993 974 } 994 975 … … 1449 1430 READ_UVLC( uiCode, "five_minus_max_num_merge_cand"); 1450 1431 #if H_3D_IV_MERGE 1451 rpcSlice->setMaxNumMergeCand(((rpcSlice->getSPS()->getMultiviewMvPredMode() & PDM_USE_FOR_MERGE) == PDM_USE_FOR_MERGE ? MRG_MAX_NUM_CANDS_MEM: MRG_MAX_NUM_CANDS) - uiCode); 1432 Bool ivMvPredFlag = rpcSlice->getVPS()->getIvMvPredFlag( rpcSlice->getLayerIdInVps() ) ; 1433 rpcSlice->setMaxNumMergeCand(( ivMvPredFlag ? MRG_MAX_NUM_CANDS_MEM : MRG_MAX_NUM_CANDS) - uiCode); 1452 1434 #else 1453 1435 rpcSlice->setMaxNumMergeCand(MRG_MAX_NUM_CANDS - uiCode); -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibDecoder/TDecGop.cpp
r478 r479 84 84 TComLoopFilter* pcLoopFilter, 85 85 TComSampleAdaptiveOffset* pcSAO 86 #if H_3D_IV_MERGE87 ,TComDepthMapGenerator* pcDepthMapGenerator88 #endif89 86 ) 90 87 { … … 96 93 m_pcLoopFilter = pcLoopFilter; 97 94 m_pcSAO = pcSAO; 98 #if H_3D_IV_MERGE99 m_pcDepthMapGenerator = pcDepthMapGenerator;100 #endif101 95 } 102 96 … … 158 152 m_LFCrossSliceBoundaryFlag.push_back( pcSlice->getLFCrossSliceBoundaryFlag()); 159 153 } 160 #if H_3D_IV_MERGE161 if( uiStartCUAddr == 0 )162 {163 m_pcDepthMapGenerator->initViewComponent( rpcPic );164 }165 #endif166 154 #if H_3D_NBDV 167 155 if(pcSlice->getViewIndex() && !pcSlice->getIsDepth()) //Notes from QC: this condition shall be changed once the configuration is completed, e.g. in pcSlice->getSPS()->getMultiviewMvPredMode() || ARP in prev. HTM. Remove this comment once it is done. -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibDecoder/TDecGop.h
r478 r479 51 51 #include "TLibCommon/TComSampleAdaptiveOffset.h" 52 52 53 #if H_3D_IV_MERGE54 #include "TLibCommon/TComDepthMapGenerator.h"55 #endif56 53 #include "TDecEntropy.h" 57 54 #include "TDecSlice.h" … … 82 79 TComLoopFilter* m_pcLoopFilter; 83 80 84 #if H_3D_IV_MERGE85 TComDepthMapGenerator* m_pcDepthMapGenerator;86 #endif87 81 TComSampleAdaptiveOffset* m_pcSAO; 88 82 Double m_dDecTime; … … 104 98 TComLoopFilter* pcLoopFilter, 105 99 TComSampleAdaptiveOffset* pcSAO 106 #if H_3D_IV_MERGE107 ,TComDepthMapGenerator* pcDepthMapGenerator108 #endif109 100 ); 110 101 Void create (); -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibDecoder/TDecTop.cpp
r478 r479 37 37 38 38 #include "NALread.h" 39 #if H_3D_IV_MERGE40 #include "../../App/TAppDecoder/TAppDecTop.h"41 #endif42 39 #include "TDecTop.h" 43 40 … … 392 389 } 393 390 394 #if H_3D_IV_MERGE395 Void TDecTop::init(TAppDecTop* pcTAppDecTop)396 #else397 391 Void TDecTop::init() 398 #endif399 392 { 400 393 // initialize ROM … … 402 395 initROM(); 403 396 #endif 404 m_cGopDecoder.init( &m_cEntropyDecoder, &m_cSbacDecoder, &m_cBinCABAC, &m_cCavlcDecoder, &m_cSliceDecoder, &m_cLoopFilter, &m_cSAO 405 #if H_3D_IV_MERGE 406 , &m_cDepthMapGenerator 407 #endif 408 ); 397 m_cGopDecoder.init( &m_cEntropyDecoder, &m_cSbacDecoder, &m_cBinCABAC, &m_cCavlcDecoder, &m_cSliceDecoder, &m_cLoopFilter, &m_cSAO ); 409 398 m_cSliceDecoder.init( &m_cEntropyDecoder, &m_cCuDecoder ); 410 399 m_cEntropyDecoder.init(&m_cPrediction); 411 #if H_3D_IV_MERGE412 m_tAppDecTop = pcTAppDecTop;413 m_cDepthMapGenerator.init( &m_cPrediction, m_tAppDecTop->getVPSAccess(), m_tAppDecTop->getSPSAccess(), m_tAppDecTop->getAUPicAccess() );414 #endif415 400 } 416 401 … … 769 754 770 755 m_cSliceDecoder.create(); 771 #if H_3D_IV_MERGE772 UInt uiPdm = ( m_apcSlicePilot->getSPS()->getViewIndex() ? m_apcSlicePilot->getSPS()->getPredDepthMapGeneration() : m_tAppDecTop->getSPSAccess()->getPdm() );773 m_cDepthMapGenerator.create( true, m_apcSlicePilot->getSPS()->getPicWidthInLumaSamples(), m_apcSlicePilot->getSPS()->getPicHeightInLumaSamples(), g_uiMaxCUDepth, g_uiMaxCUWidth, g_uiMaxCUHeight, g_bitDepthY, PDM_SUB_SAMP_EXP_X(uiPdm), PDM_SUB_SAMP_EXP_Y(uiPdm) );774 TComDepthMapGenerator* pcDMG0 = m_tAppDecTop->getDecTop0()->getDepthMapGenerator();775 if( m_apcSlicePilot->getSPS()->getViewIndex() == 1 && ( pcDMG0->getSubSampExpX() != PDM_SUB_SAMP_EXP_X(uiPdm) || pcDMG0->getSubSampExpY() != PDM_SUB_SAMP_EXP_Y(uiPdm) ) )776 {777 pcDMG0->create( true, m_apcSlicePilot->getSPS()->getPicWidthInLumaSamples(), m_apcSlicePilot->getSPS()->getPicHeightInLumaSamples(), g_uiMaxCUDepth, g_uiMaxCUWidth, g_uiMaxCUHeight, g_bitDepthY, PDM_SUB_SAMP_EXP_X(uiPdm), PDM_SUB_SAMP_EXP_Y(uiPdm) );778 }779 #endif780 756 } 781 757 else … … 918 894 919 895 #endif 920 #if H_3D_IV_MERGE 921 TComPic * const pcTexturePic = m_isDepth ? m_tAppDecTop->getPicFromView( m_viewIndex, pcSlice->getPOC(), false ) : NULL; 922 assert( !m_isDepth || pcTexturePic != NULL ); 923 pcSlice->setTexturePic( pcTexturePic ); 896 #if H_3D_GEN 897 pcSlice->setIvPicLists( m_ivPicLists ); 898 #if H_3D_IV_MERGE 899 assert( !getIsDepth() || ( pcSlice->getTexturePic() != 0 ) ); 900 #endif 924 901 #endif 925 902 // For generalized B -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibDecoder/TDecTop.h
r476 r479 45 45 #include "TLibCommon/TComTrQuant.h" 46 46 #include "TLibCommon/SEI.h" 47 #if H_3D_IV_MERGE48 #include "TLibCommon/TComDepthMapGenerator.h"49 #endif50 47 51 48 #include "TDecGop.h" … … 225 222 Bool m_isDepth; 226 223 CamParsCollector* m_pcCamParsCollector; 227 #if H_3D_IV_MERGE228 TComDepthMapGenerator m_cDepthMapGenerator;229 TAppDecTop* m_tAppDecTop;230 #endif231 224 #endif 232 225 #endif … … 241 234 void setDecodedPictureHashSEIEnabled(Int enabled) { m_cGopDecoder.setDecodedPictureHashSEIEnabled(enabled); } 242 235 243 #if H_3D_IV_MERGE244 Void init(TAppDecTop* pcTAppDecTop);245 #else246 236 Void init(); 247 #endif248 237 #if H_MV 249 238 Bool decode(InputNALUnit& nalu, Int& iSkipFrame, Int& iPOCLastDisplay, Bool newLayer ); … … 276 265 Bool getIsDepth () { return m_isDepth; } 277 266 Void setCamParsCollector( CamParsCollector* pcCamParsCollector ) { m_pcCamParsCollector = pcCamParsCollector; } 278 #if H_3D_IV_MERGE279 TComDepthMapGenerator* getDepthMapGenerator () { return &m_cDepthMapGenerator; }280 #endif281 267 #endif 282 268 #endif -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncCavlc.cpp
r478 r479 581 581 WRITE_FLAG( 0, "sps_extension_flag" ); 582 582 #endif 583 #if H_3D_IV_MERGE584 if( pcSPS->getViewIndex() || pcSPS->isDepth() )585 {586 WRITE_FLAG( 0, "base_view_flag" );587 if( pcSPS->isDepth() )588 {589 WRITE_FLAG( 1, "depth_flag" );590 WRITE_UVLC( pcSPS->getViewIndex(), "view_idx" );591 }592 else593 {594 WRITE_FLAG( 0, "depth_flag" );595 WRITE_UVLC( pcSPS->getViewIndex() - 1, "view_idx_minus1" );596 WRITE_UVLC( pcSPS->getPredDepthMapGeneration(), "Pdm_generation" );597 if( pcSPS->getPredDepthMapGeneration() )598 {599 WRITE_UVLC( pcSPS->getMultiviewMvPredMode(), "multi_view_mv_pred_mode" );600 }601 }602 }603 else604 {605 WRITE_FLAG( 1, "base_view_flag" );606 }607 #endif608 583 } 609 584 … … 766 741 } 767 742 } 743 #if H_3D_GEN 744 WRITE_FLAG( 1, "vps_extension2_flag" ); 745 for( Int layer = 0; layer <= pcVPS->getMaxLayers() - 1; layer++ ) 746 { 747 if (layer != 0) 748 { 749 if ( !( pcVPS->getDepthId( layer ) == 1 ) ) 750 { 751 #if H_3D_IV_MERGE 752 WRITE_FLAG( pcVPS->getIvMvPredFlag(layer) ? 1 : 0 , "ivMvPredFlag[i]"); 753 #endif 754 } 755 } 756 } 757 #else 768 758 WRITE_FLAG( 0, "vps_extension2_flag" ); 759 #endif 769 760 #else 770 761 WRITE_FLAG( 0, "vps_extension_flag" ); … … 1104 1095 { 1105 1096 #if H_3D_IV_MERGE 1106 WRITE_UVLC(((pcSlice->getSPS()->getMultiviewMvPredMode() & PDM_USE_FOR_MERGE) == PDM_USE_FOR_MERGE? MRG_MAX_NUM_CANDS_MEM: MRG_MAX_NUM_CANDS) - pcSlice->getMaxNumMergeCand(), "five_minus_max_num_merge_cand"); 1097 Bool ivMvPredFlag = pcSlice->getVPS()->getIvMvPredFlag( pcSlice->getLayerIdInVps() ) ; 1098 WRITE_UVLC( ( ivMvPredFlag ? MRG_MAX_NUM_CANDS_MEM : MRG_MAX_NUM_CANDS ) - pcSlice->getMaxNumMergeCand(), "five_minus_max_num_merge_cand"); 1107 1099 #else 1108 1100 WRITE_UVLC(MRG_MAX_NUM_CANDS - pcSlice->getMaxNumMergeCand(), "five_minus_max_num_merge_cand"); -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncCfg.h
r476 r479 375 375 TAppComCamPara* m_cameraParameters; 376 376 377 #if H_3D_IV_MERGE378 UInt m_uiPredDepthMapGeneration;379 UInt m_uiMultiviewMvPredMode;380 #endif381 377 #if H_3D_VSO 382 378 //====== View Synthesis Optimization ====== … … 930 926 Void setDispCoeff ( Double d ) { m_dDispCoeff = d; } 931 927 #endif // H_3D_VSO 932 #if H_3D_IV_MERGE933 Void setMultiviewMvPredMode (UInt ui) { m_uiMultiviewMvPredMode = ui;}934 Void setPredDepthMapGeneration ( UInt u ) { m_uiPredDepthMapGeneration = u; }935 936 UInt getMultiviewMvPredMode () { return m_uiMultiviewMvPredMode;}937 #endif938 928 #endif // H_3D 939 929 }; -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncGOP.cpp
r478 r479 49 49 #include <time.h> 50 50 #include <math.h> 51 #if H_3D_IV_MERGE 52 #include "../../App/TAppEncoder/TAppEncTop.h" 53 #endif 51 54 52 using namespace std; 55 53 //! \ingroup TLibEncoder … … 109 107 m_viewIndex = 0; 110 108 m_isDepth = false; 111 #if H_3D_IV_MERGE112 m_pcDepthMapGenerator = NULL;113 #endif114 109 #endif 115 110 #endif … … 160 155 m_viewIndex = pcTEncTop->getViewIndex(); 161 156 m_isDepth = pcTEncTop->getIsDepth(); 162 #if H_3D_IV_MERGE163 m_pcDepthMapGenerator = pcTEncTop->getDepthMapGenerator();164 #endif165 157 #endif 166 158 #endif … … 502 494 pcPic->setCurrSliceIdx(0); 503 495 496 #if H_3D_GEN 497 m_pcSliceEncoder->initEncSlice ( pcPic, iPOCLast, pocCurr, iNumPicRcvd, iGOPid, pcSlice, m_pcEncTop->getVPS(), m_pcEncTop->getSPS(), m_pcEncTop->getPPS() ); 498 #else 504 499 m_pcSliceEncoder->initEncSlice ( pcPic, iPOCLast, pocCurr, iNumPicRcvd, iGOPid, pcSlice, m_pcEncTop->getSPS(), m_pcEncTop->getPPS() ); 500 #endif 505 501 pcSlice->setLastIDR(m_iLastIDR); 506 502 pcSlice->setSliceIdx(0); … … 510 506 pcSlice->setLayerId ( getLayerId() ); 511 507 pcSlice->setViewId ( getViewId() ); 508 #if !H_3D_GEN 512 509 pcSlice->setVPS ( m_pcEncTop->getVPS() ); 510 #endif 513 511 #if H_3D 514 512 pcPic ->setViewIndex ( getViewIndex() ); … … 516 514 pcSlice->setViewIndex ( getViewIndex() ); 517 515 pcSlice->setIsDepth( getIsDepth() ); 518 pcSlice->setCamparaSlice( pcPic->getCodedScale(), pcPic->getCodedOffset() ); 519 #endif 520 #endif 516 pcSlice->setCamparaSlice( pcPic->getCodedScale(), pcPic->getCodedOffset() ); 517 #endif 518 #endif 521 519 //set default slice level flag to the same as SPS level flag 522 520 pcSlice->setLFCrossSliceBoundaryFlag( pcSlice->getPPS()->getLoopFilterAcrossSlicesEnabledFlag() ); … … 682 680 #endif 683 681 684 #if H_3D _IV_MERGE685 TAppEncTop* tAppEncTop = m_pcEncTop->getEncTop();686 TComPic * const pcTexturePic = m_pcEncTop->getIsDepth() ? tAppEncTop->getPicFromView( getViewIndex(), pcSlice->getPOC(), false ) : NULL; 687 assert( !m_pcEncTop->getIsDepth() || pcTexturePic != NULL);688 pcSlice->setTexturePic( pcTexturePic ); 682 #if H_3D 683 pcSlice->setIvPicLists( m_ivPicLists ); 684 #if H_3D_IV_MERGE 685 assert( !m_pcEncTop->getIsDepth() || ( pcSlice->getTexturePic() != 0 ) ); 686 #endif 689 687 #endif 690 688 // Slice info. refinement … … 1042 1040 m_storedStartCUAddrForEncodingSliceSegment.push_back(nextCUAddr); 1043 1041 startCUAddrSliceSegmentIdx++; 1044 #if H_3D_IV_MERGE1045 m_pcDepthMapGenerator->initViewComponent( pcPic );1046 #endif1047 1042 #if H_3D_NBDV 1048 1043 if(pcSlice->getViewIndex() && !pcSlice->getIsDepth()) //Notes from QC: this condition shall be changed once the configuration is completed, e.g. in pcSlice->getSPS()->getMultiviewMvPredMode() || ARP in prev. HTM. Remove this comment once it is done. -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncGOP.h
r478 r479 59 59 #include <vector> 60 60 61 #if H_3D_IV_MERGE62 #include "TLibCommon/TComDepthMapGenerator.h"63 #endif64 61 //! \ingroup TLibEncoder 65 62 //! \{ … … 110 107 Int m_viewIndex; 111 108 Bool m_isDepth; 112 #if H_3D_IV_MERGE113 TComDepthMapGenerator* m_pcDepthMapGenerator;114 #endif115 109 #endif 116 110 #endif … … 172 166 173 167 TComList<TComPic*>* getListPic() { return m_pcListPic; } 174 #if H_3D_IV_MERGE 175 TEncTop* getEncTop() { return m_pcEncTop; } 176 #endif 168 177 169 #if !H_MV 178 170 Void printOutSummary ( UInt uiNumAllPicCoded ); -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncSlice.cpp
r476 r479 176 176 \param pPPS PPS associated with the slice 177 177 */ 178 #if H_3D_GEN 179 Void TEncSlice::initEncSlice( TComPic* pcPic, Int pocLast, Int pocCurr, Int iNumPicRcvd, Int iGOPid, TComSlice*& rpcSlice, TComVPS* pVPS, TComSPS* pSPS, TComPPS *pPPS ) 180 #else 178 181 Void TEncSlice::initEncSlice( TComPic* pcPic, Int pocLast, Int pocCurr, Int iNumPicRcvd, Int iGOPid, TComSlice*& rpcSlice, TComSPS* pSPS, TComPPS *pPPS ) 182 #endif 179 183 { 180 184 Double dQP; … … 182 186 183 187 rpcSlice = pcPic->getSlice(0); 188 #if H_3D_GEN 189 rpcSlice->setVPS( pVPS ); 190 #endif 184 191 rpcSlice->setSPS( pSPS ); 185 192 rpcSlice->setPPS( pPPS ); … … 530 537 rpcSlice->setSliceSegmentArgument ( m_pcCfg->getSliceSegmentArgument() ); 531 538 #if H_3D_IV_MERGE 532 rpcSlice->setMaxNumMergeCand ( m_pcCfg->getMaxNumMergeCand() + ((rpcSlice->getSPS()->getMultiviewMvPredMode() & PDM_USE_FOR_MERGE) ? 1:0));539 rpcSlice->setMaxNumMergeCand ( m_pcCfg->getMaxNumMergeCand() + ( rpcSlice->getVPS()->getIvMvPredFlag( rpcSlice->getLayerIdInVps() ) ? 1 : 0 ) ); 533 540 #else 534 541 rpcSlice->setMaxNumMergeCand ( m_pcCfg->getMaxNumMergeCand() ); -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncSlice.h
r446 r479 116 116 117 117 /// preparation of slice encoding (reference marking, QP and lambda) 118 #if H_3D_GEN 119 Void initEncSlice ( TComPic* pcPic, Int pocLast, Int pocCurr, Int iNumPicRcvd, 120 Int iGOPid, TComSlice*& rpcSlice, TComVPS* pVPS, TComSPS* pSPS, TComPPS *pPPS ); 121 #else 118 122 Void initEncSlice ( TComPic* pcPic, Int pocLast, Int pocCurr, Int iNumPicRcvd, 119 123 Int iGOPid, TComSlice*& rpcSlice, TComSPS* pSPS, TComPPS *pPPS ); 124 #endif 120 125 #if RATE_CONTROL_LAMBDA_DOMAIN 121 126 Void resetQP ( TComPic* pic, Int sliceQP, Double lambda ); -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncTop.cpp
r478 r479 120 120 m_cLoopFilter. create( g_uiMaxCUDepth ); 121 121 122 #if H_3D_IV_MERGE123 m_cDepthMapGenerator. create( false, getSourceWidth(), getSourceHeight(), g_uiMaxCUDepth, g_uiMaxCUWidth, g_uiMaxCUHeight, g_bitDepthY, PDM_SUB_SAMP_EXP_X(m_uiPredDepthMapGeneration), PDM_SUB_SAMP_EXP_Y(m_uiPredDepthMapGeneration) );124 #endif125 122 #if RATE_CONTROL_LAMBDA_DOMAIN 126 123 if ( m_RCEnableRateControl ) … … 228 225 m_cLoopFilter. destroy(); 229 226 m_cRateCtrl. destroy(); 230 #if H_3D_IV_MERGE231 m_cDepthMapGenerator. destroy();232 #endif233 227 // SBAC RD 234 228 if( m_bUseSBACRD ) … … 290 284 } 291 285 292 #if H_3D_IV_MERGE293 Void TEncTop::init( TAppEncTop* pcTAppEncTop)294 #else295 286 Void TEncTop::init() 296 #endif297 287 { 298 288 // initialize SPS … … 316 306 m_cCuEncoder. init( this ); 317 307 318 #if H_3D_IV_MERGE319 m_pcTAppEncTop = pcTAppEncTop;320 m_cDepthMapGenerator.init( (TComPrediction*)this->getPredSearch(), m_pcTAppEncTop->getVPSAccess(), m_pcTAppEncTop->getSPSAccess(), m_pcTAppEncTop->getAUPicAccess() );321 #endif322 308 // initialize transform & quantization class 323 309 m_pcCavlcCoder = getCavlcCoder(); … … 672 658 { 673 659 m_cSPS.initCamParaSPS ( m_viewIndex, m_uiCamParPrecision, m_bCamParInSliceHeader, m_aaiCodedScale, m_aaiCodedOffset ); 674 #if H_3D_IV_MERGE 675 if( m_viewIndex ) 676 { 677 m_cSPS.setPredDepthMapGeneration( m_viewIndex, false, m_uiPredDepthMapGeneration, m_uiMultiviewMvPredMode); 678 } 679 else 680 { 681 m_cSPS.setPredDepthMapGeneration( m_viewIndex, false ); 682 } 683 #endif 684 } 685 #if H_3D_IV_MERGE 686 else 687 { 688 m_cSPS.initCamParaSPSDepth ( m_viewIndex); 689 m_cSPS.setPredDepthMapGeneration( m_viewIndex, true ); 690 } 691 #endif 660 } 692 661 #endif 693 662 } -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncTop.h
r478 r479 57 57 #include "TEncPreanalyzer.h" 58 58 #include "TEncRateCtrl.h" 59 #if H_3D_IV_MERGE60 #include "TLibCommon/TComDepthMapGenerator.h"61 #endif62 59 //! \ingroup TLibEncoder 63 60 //! \{ … … 67 64 // ==================================================================================================================== 68 65 69 #if H_3D_IV_MERGE70 class TAppEncTop;71 #endif72 66 /// encoder class 73 67 class TEncTop : public TEncCfg … … 102 96 TEncSlice m_cSliceEncoder; ///< slice encoder 103 97 TEncCu m_cCuEncoder; ///< CU encoder 104 #if H_3D_IV_MERGE105 TComDepthMapGenerator m_cDepthMapGenerator; ///< depth map generator106 #endif107 98 // SPS 108 99 TComSPS m_cSPS; ///< SPS … … 128 119 TEncBinCABAC* m_pcRDGoOnBinCodersCABAC; ///< going on bin coder CABAC for RD stage per substream 129 120 130 #if H_3D_IV_MERGE131 TAppEncTop* m_pcTAppEncTop;132 #endif133 121 // quality control 134 122 TEncPreanalyzer m_cPreanalyzer; ///< image characteristics analyzer for TM5-step3-like adaptive QP … … 157 145 Void create (); 158 146 Void destroy (); 159 #if H_3D_IV_MERGE160 Void init ( TAppEncTop* pcTAppEncTop );161 #else162 147 Void init (); 163 #endif164 148 #if H_MV 165 149 TComPicLists* getIvPicLists() { return m_ivPicLists; } … … 201 185 TEncSbac* getRDGoOnSbacCoders () { return m_pcRDGoOnSbacCoders; } 202 186 TEncRateCtrl* getRateCtrl () { return &m_cRateCtrl; } 203 #if H_3D_IV_MERGE204 TAppEncTop* getEncTop () { return m_pcTAppEncTop; }205 #endif206 187 TComSPS* getSPS () { return &m_cSPS; } 207 188 TComPPS* getPPS () { return &m_cPPS; } … … 224 205 Void setIvPicLists ( TComPicLists* picLists) { m_ivPicLists = picLists; } 225 206 #endif 226 #if H_3D_IV_MERGE227 TComDepthMapGenerator* getDepthMapGenerator () { return &m_cDepthMapGenerator; }228 #endif229 207 // ------------------------------------------------------------------------------------------------------------------- 230 208 // encoder function
Note: See TracChangeset for help on using the changeset viewer.