Changeset 596 in 3DVCSoftware for branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon
- Timestamp:
- 28 Aug 2013, 04:55:26 (12 years ago)
- Location:
- branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TComDataCU.cpp
r593 r596 943 943 #if H_3D_VSP 944 944 m_piVSPFlag[ui]=pcCU->m_piVSPFlag[uiPartOffset+ui]; 945 #if MTK_VSP_FIX_ALIGN_WD_E0172 946 m_pDvInfo[ ui ] = pcCU->m_pDvInfo[uiPartOffset+ui]; 947 #endif 945 948 #if MTK_VSP_FIX_E0172 946 949 m_piVSPDir[ui]=pcCU->m_piVSPDir[uiPartOffset+ui]; … … 1238 1241 #if H_3D_VSP 1239 1242 m_piVSPFlag = pcCU->getVSPFlag() + uiAbsPartIdx; 1243 #if MTK_VSP_FIX_ALIGN_WD_E0172 1244 m_pDvInfo = pcCU->getDvInfo() + uiAbsPartIdx; 1245 #endif 1240 1246 #if MTK_VSP_FIX_E0172 1241 1247 m_piVSPDir = pcCU->getVSPDir () + uiAbsPartIdx; … … 1288 1294 #if H_3D_VSP 1289 1295 memcpy( m_piVSPFlag + uiOffset, pcCU->getVSPFlag(), sizeof( Char ) * uiNumPartition ); 1296 #if MTK_VSP_FIX_ALIGN_WD_E0172 1297 memcpy( m_pDvInfo + uiOffset, pcCU->getDvInfo(), sizeof( *m_pDvInfo ) * uiNumPartition ); 1298 #endif 1290 1299 #if MTK_VSP_FIX_E0172 1291 1300 memcpy( m_piVSPDir + uiOffset, pcCU->getVSPDir (), sizeInChar ); … … 1411 1420 #if H_3D_VSP 1412 1421 memcpy( rpcCU->getVSPFlag() + m_uiAbsIdxInLCU, m_piVSPFlag, sizeof( Char ) * m_uiNumPartition ); 1422 #if MTK_VSP_FIX_ALIGN_WD_E0172 1423 memcpy( rpcCU->getDvInfo() + m_uiAbsIdxInLCU, m_pDvInfo, sizeof( *m_pDvInfo ) * m_uiNumPartition ); 1424 #endif 1413 1425 #if MTK_VSP_FIX_E0172 1414 1426 memcpy( rpcCU->getVSPDir () + m_uiAbsIdxInLCU, m_piVSPDir , sizeInChar ); … … 2528 2540 setSubPart<Char>( iVSPFlag, m_piVSPFlag, uiAbsPartIdx, uiDepth, uiPartIdx ); 2529 2541 } 2542 #if MTK_VSP_FIX_ALIGN_WD_E0172 2543 template<typename T> 2544 Void TComDataCU::setSubPartT( T uiParameter, T* puhBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx ) 2545 { 2546 UInt uiCurrPartNumQ = (m_pcPic->getNumPartInCU() >> (2 * uiCUDepth)) >> 2; 2547 switch ( m_pePartSize[ uiCUAddr ] ) 2548 { 2549 case SIZE_2Nx2N: 2550 for (UInt ui = 0; ui < 4 * uiCurrPartNumQ; ui++) 2551 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2552 2553 break; 2554 case SIZE_2NxN: 2555 for (UInt ui = 0; ui < 2 * uiCurrPartNumQ; ui++) 2556 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2557 break; 2558 case SIZE_Nx2N: 2559 for (UInt ui = 0; ui < uiCurrPartNumQ; ui++) 2560 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2561 for (UInt ui = 0; ui < uiCurrPartNumQ; ui++) 2562 puhBaseLCU[uiCUAddr + 2 * uiCurrPartNumQ + ui] = uiParameter; 2563 break; 2564 case SIZE_NxN: 2565 for (UInt ui = 0; ui < uiCurrPartNumQ; ui++) 2566 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2567 break; 2568 case SIZE_2NxnU: 2569 if ( uiPUIdx == 0 ) 2570 { 2571 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++) 2572 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2573 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++) 2574 puhBaseLCU[uiCUAddr + uiCurrPartNumQ + ui] = uiParameter; 2575 2576 } 2577 else if ( uiPUIdx == 1 ) 2578 { 2579 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++) 2580 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2581 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1) + (uiCurrPartNumQ << 1); ui++) 2582 puhBaseLCU[uiCUAddr + uiCurrPartNumQ + ui] = uiParameter; 2583 2584 } 2585 else 2586 { 2587 assert(0); 2588 } 2589 break; 2590 case SIZE_2NxnD: 2591 if ( uiPUIdx == 0 ) 2592 { 2593 for (UInt ui = 0; ui < ((uiCurrPartNumQ << 1) + (uiCurrPartNumQ >> 1)); ui++) 2594 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2595 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++) 2596 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + uiCurrPartNumQ + ui] = uiParameter; 2597 2598 } 2599 else if ( uiPUIdx == 1 ) 2600 { 2601 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++) 2602 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2603 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++) 2604 puhBaseLCU[uiCUAddr + uiCurrPartNumQ + ui] = uiParameter; 2605 2606 } 2607 else 2608 { 2609 assert(0); 2610 } 2611 break; 2612 case SIZE_nLx2N: 2613 if ( uiPUIdx == 0 ) 2614 { 2615 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2616 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2617 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2618 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ >> 1) + ui] = uiParameter; 2619 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2620 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + ui] = uiParameter; 2621 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2622 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + (uiCurrPartNumQ >> 1) + ui] = uiParameter; 2623 2624 } 2625 else if ( uiPUIdx == 1 ) 2626 { 2627 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2628 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2629 for (UInt ui = 0; ui < (uiCurrPartNumQ + (uiCurrPartNumQ >> 2)); ui++) 2630 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ >> 1) + ui] = uiParameter; 2631 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2632 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + ui] = uiParameter; 2633 for (UInt ui = 0; ui < (uiCurrPartNumQ + (uiCurrPartNumQ >> 2)); ui++) 2634 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + (uiCurrPartNumQ >> 1) + ui] = uiParameter; 2635 2636 } 2637 else 2638 { 2639 assert(0); 2640 } 2641 break; 2642 case SIZE_nRx2N: 2643 if ( uiPUIdx == 0 ) 2644 { 2645 for (UInt ui = 0; ui < (uiCurrPartNumQ + (uiCurrPartNumQ >> 2)); ui++) 2646 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2647 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2648 puhBaseLCU[uiCUAddr + uiCurrPartNumQ + (uiCurrPartNumQ >> 1) + ui] = uiParameter; 2649 for (UInt ui = 0; ui < (uiCurrPartNumQ + (uiCurrPartNumQ >> 2)); ui++) 2650 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + ui] = uiParameter; 2651 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2652 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + uiCurrPartNumQ + (uiCurrPartNumQ >> 1) + ui] = uiParameter; 2653 2654 } 2655 else if ( uiPUIdx == 1 ) 2656 { 2657 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2658 puhBaseLCU[uiCUAddr + ui] = uiParameter; 2659 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2660 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ >> 1) + ui] = uiParameter; 2661 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2662 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + ui] = uiParameter; 2663 for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++) 2664 puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + (uiCurrPartNumQ >> 1) + ui] = uiParameter; 2665 2666 } 2667 else 2668 { 2669 assert(0); 2670 } 2671 break; 2672 default: 2673 assert( 0 ); 2674 } 2675 2676 } 2677 #endif 2530 2678 #if MTK_VSP_FIX_E0172 2531 2679 Void TComDataCU::setVSPDirSubParts ( Char iVSPDir, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ) … … 3007 3155 Int iRefListIdY = 0; 3008 3156 Int i; 3157 #if MTK_VSP_FIX_ALIGN_WD_E0172 3158 Int currViewId = m_pcSlice->getViewId(); 3159 Int derivedViewId = -1; 3160 Int otherViewId = -1; 3161 #endif 3009 3162 #if MTK_VSP_FIX_E0172 3010 3163 Int currViewId = m_pcSlice->getViewId(); … … 3022 3175 refViewAvailFlag = true; 3023 3176 predFlag[iRefListIdX] = 1; 3177 #if MTK_VSP_FIX_ALIGN_WD_E0172 3178 derivedViewId = m_pcSlice->getRefPic(eRefPicList, i)->getViewId(); 3179 #endif 3024 3180 #if MTK_VSP_FIX_E0172 3025 3181 vspDir[iCount] = iRefListIdX; … … 3050 3206 refViewAvailFlag = true; 3051 3207 predFlag[iRefListIdY] = 1; 3052 #if MTK_VSP_FIX_E0172 3208 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3053 3209 #if H_3D_BVSP_FIX 3054 3210 TComMv cMv = pDInfo->m_acNBDV; … … 3205 3361 #if H_3D_VSP 3206 3362 , Int* vspFlag 3363 #if MTK_VSP_FIX_ALIGN_WD_E0172 3364 , InheritedVSPDisInfo* inheritedVSPDisInfo 3365 #endif 3207 3366 #if MTK_VSP_FIX_E0172 3208 3367 , Int* vspDir … … 3265 3424 cDisInfo.m_acNBDV = getDvInfo(uiAbsPartIdx).m_acNBDV; 3266 3425 cDisInfo.m_aVIdxCan = getDvInfo(uiAbsPartIdx).m_aVIdxCan; 3267 3426 #if MTK_VSP_FIX_ALIGN_WD_E0172 3427 for(Int i = 0; i < MRG_MAX_NUM_CANDS_MEM; i++) 3428 { 3429 inheritedVSPDisInfo[i].m_acDvInfo = cDisInfo; 3430 } 3431 #endif 3268 3432 if( m_pcSlice->getIsDepth()) 3269 3433 { … … 3449 3613 #if H_3D_VSP 3450 3614 if (pcCULeft->getVSPFlag(uiLeftPartIdx) == 1) 3451 #if MTK_VSP_FIX_E0172 3615 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3452 3616 { 3453 3617 #endif 3454 3618 vspFlag[iCount] = 1; 3619 #if MTK_VSP_FIX_ALIGN_WD_E0172 3620 xInheritVSPDisInfo(pcCULeft,uiLeftPartIdx,iCount,inheritedVSPDisInfo); 3621 } 3622 #endif 3455 3623 #if MTK_VSP_FIX_E0172 3456 3624 vspDir[iCount] = pcCULeft->getVSPDir( uiLeftPartIdx ); … … 3524 3692 #if H_3D_VSP 3525 3693 if (pcCUAbove->getVSPFlag(uiAbovePartIdx) == 1) 3526 #if MTK_VSP_FIX_E0172 3694 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3527 3695 { 3528 3696 #endif 3529 3697 vspFlag[iCount] = 1; 3698 #if MTK_VSP_FIX_ALIGN_WD_E0172 3699 xInheritVSPDisInfo(pcCUAbove,uiAbovePartIdx,iCount,inheritedVSPDisInfo); 3700 } 3701 #endif 3530 3702 #if MTK_VSP_FIX_E0172 3531 3703 vspDir[iCount] = pcCUAbove->getVSPDir( uiAbovePartIdx ); … … 3577 3749 #if H_3D_VSP 3578 3750 if (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) == 1) 3579 #if MTK_VSP_FIX_E0172 3751 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3580 3752 { 3581 3753 #endif 3582 3754 vspFlag[iCount] = 1; 3755 #if MTK_VSP_FIX_ALIGN_WD_E0172 3756 xInheritVSPDisInfo(pcCUAboveRight,uiAboveRightPartIdx,iCount,inheritedVSPDisInfo); 3757 } 3758 #endif 3583 3759 #if MTK_VSP_FIX_E0172 3584 3760 vspDir[iCount] = pcCUAboveRight->getVSPDir( uiAboveRightPartIdx); … … 3688 3864 #if H_3D_VSP 3689 3865 if (pcCULeftBottom->getVSPFlag(uiLeftBottomPartIdx) == 1) 3690 #if MTK_VSP_FIX_E0172 3866 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3691 3867 { 3692 3868 #endif 3693 3869 vspFlag[iCount] = 1; 3870 #if MTK_VSP_FIX_ALIGN_WD_E0172 3871 xInheritVSPDisInfo(pcCULeftBottom,uiLeftBottomPartIdx,iCount,inheritedVSPDisInfo); 3872 } 3873 #endif 3694 3874 #if MTK_VSP_FIX_E0172 3695 3875 vspDir[iCount] = pcCULeftBottom->getVSPDir( uiLeftBottomPartIdx); … … 3735 3915 #if H_3D_VSP 3736 3916 if (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) == 1) 3737 #if MTK_VSP_FIX_E0172 3917 #if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172 3738 3918 { 3739 3919 #endif 3740 3920 vspFlag[iCount] = 1; 3921 #if MTK_VSP_FIX_ALIGN_WD_E0172 3922 xInheritVSPDisInfo(pcCUAboveLeft,uiAboveLeftPartIdx,iCount,inheritedVSPDisInfo); 3923 } 3924 #endif 3741 3925 #if MTK_VSP_FIX_E0172 3742 3926 vspDir[iCount] = pcCUAboveLeft->getVSPDir( uiAboveLeftPartIdx); … … 3951 4135 numValidMergeCand = uiArrayAddr; 3952 4136 } 3953 4137 #if MTK_VSP_FIX_ALIGN_WD_E0172 4138 inline Void TComDataCU::xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount, InheritedVSPDisInfo* inheritedVSPDisInfo) 4139 { 4140 inheritedVSPDisInfo[iCount].m_acDvInfo.m_acNBDV = pcCURef->getDvInfo(uiAbsPartIdx).m_acNBDV; 4141 inheritedVSPDisInfo[iCount].m_acDvInfo.m_aVIdxCan = pcCURef->getDvInfo(uiAbsPartIdx).m_aVIdxCan; 4142 } 4143 #endif 3954 4144 /** Check whether the current PU and a spatial neighboring PU are in a same ME region. 3955 4145 * \param xN, xN location of the upper-left corner pixel of a neighboring PU … … 5575 5765 } 5576 5766 } 5767 #if MTK_VSP_FIX_ALIGN_WD_E0172 5768 Void TComDataCU::setDvInfoSubParts( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth ) 5769 { 5770 setSubPartT<DisInfo>( cDvInfo, m_pDvInfo, uiAbsPartIdx, uiDepth, uiPUIdx ); 5771 } 5772 #endif 5577 5773 #if MTK_NBDV_TN_FIX_E0172 5578 5774 Bool TComDataCU::xGetColDisMV( Int currCandPic, RefPicList eRefPicList, Int refidx, Int uiCUAddr, Int uiPartUnitIdx, TComMv& rcMv , Int & iTargetViewIdx, Int & iStartViewIdx ) -
branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TComDataCU.h
r587 r596 435 435 template <typename T> 436 436 Void setSubPart ( T bParameter, T* pbBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx ); 437 437 #if MTK_VSP_FIX_ALIGN_WD_E0172 438 template<typename T> 439 Void setSubPartT ( T uiParameter, T* puhBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx ); 440 #endif 438 441 #if AMP_MRG 439 442 Void setMergeAMP( Bool b ) { m_bIsMergeAMP = b; } … … 461 464 #if H_3D_NBDV 462 465 Void setDvInfoSubParts ( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiDepth ); 466 #if MTK_VSP_FIX_ALIGN_WD_E0172 467 Void setDvInfoSubParts ( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth); 468 #endif 463 469 DisInfo* getDvInfo () { return m_pDvInfo; } 464 470 DisInfo getDvInfo (UInt uiIdx) { return m_pDvInfo[uiIdx]; } … … 649 655 #if H_3D_VSP 650 656 , Int* vspFlag 657 #if MTK_VSP_FIX_ALIGN_WD_E0172 658 , InheritedVSPDisInfo* inheritedVSPDisInfo 659 #endif 651 660 #if MTK_VSP_FIX_E0172 652 661 , Int* vspDir … … 654 663 #endif 655 664 , Int& numValidMergeCand, Int mrgCandIdx = -1 ); 665 #if MTK_VSP_FIX_ALIGN_WD_E0172 666 inline Void xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount, InheritedVSPDisInfo* inheritedVSPDisInfo); 667 #endif 656 668 #if H_3D_VSP 657 669 Char* getVSPFlag () { return m_piVSPFlag; } -
branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TComMotionInfo.h
r478 r596 76 76 Bool m_bFound; 77 77 } IDVInfo; 78 #endif 79 #if MTK_VSP_FIX_ALIGN_WD_E0172 80 typedef struct _InheritedVSPDisCand 81 { 82 DisInfo m_acDvInfo; 83 } InheritedVSPDisInfo; 78 84 #endif 79 85 // ==================================================================================================================== -
branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TComPrediction.cpp
r578 r596 729 729 730 730 // Do compensation 731 #if MTK_VSP_FIX_E0172 731 #if MTK_VSP_FIX_ALIGN_WD_E0172 732 TComMv cDv = pcCU->getDvInfo(uiPartAddr).m_acNBDV; 733 #else 734 #if MTK_VSP_FIX_E0172 732 735 TComMv cDv = pcCU->getCUMvField( privateRefPicList )->getMv( uiPartAddr ); 733 736 #else 734 737 TComMv cDv = pcCU->getCUMvField( eRefPicList )->getMv( uiPartAddr ); // cDv is the disparity vector derived from the neighbors 735 738 #endif 739 #endif // end of MTK_VSP_FIX_ALIGN_WD_E0172 736 740 pcCU->clipMv(cDv); 737 741 -
branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TypeDef.h
r593 r596 106 106 #if MTK_RVS_BUGFIX_E0172 107 107 #define MTK_DVMCP_FIX_E0172 1 // fix the mismatch between software and WD for DV derivation from DVMCP blocks, issue 2 in JCT3V-E0172 108 #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 WD 109 #if !MTK_VSP_FIX_ALIGN_WD_E0172 108 110 #define MTK_VSP_FIX_E0172 1 // fix the issues related to VSP merge candidate, issue 3, 4 in JCT3V-E0172 111 #endif 109 112 #define MTK_DIVMC_FIX_E0172 1 // fix the issue of derivation of disparity inter-view merge candidate, issue 5 in JCT3V-E0172 110 113 #define MTK_NBDV_TN_FIX_E0172 1 // fix the issue of DV derivation from the temporal neighboring blocks, issue 7 in JCT3V-E0172
Note: See TracChangeset for help on using the changeset viewer.