Changeset 615 in 3DVCSoftware for branches/HTM-8.0-dev0/source/Lib/TLibCommon
- Timestamp:
- 6 Sep 2013, 00:42:44 (11 years ago)
- Location:
- branches/HTM-8.0-dev0/source/Lib/TLibCommon
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComDataCU.cpp
r612 r615 146 146 #if H_3D_VSP 147 147 m_piVSPFlag = NULL; 148 #if MTK_VSP_FIX_E0172149 m_piVSPDir = NULL;150 #endif151 148 #endif 152 149 #if H_3D_ARP … … 200 197 #if H_3D_VSP 201 198 m_piVSPFlag = (Char* )xMalloc(Char, uiNumPartition); 202 #if MTK_VSP_FIX_E0172203 m_piVSPDir = (Char* )xMalloc(Char, uiNumPartition);204 #endif205 199 #endif 206 200 m_puhLumaIntraDir = (UChar* )xMalloc(UChar, uiNumPartition); … … 363 357 #if H_3D_VSP 364 358 if ( m_piVSPFlag ) { xFree(m_piVSPFlag); m_piVSPFlag = NULL; } 365 #if MTK_VSP_FIX_E0172366 if ( m_piVSPDir ) { xFree(m_piVSPDir ); m_piVSPDir = NULL; }367 #endif368 359 #endif 369 360 if ( m_puhLumaIntraDir ) { xFree(m_puhLumaIntraDir); m_puhLumaIntraDir = NULL; } … … 573 564 #if H_3D_VSP 574 565 m_piVSPFlag[ui] = pcFrom->m_piVSPFlag[ui]; 575 #if MTK_VSP_FIX_E0172576 m_piVSPDir [ui] = pcFrom->m_piVSPDir[ui];577 #endif578 566 #endif 579 567 m_puhLumaIntraDir[ui]=pcFrom->m_puhLumaIntraDir[ui]; … … 618 606 #if H_3D_VSP 619 607 memset( m_piVSPFlag + firstElement, 0, numElements * sizeof( *m_piVSPFlag ) ); 620 #if MTK_VSP_FIX_E0172621 memset( m_piVSPDir + firstElement, 0, numElements * sizeof( *m_piVSPDir ) );622 #endif623 608 #endif 624 609 memset( m_puhLumaIntraDir + firstElement, DC_IDX, numElements * sizeof( *m_puhLumaIntraDir ) ); … … 802 787 #if H_3D_VSP 803 788 m_piVSPFlag[ui] = 0; 804 #if MTK_VSP_FIX_E0172805 m_piVSPDir [ui] = 0;806 #endif807 789 #endif 808 790 m_puhLumaIntraDir[ui] = DC_IDX; … … 906 888 #if H_3D_VSP 907 889 memset( m_piVSPFlag, 0, sizeof( Char ) * m_uiNumPartition ); 908 #if MTK_VSP_FIX_E0172909 memset( m_piVSPDir , 0, sizeInChar );910 #endif911 890 #endif 912 891 memset( m_puhLumaIntraDir, DC_IDX, iSizeInUchar ); … … 1005 984 #if H_3D_VSP 1006 985 m_piVSPFlag[ui]=pcCU->m_piVSPFlag[uiPartOffset+ui]; 1007 #if MTK_VSP_FIX_ALIGN_WD_E01721008 986 m_pDvInfo[ ui ] = pcCU->m_pDvInfo[uiPartOffset+ui]; 1009 #endif1010 #if MTK_VSP_FIX_E01721011 m_piVSPDir[ui]=pcCU->m_piVSPDir[uiPartOffset+ui];1012 #endif1013 987 #endif 1014 988 m_puhLumaIntraDir[ui]=pcCU->m_puhLumaIntraDir[uiPartOffset+ui]; … … 1162 1136 #if H_3D_VSP 1163 1137 m_piVSPFlag = pcCU->getVSPFlag() + uiPart; 1164 #if MTK_VSP_FIX_E01721165 m_piVSPDir = pcCU->getVSPDir () + uiPart;1166 #endif1167 1138 #endif 1168 1139 … … 1321 1292 #if H_3D_VSP 1322 1293 m_piVSPFlag = pcCU->getVSPFlag() + uiAbsPartIdx; 1323 #if MTK_VSP_FIX_ALIGN_WD_E01721324 1294 m_pDvInfo = pcCU->getDvInfo() + uiAbsPartIdx; 1325 #endif1326 #if MTK_VSP_FIX_E01721327 m_piVSPDir = pcCU->getVSPDir () + uiAbsPartIdx;1328 #endif1329 1295 #endif 1330 1296 … … 1374 1340 #if H_3D_VSP 1375 1341 memcpy( m_piVSPFlag + uiOffset, pcCU->getVSPFlag(), sizeof( Char ) * uiNumPartition ); 1376 #if MTK_VSP_FIX_ALIGN_WD_E01721377 1342 memcpy( m_pDvInfo + uiOffset, pcCU->getDvInfo(), sizeof( *m_pDvInfo ) * uiNumPartition ); 1378 #endif 1379 #if MTK_VSP_FIX_E0172 1380 memcpy( m_piVSPDir + uiOffset, pcCU->getVSPDir (), sizeInChar ); 1381 #endif 1343 1382 1344 #endif 1383 1345 memcpy( m_puhLumaIntraDir + uiOffset, pcCU->getLumaIntraDir(), iSizeInUchar ); … … 1509 1471 #if H_3D_VSP 1510 1472 memcpy( rpcCU->getVSPFlag() + m_uiAbsIdxInLCU, m_piVSPFlag, sizeof( Char ) * m_uiNumPartition ); 1511 #if MTK_VSP_FIX_ALIGN_WD_E01721512 1473 memcpy( rpcCU->getDvInfo() + m_uiAbsIdxInLCU, m_pDvInfo, sizeof( *m_pDvInfo ) * m_uiNumPartition ); 1513 #endif1514 #if MTK_VSP_FIX_E01721515 memcpy( rpcCU->getVSPDir () + m_uiAbsIdxInLCU, m_piVSPDir , sizeInChar );1516 #endif1517 1474 #endif 1518 1475 memcpy( rpcCU->getLumaIntraDir() + m_uiAbsIdxInLCU, m_puhLumaIntraDir, iSizeInUchar ); … … 1632 1589 #if H_3D_VSP 1633 1590 memcpy( rpcCU->getVSPFlag() + uiPartOffset, m_piVSPFlag, sizeof(Char) * uiQNumPart ); 1634 #if MTK_VSP_FIX_E01721635 memcpy( rpcCU->getVSPDir () + uiPartOffset, m_piVSPDir , sizeInChar );1636 #endif1637 1591 #endif 1638 1592 memcpy( rpcCU->getLumaIntraDir() + uiPartOffset, m_puhLumaIntraDir, iSizeInUchar ); … … 2761 2715 setSubPart<Char>( iVSPFlag, m_piVSPFlag, uiAbsPartIdx, uiDepth, uiPartIdx ); 2762 2716 } 2763 #if MTK_VSP_FIX_ALIGN_WD_E01722717 #if H_3D_VSP 2764 2718 template<typename T> 2765 2719 Void TComDataCU::setSubPartT( T uiParameter, T* puhBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx ) … … 2895 2849 } 2896 2850 2897 }2898 #endif2899 #if MTK_VSP_FIX_E01722900 Void TComDataCU::setVSPDirSubParts ( Char iVSPDir, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth )2901 {2902 setSubPart<Char>( iVSPDir, m_piVSPDir, uiAbsPartIdx, uiDepth, uiPartIdx );2903 2851 } 2904 2852 #endif … … 3355 3303 * false: otherwise 3356 3304 */ 3357 #if MTK_VSP_FIX_E0172 3358 inline Bool TComDataCU::xAddVspCand( UChar ucVspMergePos, Int mrgCandIdx, DisInfo* pDInfo, Int& iCount, 3359 Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* vspFlag, Int* vspDir ) 3360 #else 3361 inline Bool TComDataCU::xAddVspCand( UChar ucVspMergePos, Int mrgCandIdx, DisInfo* pDInfo, Int& iCount, 3305 inline Bool TComDataCU::xAddVspCand( Int mrgCandIdx, DisInfo* pDInfo, Int& iCount, 3362 3306 Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* vspFlag ) 3363 #endif 3364 { 3365 if ( ucVspMergePos != H_3D_VSP_POSITION || 0 == m_pcSlice->getViewIndex() || !m_pcSlice->getVPS()->getViewSynthesisPredFlag( m_pcSlice->getLayerIdInVps() ) || m_pcSlice->getIsDepth() )3307 { 3308 if ( m_pcSlice->getViewIndex() == 0 || !m_pcSlice->getVPS()->getViewSynthesisPredFlag( m_pcSlice->getLayerIdInVps() ) || m_pcSlice->getIsDepth() ) 3309 { 3366 3310 return false; 3311 } 3367 3312 3368 3313 Int refViewIdx = pDInfo->m_aVIdxCan; 3369 3314 TComPic* picDepth = getSlice()->getIvPic( true, refViewIdx ); 3315 3370 3316 if( picDepth == NULL ) // No depth reference avail 3317 { 3318 // Is this allowed to happen? When not an assertion should be added here! 3371 3319 return false; 3372 3373 Bool refViewAvailFlag = false; 3374 UChar predFlag[2] = {0, 0}; 3375 Int iRefListIdX = 0; 3376 Int iRefListIdY = 0; 3377 Int i; 3378 #if MTK_VSP_FIX_ALIGN_WD_E0172 3379 Int currViewId = m_pcSlice->getViewId(); 3380 Int derivedViewId = -1; 3381 Int otherViewId = -1; 3382 #endif 3383 #if MTK_VSP_FIX_E0172 3384 Int currViewId = m_pcSlice->getViewId(); 3385 Int derivedViewId = -1; 3386 Int otherViewId = -1; 3387 #endif 3388 for( iRefListIdX = 0; iRefListIdX < 2 && !refViewAvailFlag; iRefListIdX++ ) 3389 { 3390 RefPicList eRefPicList = RefPicList( iRefListIdX ); 3391 for ( i = 0; i < m_pcSlice->getNumRefIdx(eRefPicList) && !refViewAvailFlag; i++ ) 3392 { 3393 Int viewIdxRefInList = m_pcSlice->getRefPic(eRefPicList, i)->getViewIndex(); 3394 if ( viewIdxRefInList == refViewIdx ) 3395 { 3396 refViewAvailFlag = true; 3320 } 3321 3322 Bool refViewAvailFlag = false; 3323 UChar predFlag[2] = {0, 0}; 3324 Int refListIdY = 0; 3325 Int viewIdInRefListX = -1; 3326 3327 for( Int iRefListIdX = 0; iRefListIdX < 2 && !refViewAvailFlag; iRefListIdX++ ) 3328 { 3329 RefPicList eRefPicListX = RefPicList( iRefListIdX ); 3330 for ( Int i = 0; i < m_pcSlice->getNumRefIdx(eRefPicListX) && !refViewAvailFlag; i++ ) 3331 { 3332 Int viewIdxRefInListX = m_pcSlice->getRefPic(eRefPicListX, i)->getViewIndex(); 3333 if ( viewIdxRefInListX == refViewIdx ) 3334 { 3335 refViewAvailFlag = true; 3397 3336 predFlag[iRefListIdX] = 1; 3398 #if MTK_VSP_FIX_ALIGN_WD_E0172 3399 derivedViewId = m_pcSlice->getRefPic(eRefPicList, i)->getViewId(); 3400 #endif 3401 #if MTK_VSP_FIX_E0172 3402 vspDir[iCount] = iRefListIdX; 3403 derivedViewId = m_pcSlice->getRefPic(eRefPicList, i)->getViewId(); 3404 #endif 3405 iRefListIdY = 1 - iRefListIdX; 3406 #if H_3D_FIX_BVSP 3337 viewIdInRefListX = m_pcSlice->getRefPic(eRefPicListX, i)->getViewId(); 3338 refListIdY = 1 - iRefListIdX; 3407 3339 pcMvFieldNeighbours[(iCount<<1)+iRefListIdX].setMvField( pDInfo->m_acNBDV, i ); 3408 #else3409 pcMvFieldNeighbours[(iCount<<1)+iRefListIdX].setMvField( pDInfo->m_acDoNBDV, i );3410 #endif3411 3340 #if H_3D_NBDV 3412 3341 pcMvFieldNeighbours[(iCount<<1)+iRefListIdX].getMv().setIDVFlag (false); … … 3418 3347 if (m_pcSlice->isInterB() && refViewAvailFlag) 3419 3348 { 3420 RefPicList eRefPicList = RefPicList( iRefListIdY );3349 RefPicList eRefPicListY = RefPicList( refListIdY ); 3421 3350 refViewAvailFlag = false; 3422 for ( i = 0; i < m_pcSlice->getNumRefIdx(eRefPicList) && !refViewAvailFlag; i++ )3423 { 3424 Int viewIdxRefInList = m_pcSlice->getRefPic(eRefPicList, i)->getViewIndex();3425 if ( viewIdxRefInList != refViewIdx && viewIdxRefInList!= m_pcSlice->getViewIndex() )3351 for ( Int i = 0; i < m_pcSlice->getNumRefIdx(eRefPicListY) && !refViewAvailFlag; i++ ) 3352 { 3353 Int viewIdxRefInListY = m_pcSlice->getRefPic(eRefPicListY, i)->getViewIndex(); 3354 if ( viewIdxRefInListY != refViewIdx && viewIdxRefInListY != m_pcSlice->getViewIndex() ) 3426 3355 { 3427 3356 refViewAvailFlag = true; 3428 predFlag[iRefListIdY] = 1; 3429 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3430 #if H_3D_FIX_BVSP 3357 predFlag[refListIdY] = 1; 3431 3358 TComMv cMv = pDInfo->m_acNBDV; 3432 #else 3433 TComMv cMv = pDInfo->m_acDoNBDV; 3434 #endif 3435 otherViewId = m_pcSlice->getRefPic( eRefPicList, i)->getViewId(); 3436 Int iScale = xGetDistScaleFactor( currViewId, otherViewId, currViewId, derivedViewId ); 3359 3360 Int viewIdInRefListY = m_pcSlice->getRefPic( eRefPicListY, i)->getViewId(); 3361 Int currViewId = m_pcSlice->getViewId(); 3362 3363 //// Following might be added here when MV-HEVC 5 HLS is included (and derivations above removed): 3364 // Int viewIdInRefListX = m_pcSlice->getVPS()->getViewIdVal( refViewIdx ); 3365 3366 Int iScale = xGetDistScaleFactor( currViewId, viewIdInRefListY, currViewId, viewIdInRefListX ); 3367 3368 // Can iScale == 4096 happen?, I guess not since viewIdInRefListY is always unequal to viewIdInRefListX. 3437 3369 if ( iScale != 4096 && m_pcSlice->getVPS()->getIvMvScalingFlag() ) 3438 3370 { … … 3445 3377 } 3446 3378 clipMv( cMv ); 3447 pcMvFieldNeighbours[(iCount<<1)+iRefListIdY].setMvField( cMv, i ); 3448 #else 3449 #if H_3D_FIX_BVSP 3450 pcMvFieldNeighbours[(iCount<<1)+iRefListIdY].setMvField( pDInfo->m_acNBDV, i ); 3451 #else 3452 pcMvFieldNeighbours[(iCount<<1)+iRefListIdY].setMvField( pDInfo->m_acDoNBDV, i ); 3453 #endif 3454 #endif 3379 pcMvFieldNeighbours[(iCount<<1)+refListIdY].setMvField( cMv, i ); 3455 3380 #if H_3D_NBDV 3456 pcMvFieldNeighbours[(iCount<<1)+ iRefListIdY].getMv().setIDVFlag (false);3381 pcMvFieldNeighbours[(iCount<<1)+refListIdY].getMv().setIDVFlag (false); 3457 3382 #endif 3458 3383 } … … 3461 3386 3462 3387 // Set values to be returned 3463 abCandIsInter [iCount] = true;3388 abCandIsInter [iCount] = true; 3464 3389 puhInterDirNeighbours[iCount] = (predFlag[0] | (predFlag[1] << 1)); 3465 vspFlag [iCount] = 1;3390 vspFlag [iCount] = 1; 3466 3391 3467 3392 if ( mrgCandIdx == iCount ) 3393 { 3468 3394 return true; 3395 } 3469 3396 3470 3397 iCount++; … … 3475 3402 #endif 3476 3403 3477 #if QC_INRIA_MTK_MRG_E0126 3478 inline Bool TComDataCU::xAddIvMRGCand( Int mrgCandIdx, Int& iCount, Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* iPdmDir, TComMv* acPdmMv, 3479 Int* aiPdmRefIdx, Int iPosDmv, Int* vspFlag ) 3480 { 3481 for(Int iLoop = 0; iLoop < 2; iLoop ++ ) 3482 { 3404 #if H_3D_IV_MERGE 3405 inline Bool TComDataCU::xAddIvMRGCand( Int mrgCandIdx, Int& iCount, Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* ivCandDir, TComMv* ivCandMv, 3406 Int* ivCandRefIdx, Int iPosIvDC, Int* vspFlag ) 3407 { 3408 for(Int iLoop = 0; iLoop < 2; iLoop ++ ) 3409 { 3410 // IvDcShift (Derived from spatial Iv neighboring blocks) 3483 3411 if( iLoop == 1 ) 3484 3412 { 3485 3413 Int iFirDispCand = -1; 3486 if (x FirstDmvAvai(iCount, pcMvFieldNeighbours, iPdmDir, iPosDmv, vspFlag, iFirDispCand))3414 if (xGetPosFirstAvailDmvCand(iCount, pcMvFieldNeighbours, ivCandDir, iPosIvDC, vspFlag, iFirDispCand)) 3487 3415 { 3488 3416 TComMv cMv; … … 3494 3422 } 3495 3423 clipMv( cMv ); 3496 abCandIsInter [ iCount ] = true;3424 abCandIsInter [ iCount ] = true; 3497 3425 puhInterDirNeighbours[ iCount ] = puhInterDirNeighbours[iFirDispCand]; 3498 pcMvFieldNeighbours[ iCount<<1 ].setMvField(cMv, pcMvFieldNeighbours[( iFirDispCand << 1)].getRefIdx() ); 3499 pcMvFieldNeighbours[ (iCount<<1)+1 ].setMvField(pcMvFieldNeighbours[(iFirDispCand << 1) + 1].getMv(), pcMvFieldNeighbours[( iFirDispCand << 1) + 1].getRefIdx() ); 3426 pcMvFieldNeighbours [ iCount << 1 ].setMvField(cMv, pcMvFieldNeighbours[( iFirDispCand << 1)].getRefIdx() ); 3427 pcMvFieldNeighbours [(iCount << 1) + 1 ].setMvField(pcMvFieldNeighbours[(iFirDispCand << 1) + 1].getMv(), pcMvFieldNeighbours[( iFirDispCand << 1) + 1].getRefIdx() ); 3428 3500 3429 if( mrgCandIdx == iCount ) 3501 3430 { 3502 3431 return true; 3503 3432 } 3433 3504 3434 iCount++; 3505 3435 break; 3506 3436 } 3507 3437 } 3508 if(iPdmDir[iLoop + 2]) 3509 { 3510 abCandIsInter[ iCount ] = true; 3511 puhInterDirNeighbours[ iCount ] = iPdmDir[iLoop + 2]; 3512 if( ( iPdmDir[iLoop + 2] & 1 ) == 1 ) 3513 { 3514 pcMvFieldNeighbours[ iCount<<1 ].setMvField( acPdmMv[ (iLoop<<1) + 4 ], aiPdmRefIdx[ (iLoop<<1) + 4 ] ); 3515 } 3516 if( ( iPdmDir[iLoop + 2] & 2 ) == 2 ) 3517 { 3518 pcMvFieldNeighbours[ (iCount<<1)+1 ].setMvField( acPdmMv[ (iLoop<<1) + 5 ], aiPdmRefIdx[ (iLoop<<1) + 5 ] ); 3438 3439 /// iLoop = 0 --> IvMCShift 3440 /// iLoop = 1 --> IvDCShift (Derived from IvDC) 3441 if(ivCandDir[iLoop + 2]) 3442 { 3443 abCandIsInter [ iCount ] = true; 3444 puhInterDirNeighbours[ iCount ] = ivCandDir[iLoop + 2]; 3445 if( ( ivCandDir[iLoop + 2] & 1 ) == 1 ) 3446 { 3447 pcMvFieldNeighbours[ iCount<<1 ].setMvField( ivCandMv[ (iLoop<<1) + 4 ], ivCandRefIdx[ (iLoop<<1) + 4 ] ); 3448 } 3449 if( ( ivCandDir[iLoop + 2] & 2 ) == 2 ) 3450 { 3451 pcMvFieldNeighbours[ (iCount<<1)+1 ].setMvField( ivCandMv[ (iLoop<<1) + 5 ], ivCandRefIdx[ (iLoop<<1) + 5 ] ); 3519 3452 } 3520 3453 3521 bool bRemove = false; 3522 if(!iLoop && iPdmDir[0] > 0) 3523 { 3524 if(puhInterDirNeighbours[iCount] == puhInterDirNeighbours[0] && pcMvFieldNeighbours[0]==pcMvFieldNeighbours[(iCount<<1)] && pcMvFieldNeighbours[1]==pcMvFieldNeighbours[(iCount<<1)+1]) 3454 // Prune IvMC vs. IvMcShift 3455 Bool bRemove = false; 3456 if( !iLoop && ivCandDir[0] > 0) 3457 { 3458 if(puhInterDirNeighbours[iCount] == puhInterDirNeighbours[0] && pcMvFieldNeighbours[0 ]== pcMvFieldNeighbours[(iCount<<1)] && pcMvFieldNeighbours[1]==pcMvFieldNeighbours[(iCount<<1)+1]) 3525 3459 { 3526 bRemove = true;3460 bRemove = true; 3527 3461 abCandIsInter [ iCount ] = false; 3528 puhInterDirNeighbours[ iCount]= 0;3462 puhInterDirNeighbours[ iCount ] = 0; 3529 3463 TComMv cZeroMv; 3530 pcMvFieldNeighbours [iCount<<1].setMvField( cZeroMv, NOT_VALID );3531 pcMvFieldNeighbours [(iCount<<1)+1].setMvField( cZeroMv, NOT_VALID );3464 pcMvFieldNeighbours [ iCount<<1 ].setMvField( cZeroMv, NOT_VALID ); 3465 pcMvFieldNeighbours [(iCount<<1)+1].setMvField( cZeroMv, NOT_VALID ); 3532 3466 } 3533 3467 } … … 3535 3469 { 3536 3470 #if H_3D_NBDV 3537 if(iLoop) 3471 if(iLoop) // For IvMcShift candidate 3538 3472 { 3539 3473 pcMvFieldNeighbours[iCount<<1 ].getMv().setIDVFlag (false); … … 3553 3487 } 3554 3488 3555 inline Bool TComDataCU::xFirstDmvAvai( Int& iCount, TComMvField* pcMvFieldNeighbours, Int* iPdmDir, Int iPosDmv, Int* vspFlag, Int& iFirDispCand ) 3556 { 3557 for ( Int i = (iPdmDir[0] ? 1: 0); i < iCount; i++ ) 3558 { 3559 if ( ( i == iPosDmv ) || ( vspFlag[ i ] == 1 ) ) 3489 inline Bool TComDataCU::xGetPosFirstAvailDmvCand( Int iCount, TComMvField* pcMvFieldNeighbours, Int* ivCandDir, Int posIvDC, Int* vspFlag, Int& posFirstAvailDmvCand ) 3490 { 3491 // ivCandDir[0] == true --> IvMC is available and excluded in loop over merge list. 3492 for ( Int currListPos = (ivCandDir[0] ? 1 : 0); currListPos < iCount; currListPos++ ) 3493 { 3494 if ( ( currListPos == posIvDC ) || ( vspFlag[ currListPos ] == 1 ) ) 3560 3495 { 3561 3496 continue; 3562 3497 } 3563 else if((pcMvFieldNeighbours[ i<<1].getRefIdx()!=-1) && (getSlice()->getViewIndex() != getSlice()->getRefPic(RefPicList(0), pcMvFieldNeighbours[i<<1].getRefIdx())->getViewIndex()))3564 { 3565 iFirDispCand = i;3498 else if((pcMvFieldNeighbours[currListPos<<1].getRefIdx() != -1 ) && (getSlice()->getViewIndex() != getSlice()->getRefPic(RefPicList(0), pcMvFieldNeighbours[currListPos<<1].getRefIdx())->getViewIndex())) 3499 { 3500 posFirstAvailDmvCand = currListPos; 3566 3501 return true; 3567 3502 } … … 3582 3517 #if H_3D_VSP 3583 3518 , Int* vspFlag 3584 #if MTK_VSP_FIX_ALIGN_WD_E01723585 3519 , InheritedVSPDisInfo* inheritedVSPDisInfo 3586 #endif3587 #if MTK_VSP_FIX_E01723588 , Int* vspDir3589 #endif3590 3520 #endif 3591 3521 , Int& numValidMergeCand, Int mrgCandIdx … … 3594 3524 UInt uiAbsPartAddr = m_uiAbsIdxInLCU + uiAbsPartIdx; 3595 3525 #if H_3D_IV_MERGE 3526 //////////////////////////// 3527 //////// INIT LISTS //////// 3528 //////////////////////////// 3596 3529 TComMv cZeroMv; 3597 3530 Bool abCandIsInter[ MRG_MAX_NUM_CANDS_MEM ]; … … 3611 3544 } 3612 3545 numValidMergeCand = getSlice()->getMaxNumMergeCand(); 3546 #if H_3D 3547 ////////////////////////////////// 3548 //////// DERIVE LOCATIONS //////// 3549 ////////////////////////////////// 3550 #endif 3613 3551 // compute the location of the current PU 3614 3552 Int xP, yP, nPSW, nPSH; … … 3622 3560 deriveLeftBottomIdxGeneral ( uiAbsPartIdx, uiPUIdx, uiPartIdxLB ); 3623 3561 #if H_3D_IV_MERGE 3624 Bool ivMvPredFlag = getSlice()->getVPS()->getIvMvPredFlag( getSlice()->getLayerIdInVps() ); 3625 3626 //===== add merge with predicted depth maps ===== 3627 #if QC_INRIA_MTK_MRG_E0126 3628 TComMv acPdmMv [8]; 3629 Int aiPdmRefIdx [8] = {-1, -1, -1, -1, -1, -1, -1, -1}; 3630 Int iPosDmv = -1; 3631 #else 3632 TComMv acPdmMv [4]; 3633 Int aiPdmRefIdx [4] = {-1, -1, -1, -1}; 3634 #endif 3635 Bool bLeftAvai = false; 3636 Int iPosLeftAbove[2] = {-1, -1}; 3637 3638 3639 DisInfo cDisInfo; 3640 3641 cDisInfo.bDV = getDvInfo(uiAbsPartIdx).bDV; 3642 #if H_3D_NBDV_REF 3643 cDisInfo.m_acDoNBDV = getDvInfo(uiAbsPartIdx).m_acDoNBDV; 3644 #endif //H_3D_NBDV_REF 3645 cDisInfo.m_acNBDV = getDvInfo(uiAbsPartIdx).m_acNBDV; 3646 cDisInfo.m_aVIdxCan = getDvInfo(uiAbsPartIdx).m_aVIdxCan; 3647 #if MTK_VSP_FIX_ALIGN_WD_E0172 3648 for(Int i = 0; i < MRG_MAX_NUM_CANDS_MEM; i++) 3649 { 3650 inheritedVSPDisInfo[i].m_acDvInfo = cDisInfo; 3651 } 3652 #endif 3562 3563 ///////////////////////////////////////////// 3564 //////// TEXTURE MERGE CANDIDATE (T) //////// 3565 ///////////////////////////////////////////// 3566 3653 3567 if( m_pcSlice->getIsDepth()) 3654 3568 { … … 3659 3573 if ( pcTextureCU && !pcTextureCU->isIntra( uiPartIdxCenter ) ) 3660 3574 { 3661 #if MTK_TEXTURE_MRGCAND_BUGFIX_E01823662 3575 pcTextureCU->getMvField( pcTextureCU, uiPartIdxCenter, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] ); 3663 3576 Int iValidDepRef = getPic()->isTextRefValid( REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1].getRefIdx() ); … … 3699 3612 iCount ++; 3700 3613 } 3701 #else 3702 abCandIsInter[iCount] = true; 3703 puhInterDirNeighbours[iCount] = pcTextureCU->getInterDir( uiPartIdxCenter ); 3704 #if MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170 3705 pcTextureCU->getMvField( pcTextureCU, uiPartIdxCenter, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] ); 3706 if (pcMvFieldNeighbours[iCount<<1].getRefIdx()>=0) 3707 #else 3708 if( ( puhInterDirNeighbours[iCount] & 1 ) == 1 ) 3709 #endif 3710 { 3711 #if !MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170 3712 pcTextureCU->getMvField( pcTextureCU, uiPartIdxCenter, REF_PIC_LIST_0, pcMvFieldNeighbours[iCount<<1] ); 3713 #endif 3714 TComMv cMvPred = pcMvFieldNeighbours[iCount<<1].getMv(); 3715 3716 #if H_3D_IC 3717 const TComMv cAdd( 1 << ( 2 - 1 ), 1 << ( 2 - 1 ) ); 3718 cMvPred+=cAdd; 3719 cMvPred>>=2; 3720 clipMv(cMvPred); 3721 #endif 3722 //pcMvFieldNeighbours[iCount<<1].setMvField(cMvPred,pcMvFieldNeighbours[iCount<<1].getRefIdx()); 3723 #if H_3D //Notes from QC: for BVSP coded blocks, the reference index shall not be equal to -1 due to the adoption of JCT3V-D0191 3724 pcMvFieldNeighbours[iCount<<1].setMvField(cMvPred,pcMvFieldNeighbours[iCount<<1].getRefIdx()); 3725 #endif 3726 } 3727 3728 if ( getSlice()->isInterB() ) 3729 { 3730 #if MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170 3731 pcTextureCU->getMvField( pcTextureCU, uiPartIdxCenter, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3732 if (pcMvFieldNeighbours[(iCount<<1)+1].getRefIdx()>=0) 3733 #else 3734 if( ( puhInterDirNeighbours[iCount] & 2 ) == 2 ) 3735 #endif 3736 { 3737 #if !MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170 3738 pcTextureCU->getMvField( pcTextureCU, uiPartIdxCenter, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3739 #endif 3740 TComMv cMvPred = pcMvFieldNeighbours[(iCount<<1)+1].getMv(); 3741 #if H_3D_IC 3742 const TComMv cAdd( 1 << ( 2 - 1 ), 1 << ( 2 - 1 ) ); 3743 cMvPred+=cAdd; 3744 cMvPred>>=2; 3745 clipMv(cMvPred); 3746 #endif 3747 pcMvFieldNeighbours[(iCount<<1)+1].setMvField(cMvPred,pcMvFieldNeighbours[(iCount<<1)+1].getRefIdx()); 3748 } 3749 } 3750 #if MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170 3751 puhInterDirNeighbours[iCount] = (pcMvFieldNeighbours[iCount<<1].getRefIdx()>=0)?1:0; 3752 puhInterDirNeighbours[iCount] += (pcMvFieldNeighbours[(iCount<<1)+1].getRefIdx()>=0)?2:0; 3753 #endif 3754 #if H_3D_NBDV 3755 pcMvFieldNeighbours[iCount<<1 ].getMv().setIDVFlag (false); 3756 pcMvFieldNeighbours[(iCount<<1)+1].getMv().setIDVFlag (false); 3757 #endif 3758 if ( mrgCandIdx == iCount ) 3759 { 3760 return; 3761 } 3762 iCount ++; 3763 #endif//Bug fix 3764 } 3765 } 3766 3767 #if QC_INRIA_MTK_MRG_E0126 3768 Int iPdmDir[4] = {0, 0, 0, 0}; 3769 #else 3770 Int iPdmDir[2] = {0, 0}; 3771 #endif 3614 } 3615 } 3616 3617 ////////////////////////////////// 3618 //////// GET DISPARITIES //////// 3619 ////////////////////////////////// 3620 3621 DisInfo cDisInfo = getDvInfo(uiAbsPartIdx); 3622 3623 for(Int i = 0; i < MRG_MAX_NUM_CANDS_MEM; i++) 3624 { 3625 inheritedVSPDisInfo[i].m_acDvInfo = cDisInfo; 3626 } 3627 3628 ///////////////////////////////////////////////////////////////// 3629 //////// DERIVE IvMC, IvMCShift,IvDCShift, IvDC Candidates ///// 3630 ///////////////////////////////////////////////////////////////// 3631 3632 Int posIvDC = -1; 3633 Bool bLeftAvai = false; 3634 Int iPosLeftAbove[2] = {-1, -1}; 3635 3636 3637 // { IvMCL0, IvMCL1, IvDCL0, IvDCL1, IvMCL0Shift, IvMCL1Shift, IvDCL0Shift, IvDCL1Shift }; 3638 // An enumerator would be appropriate here! 3639 TComMv ivCandMv [8]; 3640 Int ivCandRefIdx[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; 3641 3642 // { IvMC, IvDC, IvMCShift, IvDCShift }; 3643 Int ivCandDir [4] = {0, 0, 0, 0}; 3644 3645 Bool ivMvPredFlag = getSlice()->getVPS()->getIvMvPredFlag( getSlice()->getLayerIdInVps() ); 3772 3646 3773 3647 if ( ivMvPredFlag ) 3774 3648 { 3775 getInterViewMergeCands(uiPUIdx, aiPdmRefIdx, acPdmMv, &cDisInfo, iPdmDir );3649 getInterViewMergeCands(uiPUIdx, ivCandRefIdx, ivCandMv, &cDisInfo, ivCandDir ); 3776 3650 } 3777 3778 Int iPdmInterDir; 3779 3780 if( iPdmDir[0] ) 3651 3652 /////////////////////////////////////////////// 3653 //////// INTER VIEW MOTION COMP(IvMC) ///////// 3654 /////////////////////////////////////////////// 3655 3656 if( ivCandDir[0] ) 3781 3657 { 3782 3658 abCandIsInter [ iCount ] = true; 3783 puhInterDirNeighbours[ iCount ] = iPdmDir[0]; 3784 iPdmInterDir = iPdmDir[0]; 3785 3786 if( ( iPdmInterDir & 1 ) == 1 ) 3787 { 3788 pcMvFieldNeighbours[ iCount<<1 ].setMvField( acPdmMv[ 0 ], aiPdmRefIdx[ 0 ] ); 3789 } 3790 if( ( iPdmInterDir & 2 ) == 2 ) 3791 { 3792 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( acPdmMv[ 1 ], aiPdmRefIdx[ 1 ] ); 3659 puhInterDirNeighbours[ iCount ] = ivCandDir[0]; 3660 3661 if( ( ivCandDir[0] & 1 ) == 1 ) 3662 { 3663 pcMvFieldNeighbours[ iCount<<1 ].setMvField( ivCandMv[ 0 ], ivCandRefIdx[ 0 ] ); 3664 } 3665 if( ( ivCandDir[0] & 2 ) == 2 ) 3666 { 3667 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( ivCandMv[ 1 ], ivCandRefIdx[ 1 ] ); 3793 3668 } 3794 3669 … … 3799 3674 iCount ++; 3800 3675 } 3676 3801 3677 // early termination 3802 3678 if (iCount == getSlice()->getMaxNumMergeCand()) … … 3806 3682 #endif 3807 3683 3684 #if H_3D 3685 //////////////////////////// 3686 //////// LEFT (A1) ///////// 3687 //////////////////////////// 3688 #endif 3808 3689 //left 3809 3690 UInt uiLeftPartIdx = 0; … … 3852 3733 #if H_3D_VSP 3853 3734 if (pcCULeft->getVSPFlag(uiLeftPartIdx) == 1) 3854 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3855 { 3856 #endif 3735 { 3857 3736 vspFlag[iCount] = 1; 3858 #if MTK_VSP_FIX_ALIGN_WD_E01723859 3737 xInheritVSPDisInfo(pcCULeft,uiLeftPartIdx,iCount,inheritedVSPDisInfo); 3860 3738 } 3861 3739 #endif 3862 #if MTK_VSP_FIX_E01723863 vspDir[iCount] = pcCULeft->getVSPDir( uiLeftPartIdx );3864 }3865 #endif3866 #endif3867 3740 if ( mrgCandIdx == iCount ) 3868 3741 { … … 3871 3744 iCount ++; 3872 3745 } 3873 #else 3746 #else // H_3D_IV_MERGE 3874 3747 if ( mrgCandIdx == iCount ) 3875 3748 { … … 3877 3750 } 3878 3751 iCount ++; 3879 #endif 3752 #endif // H_3D_IV_MERGE 3880 3753 } 3881 3754 … … 3885 3758 return; 3886 3759 } 3760 #if H_3D 3761 //////////////////////////// 3762 //////// ABOVE (B1) //////// 3763 //////////////////////////// 3764 #endif 3887 3765 // above 3888 3766 UInt uiAbovePartIdx = 0; … … 3917 3795 puhInterDirNeighbours[iCount] = 0; 3918 3796 3919 pcMvFieldNeighbours[iCount<<1] .setMvField( cZeroMv, NOT_VALID );3797 pcMvFieldNeighbours[iCount<<1] .setMvField( cZeroMv, NOT_VALID ); 3920 3798 pcMvFieldNeighbours[(iCount<<1)+1].setMvField( cZeroMv, NOT_VALID ); 3921 3799 break; 3922 3800 } 3923 3801 } 3802 3924 3803 if(!bRemoveSpa) 3925 3804 { … … 3931 3810 #if H_3D_VSP 3932 3811 if (pcCUAbove->getVSPFlag(uiAbovePartIdx) == 1) 3933 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3934 { 3935 #endif 3812 { 3813 3936 3814 vspFlag[iCount] = 1; 3937 #if MTK_VSP_FIX_ALIGN_WD_E01723938 3815 xInheritVSPDisInfo(pcCUAbove,uiAbovePartIdx,iCount,inheritedVSPDisInfo); 3939 3816 } 3940 3817 #endif 3941 #if MTK_VSP_FIX_E01723942 vspDir[iCount] = pcCUAbove->getVSPDir( uiAbovePartIdx );3943 }3944 #endif3945 #endif3946 3818 if ( mrgCandIdx == iCount ) 3947 3819 { … … 3950 3822 iCount ++; 3951 3823 } 3952 #else 3824 #else // H_3D_IV_MERGE 3953 3825 if ( mrgCandIdx == iCount ) 3954 3826 { … … 3956 3828 } 3957 3829 iCount ++; 3958 #endif 3830 #endif // H_3D_IV_MERGE 3959 3831 } 3960 3832 // early termination … … 3963 3835 return; 3964 3836 } 3837 3838 #if H_3D 3839 ////////////////////////////////// 3840 //////// ABOVE RIGHT (B0) //////// 3841 ////////////////////////////////// 3842 #endif 3965 3843 3966 3844 // above right … … 3988 3866 #if H_3D_VSP 3989 3867 if (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) == 1) 3990 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3991 { 3992 #endif 3868 { 3993 3869 vspFlag[iCount] = 1; 3994 #if MTK_VSP_FIX_ALIGN_WD_E01723995 3870 xInheritVSPDisInfo(pcCUAboveRight,uiAboveRightPartIdx,iCount,inheritedVSPDisInfo); 3996 3871 } 3997 #endif3998 #if MTK_VSP_FIX_E01723999 vspDir[iCount] = pcCUAboveRight->getVSPDir( uiAboveRightPartIdx);4000 }4001 #endif4002 3872 #endif 4003 3873 if ( mrgCandIdx == iCount ) … … 4014 3884 4015 3885 #if H_3D_IV_MERGE 4016 if( iPdmDir[1] ) 3886 ///////////////////////////////////////////// 3887 //////// INTER VIEW DISP COMP (IvDC) //////// 3888 ///////////////////////////////////////////// 3889 3890 if( ivCandDir[1] ) 4017 3891 { 4018 3892 assert(iCount < getSlice()->getMaxNumMergeCand()); 4019 3893 abCandIsInter [ iCount ] = true; 4020 puhInterDirNeighbours[ iCount ] = i PdmDir[1];4021 if( ( i PdmDir[1] & 1 ) == 1 )4022 { 4023 pcMvFieldNeighbours[ iCount<<1 ].setMvField( acPdmMv[ 2 ], aiPdmRefIdx[ 2 ] );4024 } 4025 if( ( i PdmDir[1] & 2 ) == 2 )4026 { 4027 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( acPdmMv[ 3 ], aiPdmRefIdx[ 3 ] );3894 puhInterDirNeighbours[ iCount ] = ivCandDir[1]; 3895 if( ( ivCandDir[1] & 1 ) == 1 ) 3896 { 3897 pcMvFieldNeighbours[ iCount<<1 ].setMvField( ivCandMv[ 2 ], ivCandRefIdx[ 2 ] ); 3898 } 3899 if( ( ivCandDir[1] & 2 ) == 2 ) 3900 { 3901 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( ivCandMv[ 3 ], ivCandRefIdx[ 3 ] ); 4028 3902 } 4029 3903 … … 4032 3906 { 4033 3907 Int iCnloop = iPosLeftAbove[i]; 4034 if(iCnloop == -1) 3908 if ( iCnloop == -1 ) 3909 { 4035 3910 continue; 3911 } 4036 3912 if(puhInterDirNeighbours[iCount] == puhInterDirNeighbours[iCnloop] && pcMvFieldNeighbours[iCnloop<<1]==pcMvFieldNeighbours[(iCount<<1)] && pcMvFieldNeighbours[(iCnloop<<1)+1]==pcMvFieldNeighbours[(iCount<<1)+1]) 4037 3913 { … … 4051 3927 pcMvFieldNeighbours[(iCount<<1)+1].getMv().setIDVFlag (false); 4052 3928 #endif 4053 #if QC_INRIA_MTK_MRG_E0126 4054 iPosDmv = iCount; 4055 #endif 3929 posIvDC = iCount; 4056 3930 if ( mrgCandIdx == iCount ) 4057 3931 return; … … 4065 3939 } 4066 3940 } 4067 #endif 3941 #endif // H_3D_IV_MERGE 4068 3942 4069 3943 #if H_3D_VSP 4070 #if MTK_VSP_FIX_E0172 4071 if ( xAddVspCand( H_3D_VSP_POSITION, mrgCandIdx, &cDisInfo, iCount, abCandIsInter, pcMvFieldNeighbours, puhInterDirNeighbours, vspFlag, vspDir ) ) 4072 #else 4073 if ( xAddVspCand( H_3D_VSP_POSITION, mrgCandIdx, &cDisInfo, iCount, abCandIsInter, pcMvFieldNeighbours, puhInterDirNeighbours, vspFlag ) ) 4074 #endif 3944 ///////////////////////////////////////////////// 3945 //////// VIEW SYNTHESIS PREDICTION (VSP) //////// 3946 ///////////////////////////////////////////////// 3947 3948 if ( xAddVspCand( mrgCandIdx, &cDisInfo, iCount, abCandIsInter, pcMvFieldNeighbours, puhInterDirNeighbours, vspFlag ) ) 3949 { 4075 3950 return; 3951 } 3952 4076 3953 // early termination 4077 3954 if (iCount == getSlice()->getMaxNumMergeCand()) 3955 { 4078 3956 return; 3957 } 3958 #endif 3959 #if H_3D 3960 /////////////////////////////////// 3961 //////// LEFT BOTTOM (A0) //////// 3962 /////////////////////////////////// 4079 3963 #endif 4080 3964 … … 4103 3987 #if H_3D_VSP 4104 3988 if (pcCULeftBottom->getVSPFlag(uiLeftBottomPartIdx) == 1) 4105 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 4106 { 4107 #endif 3989 { 4108 3990 vspFlag[iCount] = 1; 4109 #if MTK_VSP_FIX_ALIGN_WD_E01724110 3991 xInheritVSPDisInfo(pcCULeftBottom,uiLeftBottomPartIdx,iCount,inheritedVSPDisInfo); 4111 3992 } 4112 #endif4113 #if MTK_VSP_FIX_E01724114 vspDir[iCount] = pcCULeftBottom->getVSPDir( uiLeftBottomPartIdx);4115 }4116 #endif4117 3993 #endif 4118 3994 if ( mrgCandIdx == iCount ) … … 4127 4003 return; 4128 4004 } 4005 #if H_3D 4006 /////////////////////////////////// 4007 //////// LEFT ABOVE (B2) //////// 4008 /////////////////////////////////// 4009 #endif 4010 4129 4011 // above left 4130 4012 if( iCount < 4 ) … … 4154 4036 #if H_3D_VSP 4155 4037 if (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) == 1) 4156 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 4157 { 4158 #endif 4038 { 4159 4039 vspFlag[iCount] = 1; 4160 #if MTK_VSP_FIX_ALIGN_WD_E01724161 4040 xInheritVSPDisInfo(pcCUAboveLeft,uiAboveLeftPartIdx,iCount,inheritedVSPDisInfo); 4162 4041 } 4163 #endif4164 #if MTK_VSP_FIX_E01724165 vspDir[iCount] = pcCUAboveLeft->getVSPDir( uiAboveLeftPartIdx);4166 }4167 #endif4168 4042 #endif 4169 4043 if ( mrgCandIdx == iCount ) … … 4179 4053 return; 4180 4054 } 4181 #if QC_INRIA_MTK_MRG_E0126 4055 #if H_3D_IV_MERGE 4056 //////////////////////////////////////////////////// 4057 //////// SHIFTED IV (IvMCShift + IvDCShift) //////// 4058 //////////////////////////////////////////////////// 4059 4182 4060 if( ivMvPredFlag ) 4183 4061 { 4184 if(xAddIvMRGCand( mrgCandIdx, iCount, abCandIsInter, pcMvFieldNeighbours, puhInterDirNeighbours, i PdmDir, acPdmMv, aiPdmRefIdx, iPosDmv, vspFlag))4062 if(xAddIvMRGCand( mrgCandIdx, iCount, abCandIsInter, pcMvFieldNeighbours, puhInterDirNeighbours, ivCandDir, ivCandMv, ivCandRefIdx, posIvDC, vspFlag)) 4185 4063 { 4186 4064 return; … … 4192 4070 } 4193 4071 } 4072 #endif 4073 #if H_3D 4074 ///////////////////////////////// 4075 //////// Collocate (COL) //////// 4076 ///////////////////////////////// 4194 4077 #endif 4195 4078 if ( getSlice()->getEnableTMVPFlag()) … … 4311 4194 Bool bValid = true; 4312 4195 if ( vspFlag[i] == 1 || vspFlag[j] == 1 ) 4196 { 4313 4197 bValid = false; 4198 } 4314 4199 if( !m_pcSlice->getVPS()->getViewSynthesisPredFlag( m_pcSlice->getLayerIdInVps() ) ) 4200 { 4315 4201 assert(bValid == true); 4202 } 4316 4203 #endif 4317 4204 #if H_3D_VSP … … 4374 4261 numValidMergeCand = uiArrayAddr; 4375 4262 } 4376 #if MTK_VSP_FIX_ALIGN_WD_E01724263 #if H_3D_VSP 4377 4264 inline Void TComDataCU::xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount, InheritedVSPDisInfo* inheritedVSPDisInfo) 4378 4265 { … … 6011 5898 } 6012 5899 } 6013 #if MTK_VSP_FIX_ALIGN_WD_E01725900 #if H_3D_VSP 6014 5901 Void TComDataCU::setDvInfoSubParts( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth ) 6015 5902 { … … 6150 6037 TComDataCU::getInterViewMergeCands(UInt uiPartIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDInfo, Int* availableMcDc ) 6151 6038 { 6152 TComSlice* pcSlice = getSlice (); 6153 Int iViewIndex = pDInfo->m_aVIdxCan; 6039 TComSlice* pcSlice = getSlice (); 6040 Int iViewIndex = pDInfo->m_aVIdxCan; 6041 6154 6042 //--- get base CU/PU and check prediction mode --- 6155 6043 TComPic* pcBasePic = pcSlice->getIvPic( false, iViewIndex ); … … 6174 6062 TComMv cDv = depthRefineFlag ? pDInfo->m_acDoNBDV : pDInfo->m_acNBDV; 6175 6063 6176 #if !QC_INRIA_MTK_MRG_E01266177 Int iBasePosX = Clip3( 0, pcBaseRec->getWidth () - 1, iCurrPosX + ( (cDv.getHor() + 2 ) >> 2 ) );6178 Int iBasePosY = Clip3( 0, pcBaseRec->getHeight() - 1, iCurrPosY + ( (cDv.getVer() + 2 ) >> 2 ));6179 6180 Int iBaseCUAddr;6181 Int iBaseAbsPartIdx;6182 pcBaseRec->getCUAddrAndPartIdx( iBasePosX , iBasePosY , iBaseCUAddr, iBaseAbsPartIdx );6183 6184 TComDataCU* pcBaseCU = pcBasePic->getCU( iBaseCUAddr );6185 #endif6186 #if QC_INRIA_MTK_MRG_E01266187 6064 Bool abPdmAvailable[8] = {false, false, false, false, false, false, false, false}; 6188 #else6189 Bool abPdmAvailable[4] = {false, false, false, false};6190 #endif6191 6065 #if H_3D_NBDV 6192 #if QC_INRIA_MTK_MRG_E01266193 6066 for( Int i = 0; i < 8; i++) 6194 #else6195 for( Int i = 0; i < 4; i++)6196 #endif6197 6067 { 6198 6068 pacPdmMv[i].setIDVFlag (false); 6199 6069 } 6200 6070 #endif 6201 #if QC_INRIA_MTK_MRG_E0126 6202 for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++) 6203 { 6071 6072 //////////////////////////////// 6073 /////// IvMC + IvMCShift /////// 6074 //////////////////////////////// 6075 6076 for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++) 6077 { 6078 // iLoopCan == 0 --> IvMC 6079 // iLoopCan == 1 --> IvMCShift 6080 6204 6081 Int iBaseCUAddr; 6205 6082 Int iBaseAbsPartIdx; 6206 6083 6207 Int offsetW = (iLoopCan == 0) ? 0 : ( ((iWidth /2)*4)+ 4 );6084 Int offsetW = (iLoopCan == 0) ? 0 : ( ((iWidth /2)*4) + 4 ); 6208 6085 Int offsetH = (iLoopCan == 0) ? 0 : ( ((iHeight/2)*4) + 4 ); 6209 6086 6210 6087 Int iBasePosX = Clip3( 0, pcBaseRec->getWidth () - 1, iCurrPosX + ( (cDv.getHor() + offsetW + 2 ) >> 2 ) ); 6211 6088 Int iBasePosY = Clip3( 0, pcBaseRec->getHeight() - 1, iCurrPosY + ( (cDv.getVer() + offsetH + 2 ) >> 2 ) ); … … 6213 6090 6214 6091 TComDataCU* pcBaseCU = pcBasePic->getCU( iBaseCUAddr ); 6215 #endif 6216 if(!( pcBaseCU->getPredictionMode( iBaseAbsPartIdx ) == MODE_INTRA )) 6217 { 6218 for( UInt uiCurrRefListId = 0; uiCurrRefListId < 2; uiCurrRefListId++ ) 6219 { 6220 RefPicList eCurrRefPicList = RefPicList( uiCurrRefListId ); 6221 6222 Bool stopLoop = false; 6223 for(Int iLoop = 0; iLoop < 2 && !stopLoop; ++iLoop) 6224 { 6225 RefPicList eBaseRefPicList = (iLoop ==1)? RefPicList( 1 - uiCurrRefListId ) : RefPicList( uiCurrRefListId ); 6226 TComMvField cBaseMvField; 6227 pcBaseCU->getMvField( pcBaseCU, iBaseAbsPartIdx, eBaseRefPicList, cBaseMvField ); 6228 Int iBaseRefIdx = cBaseMvField.getRefIdx(); 6229 if (iBaseRefIdx >= 0) 6092 if(!( pcBaseCU->getPredictionMode( iBaseAbsPartIdx ) == MODE_INTRA )) 6093 { 6094 // Loop reference picture list of current slice (X in spec). 6095 for( UInt uiCurrRefListId = 0; uiCurrRefListId < 2; uiCurrRefListId++ ) 6096 { 6097 RefPicList eCurrRefPicList = RefPicList( uiCurrRefListId ); 6098 6099 Bool stopLoop = false; 6100 // Loop reference picture list of candidate slice (Y in spec) 6101 for(Int iLoop = 0; iLoop < 2 && !stopLoop; ++iLoop) 6230 6102 { 6231 Int iBaseRefPOC = pcBaseCU->getSlice()->getRefPOC(eBaseRefPicList, iBaseRefIdx); 6232 if (iBaseRefPOC != pcSlice->getPOC()) 6103 RefPicList eBaseRefPicList = (iLoop ==1)? RefPicList( 1 - uiCurrRefListId ) : RefPicList( uiCurrRefListId ); 6104 TComMvField cBaseMvField; 6105 pcBaseCU->getMvField( pcBaseCU, iBaseAbsPartIdx, eBaseRefPicList, cBaseMvField ); 6106 Int iBaseRefIdx = cBaseMvField.getRefIdx(); 6107 if (iBaseRefIdx >= 0) 6233 6108 { 6234 for (Int iPdmRefIdx = 0; iPdmRefIdx < pcSlice->getNumRefIdx( eCurrRefPicList ); iPdmRefIdx++) 6109 Int iBaseRefPOC = pcBaseCU->getSlice()->getRefPOC(eBaseRefPicList, iBaseRefIdx); 6110 if (iBaseRefPOC != pcSlice->getPOC()) 6235 6111 { 6236 if (iBaseRefPOC == pcSlice->getRefPOC(eCurrRefPicList, iPdmRefIdx))6112 for (Int iPdmRefIdx = 0; iPdmRefIdx < pcSlice->getNumRefIdx( eCurrRefPicList ); iPdmRefIdx++) 6237 6113 { 6238 #if QC_INRIA_MTK_MRG_E0126 6114 if (iBaseRefPOC == pcSlice->getRefPOC(eCurrRefPicList, iPdmRefIdx)) 6115 { 6239 6116 abPdmAvailable[ (uiCurrRefListId + (iLoopCan<<2)) ] = true; 6240 6117 TComMv cMv(cBaseMvField.getHor(), cBaseMvField.getVer()); … … 6243 6120 cMv.setIDVHor (cDv.getHor()); 6244 6121 cMv.setIDVVer (cDv.getVer()); 6245 #if MTK_DVMCP_FIX_E01726246 6122 cMv.setIDVVId (iViewIndex); 6247 #endif6248 6123 #endif 6249 6124 clipMv( cMv ); 6250 6125 paiPdmRefIdx [ (uiCurrRefListId + (iLoopCan<<2)) ] = iPdmRefIdx; 6251 6126 pacPdmMv [ (uiCurrRefListId + (iLoopCan<<2)) ] = cMv; 6252 #else 6253 abPdmAvailable[ uiCurrRefListId ] = true; 6254 TComMv cMv(cBaseMvField.getHor(), cBaseMvField.getVer()); 6255 #if H_3D_NBDV 6256 cMv.setIDVFlag (true); 6257 cMv.setIDVHor (cDv.getHor()); 6258 cMv.setIDVVer (cDv.getVer()); 6259 #if MTK_DVMCP_FIX_E0172 6260 cMv.setIDVVId (iViewIndex); 6261 #endif 6262 #endif 6263 clipMv( cMv ); 6264 paiPdmRefIdx [ uiCurrRefListId ] = iPdmRefIdx; 6265 pacPdmMv [ uiCurrRefListId ] = cMv; 6266 #endif 6267 stopLoop = true; 6268 break; 6127 stopLoop = true; 6128 break; 6129 } 6269 6130 } 6270 6131 } … … 6274 6135 } 6275 6136 } 6276 #if QC_INRIA_MTK_MRG_E01266277 }6278 #endif6279 #if QC_INRIA_MTK_MRG_E01266280 6137 for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++) 6281 6138 { 6282 6139 availableMcDc[(iLoopCan << 1)] = ( abPdmAvailable[(iLoopCan<<2)] ? 1 : 0 ) + ( abPdmAvailable[1 + (iLoopCan<<2)] ? 2 : 0); 6283 6140 } 6284 #else 6285 availableMcDc[0] = ( abPdmAvailable[0] ? 1 : 0 ) + ( abPdmAvailable[1] ? 2 : 0 ); 6286 #endif 6141 6142 6143 //////////////////////////////// 6144 /////// IvDC + IvDCShift /////// 6145 //////////////////////////////// 6146 6287 6147 for( Int iRefListId = 0; iRefListId < 2 ; iRefListId++ ) 6288 6148 { … … 6291 6151 for( Int iPdmRefIdx = 0; iPdmRefIdx < iNumRefPics; iPdmRefIdx++ ) 6292 6152 { 6293 #if MTK_DIVMC_FIX_E01726294 6153 if(( pcSlice->getRefPOC( eRefPicListDMV, iPdmRefIdx ) == pcSlice->getPOC()) && (pcSlice->getRefPic( eRefPicListDMV, iPdmRefIdx )->getViewIndex() == pDInfo->m_aVIdxCan)) 6295 #else 6296 if( pcSlice->getRefPOC( eRefPicListDMV, iPdmRefIdx ) == pcSlice->getPOC()) 6297 #endif 6298 { 6299 #if QC_INRIA_MTK_MRG_E0126 6154 { 6300 6155 for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++) 6301 6156 { … … 6312 6167 } 6313 6168 break; 6314 #else 6315 abPdmAvailable[ iRefListId+2 ] = true; 6316 paiPdmRefIdx [ iRefListId+2 ] = iPdmRefIdx; 6317 6318 #if H_3D_NBDV_REF 6319 TComMv cMv = depthRefineFlag ? pDInfo->m_acDoNBDV : pDInfo->m_acNBDV; 6320 #endif // H_3D_NBDV_REF 6321 cMv.setVer(0); 6322 clipMv( cMv ); 6323 pacPdmMv [ iRefListId + 2] = cMv; 6324 break; 6325 #endif 6326 } 6327 } 6328 } 6329 #if QC_INRIA_MTK_MRG_E0126 6169 } 6170 } 6171 } 6330 6172 for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++) 6331 6173 { 6332 6174 availableMcDc[1 + (iLoopCan << 1)] = ( abPdmAvailable[2 + (iLoopCan<<2)] ? 1 : 0 ) + ( abPdmAvailable[3 + (iLoopCan<<2)] ? 2 : 0 ); 6333 6175 } 6334 #else6335 availableMcDc[1] = ( abPdmAvailable[2] ? 1 : 0 ) + ( abPdmAvailable[3] ? 2 : 0 );6336 #endif6337 6176 return false; 6338 6177 } -
branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComDataCU.h
r612 r615 197 197 Char* m_piVSPFlag; ///< array of VSP flags to indicate whehter a block uses VSP or not 198 198 ///< 0: non-VSP; 1: VSP 199 #if MTK_VSP_FIX_E0172200 Char* m_piVSPDir; ///< 0: LIST0; 1: LIST1201 #endif202 199 #endif 203 200 #if H_3D_ARP … … 256 253 Bool xAddMVPCandOrder ( AMVPInfo* pInfo, RefPicList eRefPicList, Int iRefIdx, UInt uiPartUnitIdx, MVP_DIR eDir ); 257 254 #if H_3D_VSP 258 #if MTK_VSP_FIX_E0172 259 Bool xAddVspCand( UChar ucVspMergePos, Int mrgCandIdx, DisInfo* pDInfo, Int& iCount, 260 Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* vspFlag, Int* vspDir ); 261 #else 262 Bool xAddVspCand( UChar ucVspMergePos, Int mrgCandIdx, DisInfo* pDInfo, Int& iCount, 255 Bool xAddVspCand( Int mrgCandIdx, DisInfo* pDInfo, Int& iCount, 263 256 Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* vspFlag ); 264 257 #endif 265 #endif 266 #if QC_INRIA_MTK_MRG_E0126 267 Bool xAddIvMRGCand( Int mrgCandIdx, Int& iCount, Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* iPdmDir, TComMv* acPdmMv, 268 Int* aiPdmRefIdx, Int iPosDmv, Int* vspFlag ); 269 Bool xFirstDmvAvai( Int& iCount, TComMvField* pcMvFieldNeighbours, Int* iPdmDir, Int iPosDmv, Int* vspFlag, Int& iFirDispCand ); 258 #if H_3D_IV_MERGE 259 Bool xAddIvMRGCand( Int mrgCandIdx, Int& iCount, Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* ivCandDir, TComMv* ivCandMv, 260 Int* ivCandRefIdx, Int posIvDC, Int* vspFlag ); 261 Bool xGetPosFirstAvailDmvCand( Int iCount, TComMvField* pcMvFieldNeighbours, Int* ivCandDir, Int posIvDC, Int* vspFlag, Int& iFirDispCand ); 270 262 #endif 271 263 … … 442 434 template <typename T> 443 435 Void setSubPart ( T bParameter, T* pbBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx ); 444 #if MTK_VSP_FIX_ALIGN_WD_E0172436 #if H_3D_VSP 445 437 template<typename T> 446 438 Void setSubPartT ( T uiParameter, T* puhBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx ); … … 471 463 #if H_3D_NBDV 472 464 Void setDvInfoSubParts ( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiDepth ); 473 #if MTK_VSP_FIX_ALIGN_WD_E0172474 465 Void setDvInfoSubParts ( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth); 475 #endif476 466 DisInfo* getDvInfo () { return m_pDvInfo; } 477 467 DisInfo getDvInfo (UInt uiIdx) { return m_pDvInfo[uiIdx]; } … … 682 672 #if H_3D_VSP 683 673 , Int* vspFlag 684 #if MTK_VSP_FIX_ALIGN_WD_E0172685 674 , InheritedVSPDisInfo* inheritedVSPDisInfo 686 #endif687 #if MTK_VSP_FIX_E0172688 , Int* vspDir689 #endif690 #endif691 675 , Int& numValidMergeCand, Int mrgCandIdx = -1 ); 692 #if MTK_VSP_FIX_ALIGN_WD_E0172 693 inline Void xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount, InheritedVSPDisInfo* inheritedVSPDisInfo); 676 inline Void xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount, InheritedVSPDisInfo* inheritedVSPDisInfo); 694 677 #endif 695 678 #if H_3D_VSP … … 698 681 Void setVSPFlag ( UInt uiIdx, Int n ) { m_piVSPFlag[uiIdx] = n; } 699 682 Void setVSPFlagSubParts( Char iVSPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 700 #if MTK_VSP_FIX_E0172701 Char* getVSPDir () { return m_piVSPDir; }702 Char getVSPDir ( UInt uiIdx ) { return m_piVSPDir[uiIdx]; }703 Void setVSPDir ( UInt uiIdx, Int n ) { m_piVSPDir[uiIdx] = n; }704 Void setVSPDirSubParts ( Char iVSPDir, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );705 #endif706 683 #endif 707 684 Void deriveLeftRightTopIdxGeneral ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ); -
branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComMotionInfo.h
r608 r615 77 77 } IDVInfo; 78 78 #endif 79 #if MTK_VSP_FIX_ALIGN_WD_E017279 #if H_3D_VSP 80 80 typedef struct _InheritedVSPDisCand 81 81 { -
branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComMv.h
r608 r615 58 58 Short m_iIDVHor; 59 59 Short m_iIDVVer; 60 #if MTK_DVMCP_FIX_E017261 60 Short m_iIDVVId; //view index of the IDV 62 #endif63 61 #endif 64 62 public: … … 75 73 , m_iIDVHor(0) 76 74 , m_iIDVVer(0) 77 #if MTK_DVMCP_FIX_E017278 75 , m_iIDVVId(0) 79 #endif80 76 #endif 81 77 { … … 89 85 , m_iIDVHor(0) 90 86 , m_iIDVVer(0) 91 #if MTK_DVMCP_FIX_E0172 92 , m_iIDVVId(0) 93 #endif 87 , m_iIDVVId(0) 94 88 #endif 95 89 { … … 106 100 #if H_3D_NBDV 107 101 m_bIDV = false; m_iIDVHor = m_iIDVVer = 0; 108 #if MTK_DVMCP_FIX_E0172109 102 m_iIDVVId = 0; 110 #endif111 103 #endif 112 104 } … … 131 123 Short getIDVVer () const { return m_iIDVVer; } 132 124 Bool getIDVFlag() const { return m_bIDV; } 133 #if MTK_DVMCP_FIX_E0172134 125 Short getIDVVId () const { return m_iIDVVId; } 135 #endif 126 136 127 #endif 137 128 // ------------------------------------------------------------------------------------------------------------------ -
branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComPrediction.cpp
r613 r615 588 588 pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iWidth, iHeight ); 589 589 #if H_3D_VSP 590 if ( 0 == pcCU->getVSPFlag(uiPartAddr))590 if ( pcCU->getVSPFlag(uiPartAddr) == 0) 591 591 { 592 592 #endif … … 622 622 { 623 623 if ( xCheckIdenticalMotion( pcCU, uiPartAddr ) ) 624 { 624 625 xPredInterUniVSP( pcCU, uiPartAddr, iWidth, iHeight, REF_PIC_LIST_0, pcYuvPred ); 626 } 625 627 else 628 { 626 629 xPredInterBiVSP ( pcCU, uiPartAddr, iWidth, iHeight, pcYuvPred ); 630 } 627 631 } 628 632 #endif … … 635 639 636 640 #if H_3D_VSP 637 if ( 0 == pcCU->getVSPFlag(uiPartAddr))641 if ( pcCU->getVSPFlag(uiPartAddr) == 0 ) 638 642 { 639 643 #endif … … 669 673 { 670 674 if ( xCheckIdenticalMotion( pcCU, uiPartAddr ) ) 675 { 671 676 xPredInterUniVSP( pcCU, uiPartAddr, iWidth, iHeight, REF_PIC_LIST_0, pcYuvPred ); 677 } 672 678 else 679 { 673 680 xPredInterBiVSP ( pcCU, uiPartAddr, iWidth, iHeight, pcYuvPred ); 681 } 674 682 } 675 683 #endif … … 722 730 { 723 731 // Get depth reference 724 #if MTK_VSP_FIX_E0172 725 Int vspDir = pcCU->getVSPDir( uiPartAddr ); 726 RefPicList privateRefPicList = (vspDir == 0) ? REF_PIC_LIST_0 : REF_PIC_LIST_1; 727 Int privateRefIdx = pcCU->getCUMvField( privateRefPicList )->getRefIdx( uiPartAddr ); 728 Int depthRefViewIdx = pcCU->getSlice()->getRefPic(privateRefPicList, privateRefIdx)->getViewIndex(); 729 #else 730 Int depthRefViewIdx = pcCU->getDvInfo(uiPartAddr).m_aVIdxCan; 731 #endif 732 Int depthRefViewIdx = pcCU->getDvInfo(uiPartAddr).m_aVIdxCan; 732 733 TComPic* pRefPicBaseDepth = pcCU->getSlice()->getIvPic (true, depthRefViewIdx ); 733 734 assert(pRefPicBaseDepth != NULL); … … 748 749 749 750 // Do compensation 750 #if MTK_VSP_FIX_ALIGN_WD_E0172751 751 TComMv cDv = pcCU->getDvInfo(uiPartAddr).m_acNBDV; 752 #else753 #if MTK_VSP_FIX_E0172754 TComMv cDv = pcCU->getCUMvField( privateRefPicList )->getMv( uiPartAddr );755 #else756 TComMv cDv = pcCU->getCUMvField( eRefPicList )->getMv( uiPartAddr ); // cDv is the disparity vector derived from the neighbors757 #endif758 #endif // end of MTK_VSP_FIX_ALIGN_WD_E0172759 752 pcCU->clipMv(cDv); 760 753 … … 935 928 936 929 if ( iRefIdx[iRefList] < 0 ) 930 { 937 931 continue; 932 } 938 933 assert( iRefIdx[iRefList] < pcCU->getSlice()->getNumRefIdx(eRefPicList) ); 939 934 -
branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComSlice.cpp
r608 r615 1510 1510 } 1511 1511 #endif 1512 #if H_3D _TMVP1512 #if H_3D 1513 1513 m_ivMvScalingFlag = true; 1514 1514 #endif -
branches/HTM-8.0-dev0/source/Lib/TLibCommon/TComSlice.h
r608 r615 504 504 Int* m_iIdx2DepthValue [MAX_NUM_LAYERS ]; 505 505 #endif 506 #if H_3D _TMVP506 #if H_3D 507 507 Bool m_ivMvScalingFlag; 508 508 #endif … … 716 716 #endif 717 717 718 #if H_3D_TMVP719 718 Bool getIvMvScalingFlag ( ) { return m_ivMvScalingFlag; } 720 719 Void setIvMvScalingFlag ( Bool b ) { m_ivMvScalingFlag = b; } 721 #endif722 720 #if LGE_INTER_SDC_E0156 723 721 Bool getInterSDCFlag ( Int layerIdInVps ) { return m_bInterSDCFlag[layerIdInVps]; } … … 1640 1638 TComPic* getIvPic ( Bool depthFlag, Int viewIndex){ return m_ivPicsCurrPoc[ depthFlag ? 1 : 0 ][ viewIndex ]; } 1641 1639 #endif 1642 #if H_3D _IV_MERGE1640 #if H_3D 1643 1641 TComPic* getTexturePic () { return m_ivPicsCurrPoc[0][ m_viewIndex ]; } 1644 1642 #endif -
branches/HTM-8.0-dev0/source/Lib/TLibCommon/TypeDef.h
r614 r615 92 92 // QC_CU_NBDV_D0181 93 93 // SEC_DEFAULT_DV_D0112 94 // MTK_DVMCP_FIX_E0172 1 // fix the mismatch between software and WD for DV derivation from DVMCP blocks, issue 2 in JCT3V-E0172 94 95 #define H_3D_ARP 1 // Advanced residual prediction (ARP), JCT3V-D0177 95 96 #define H_3D_IC 1 // Illumination Compensation, JCT3V-B0045, JCT3V-C0046, JCT3V-D0060 … … 110 111 // QC_D0191: Clean up 111 112 // LG_D0092: Multiple VSP candidate allowed 112 113 // MTK_VSP_FIX_ALIGN_WD_E0172 113 114 #define H_3D_IV_MERGE 1 // Inter-view motion merge candidate 114 115 // HHI_INTER_VIEW_MOTION_PRED … … 119 120 // QC_AMVP_MRG_UNIFY_IVCAN_C0051 120 121 // TEXTURE MERGING CANDIDATE , JCT3V-C0137 122 // QC_INRIA_MTK_MRG_E0126 121 123 #define H_3D_TMVP 1 // QC_TMVP_C0047 122 124 // Sony_M23639 … … 161 163 #define MTK_DIVMC_FIX_E0172 1 // fix the issue of derivation of disparity inter-view merge candidate, issue 5 in JCT3V-E0172 162 164 #define MTK_NBDV_TN_FIX_E0172 1 // fix the issue of DV derivation from the temporal neighboring blocks, issue 7 in JCT3V-E0172 163 #define MTK_DVMCP_FIX_E0172 1 // fix the mismatch between software and WD for DV derivation from DVMCP blocks, issue 2 in JCT3V-E0172164 #define MTK_VSP_FIX_ALIGN_WD_E0172 1 // fix the issues related to VSP merge candidate, issue 3, 4 in JCT3V-E0172, using an implementation aligned with WD165 166 #if !MTK_VSP_FIX_ALIGN_WD_E0172167 #define MTK_VSP_FIX_E0172 1 // fix the issues related to VSP merge candidate, issue 3, 4 in JCT3V-E0172168 #endif169 165 #endif // MTK_RVS_BUGFIX_E0172 170 166 … … 174 170 #endif 175 171 #endif // H_3D_NBDV 176 177 #if H_3D_IV_MERGE178 #define QC_INRIA_MTK_MRG_E0126 1 // additional merge candidates JCT3V-E0126179 #endif180 172 181 173 #if H_3D_DIM … … 271 263 ///// ***** VIEW SYNTHESIS PREDICTION ********* 272 264 #if H_3D_VSP 273 #define H_3D_VSP_POSITION 3 // The only supported position274 265 #define H_3D_VSP_BLOCKSIZE 4 // Supported values: 1, 2, and 4 275 266 #if H_3D_VSP_BLOCKSIZE == 1
Note: See TracChangeset for help on using the changeset viewer.