Changeset 163 in 3DVCSoftware
- Timestamp:
- 1 Nov 2012, 13:49:52 (12 years ago)
- Location:
- branches/HTM-4.1-dev1-LG/source/Lib
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-4.1-dev1-LG/source/Lib/TLibCommon/TComDataCU.cpp
r162 r163 3513 3513 { 3514 3514 #if LGE_DVMCP 3515 #if LGE_IVMP_PARALLEL_MERGE_B0136 3516 getDisMvpCand2(uiPUIdx, uiAbsPartIdx, &cDisInfo, true, REF_PIC_LIST_X, -1, true ); 3517 #else 3515 3518 getDisMvpCand2(uiPUIdx, uiAbsPartIdx, &cDisInfo, true ); 3519 #endif 3516 3520 #else 3517 3521 getDisMvpCand (uiPUIdx, uiAbsPartIdx, &cDisInfo ); … … 3538 3542 pcMvFieldNeighbours[ iCount<<1 ].setMvField( acPdmMv[ 0 ], aiPdmRefIdx[ 0 ] ); 3539 3543 } 3544 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3545 else 3546 { 3547 pcMvFieldNeighbours[ iCount<<1 ].setMvField( TComMv(0,0), NOT_VALID ); 3548 } 3549 #endif 3540 3550 if( ( iPdmInterDir & 2 ) == 2 ) 3541 3551 { 3542 3552 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( acPdmMv[ 1 ], aiPdmRefIdx[ 1 ] ); 3543 3553 } 3554 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3555 else 3556 { 3557 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3558 } 3559 #endif 3544 3560 #if SIMP_MRG_PRUN 3545 3561 if ( mrgCandIdx == iCount ) … … 3583 3599 pcCULeft->getMvField( pcCULeft, uiLeftPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3584 3600 } 3601 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3602 else 3603 { 3604 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3605 } 3606 #endif 3585 3607 #if LGE_DVMCP 3586 3608 pcMvFieldNeighbours[iCount<<1 ].getMv().m_bDvMcp = false; … … 3606 3628 pcMvFieldNeighbours[ iCount<<1 ].setMvField( acPdmMv[ 0 ], aiPdmRefIdx[ 0 ] ); 3607 3629 } 3630 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3631 else 3632 { 3633 pcMvFieldNeighbours[ iCount<<1 ].setMvField( TComMv(0,0), NOT_VALID ); 3634 } 3635 #endif 3608 3636 if( ( iPdmInterDir & 2 ) == 2 ) 3609 3637 { 3610 3638 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( acPdmMv[ 1 ], aiPdmRefIdx[ 1 ] ); 3611 3639 } 3640 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3641 else 3642 { 3643 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3644 } 3645 #endif 3612 3646 #if SIMP_MRG_PRUN 3613 3647 if ( mrgCandIdx == iCount ) … … 3659 3693 pcCUAbove->getMvField( pcCUAbove, uiAbovePartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3660 3694 } 3695 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3696 else 3697 { 3698 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3699 } 3700 #endif 3661 3701 #if LGE_DVMCP 3662 3702 pcMvFieldNeighbours[iCount<<1 ].getMv().m_bDvMcp = false; … … 3684 3724 pcMvFieldNeighbours[ iCount<<1 ].setMvField( acPdmMv[ 0 ], aiPdmRefIdx[ 0 ] ); 3685 3725 } 3726 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3727 else 3728 { 3729 pcMvFieldNeighbours[ iCount<<1 ].setMvField( TComMv(0,0), NOT_VALID ); 3730 } 3731 #endif 3686 3732 if( ( iPdmInterDir & 2 ) == 2 ) 3687 3733 { 3688 3734 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( acPdmMv[ 1 ], aiPdmRefIdx[ 1 ] ); 3689 3735 } 3736 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3737 else 3738 { 3739 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3740 } 3741 #endif 3690 3742 #if SIMP_MRG_PRUN 3691 3743 if ( mrgCandIdx == iCount ) … … 3730 3782 pcCUAboveRight->getMvField( pcCUAboveRight, uiAboveRightPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3731 3783 } 3784 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3785 else 3786 { 3787 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3788 } 3789 #endif 3732 3790 #if LGE_DVMCP 3733 3791 pcMvFieldNeighbours[iCount<<1 ].getMv().m_bDvMcp = false; … … 3752 3810 pcMvFieldNeighbours[ iCount<<1 ].setMvField( acPdmMv[ 0 ], aiPdmRefIdx[ 0 ] ); 3753 3811 } 3812 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3813 else 3814 { 3815 pcMvFieldNeighbours[ iCount<<1 ].setMvField( TComMv(0,0), NOT_VALID ); 3816 } 3817 #endif 3754 3818 if( ( iPdmInterDir & 2 ) == 2 ) 3755 3819 { 3756 3820 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( acPdmMv[ 1 ], aiPdmRefIdx[ 1 ] ); 3757 3821 } 3822 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3823 else 3824 { 3825 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3826 } 3827 #endif 3758 3828 #if SIMP_MRG_PRUN 3759 3829 if ( mrgCandIdx == iCount ) … … 3798 3868 pcCULeftBottom->getMvField( pcCULeftBottom, uiLeftBottomPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3799 3869 } 3870 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3871 else 3872 { 3873 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3874 } 3875 #endif 3800 3876 #if LGE_DVMCP 3801 3877 pcMvFieldNeighbours[iCount<<1 ].getMv().m_bDvMcp = false; … … 3820 3896 pcMvFieldNeighbours[ iCount<<1 ].setMvField( acPdmMv[ 0 ], aiPdmRefIdx[ 0 ] ); 3821 3897 } 3898 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3899 else 3900 { 3901 pcMvFieldNeighbours[ iCount<<1 ].setMvField( TComMv(0,0), NOT_VALID ); 3902 } 3903 #endif 3822 3904 if( ( iPdmInterDir & 2 ) == 2 ) 3823 3905 { 3824 3906 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( acPdmMv[ 1 ], aiPdmRefIdx[ 1 ] ); 3825 3907 } 3908 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3909 else 3910 { 3911 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3912 } 3913 #endif 3826 3914 #if SIMP_MRG_PRUN 3827 3915 if ( mrgCandIdx == iCount ) … … 3875 3963 pcCUAboveLeft->getMvField( pcCUAboveLeft, uiAboveLeftPartIdx, REF_PIC_LIST_1, pcMvFieldNeighbours[(iCount<<1)+1] ); 3876 3964 } 3965 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 3966 else 3967 { 3968 pcMvFieldNeighbours[(iCount<<1)+1 ].setMvField( TComMv(0,0), NOT_VALID ); 3969 } 3970 #endif 3877 3971 #if LGE_DVMCP 3878 3972 pcMvFieldNeighbours[iCount<<1 ].getMv().m_bDvMcp = false; … … 3989 4083 { 3990 4084 puhInterDirNeighbours[uiArrayAddr] = 1; 4085 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 4086 pcMvFieldNeighbours[ ( uiArrayAddr << 1 ) + 1 ].setMvField( TComMv(0,0), NOT_VALID ); 4087 #endif 3991 4088 } 3992 4089 } … … 3994 4091 { 3995 4092 puhInterDirNeighbours[uiArrayAddr] = 1; 4093 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 4094 pcMvFieldNeighbours[ ( uiArrayAddr << 1 ) + 1 ].setMvField( TComMv(0,0), NOT_VALID ); 4095 #endif 3996 4096 } 3997 4097 #if LGE_DVMCP … … 4231 4331 pcMvFieldNeighbours[(uiArrayAddr << 1) + 1].setMvField(TComMv(0, 0), r); 4232 4332 } 4333 #if FIX_CU_BASED_MRG_CAND_LIST_B0136 4334 else 4335 { 4336 pcMvFieldNeighbours[ ( uiArrayAddr << 1 ) + 1 ].setMvField( TComMv(0,0), NOT_VALID ); 4337 } 4338 #endif 4233 4339 uiArrayAddr++; 4234 4340 } … … 4795 4901 4796 4902 #if LGE_DVMCP 4797 Void TComDataCU::getDisMvpCand2( UInt uiPartIdx, UInt uiPartAddr,DisInfo* pDInfo, Bool bMerge, RefPicList eRefPicList0, Int iRefIdx0 ) 4903 Void TComDataCU::getDisMvpCand2( UInt uiPartIdx, UInt uiPartAddr,DisInfo* pDInfo, Bool bMerge, RefPicList eRefPicList0, Int iRefIdx0 4904 #if LGE_IVMP_PARALLEL_MERGE_B0136 4905 , Bool bParMerge 4906 #endif 4907 ) 4798 4908 { 4799 4909 PartSize eCUMode = getPartitionSize( uiPartAddr ); … … 4817 4927 #endif 4818 4928 4929 #if LGE_IVMP_PARALLEL_MERGE_B0136 4930 Int xP, yP, nPSW, nPSH; 4931 if( bParMerge) 4932 this->getPartPosition(uiPartIdx, xP, yP, nPSW, nPSH); 4933 #endif 4934 4819 4935 deriveLeftRightTopIdxGeneral( eCUMode, uiPartAddr, uiPartIdx, uiPartIdxLT, uiPartIdxRT ); 4820 4936 deriveLeftBottomIdxGeneral( eCUMode, uiPartAddr, uiPartIdx, uiPartIdxLB ); … … 4832 4948 } 4833 4949 #endif 4950 #if LGE_IVMP_PARALLEL_MERGE_B0136 4951 if (pcTmpCU && bParMerge) 4952 { 4953 if (!pcTmpCU->isDiffMER(xP -1, yP+nPSH-1, xP, yP)) 4954 { 4955 pcTmpCU = NULL; 4956 } 4957 } 4958 #endif 4959 4834 4960 4835 4961 pcCULeft = pcTmpCU; … … 4878 5004 } 4879 5005 #endif 5006 #if LGE_IVMP_PARALLEL_MERGE_B0136 5007 if (pcTmpCU && bParMerge) 5008 { 5009 if (!pcTmpCU->isDiffMER(xP+nPSW-1, yP-1, xP, yP)) 5010 { 5011 pcTmpCU = NULL; 5012 } 5013 } 5014 #endif 4880 5015 4881 5016 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx )) … … 4923 5058 pcTmpCU = getPUAboveRight(uiIdx, uiPartIdxRT, true, true, true); 4924 5059 #endif 5060 #if LGE_IVMP_PARALLEL_MERGE_B0136 5061 if (pcTmpCU && bParMerge) 5062 { 5063 if (!pcTmpCU->isDiffMER(xP+nPSW, yP-1, xP, yP)) 5064 { 5065 pcTmpCU = NULL; 5066 } 5067 } 5068 #endif 5069 4925 5070 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx ) ) 4926 5071 { … … 4966 5111 #else 4967 5112 pcTmpCU = getPUBelowLeft(uiIdx, uiPartIdxLB); 5113 #endif 5114 #if LGE_IVMP_PARALLEL_MERGE_B0136 5115 if (pcTmpCU && bParMerge) 5116 { 5117 if (!pcTmpCU->isDiffMER(xP-1, yP+nPSH, xP, yP)) 5118 { 5119 pcTmpCU = NULL; 5120 } 5121 } 4968 5122 #endif 4969 5123 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx )) … … 5006 5160 pcTmpCU = getPUAboveLeft(uiIdx, uiPartIdxLT, true, true, true); 5007 5161 #endif 5162 #if LGE_IVMP_PARALLEL_MERGE_B0136 5163 if (pcTmpCU && bParMerge) 5164 { 5165 if (!pcTmpCU->isDiffMER(xP-1, yP-1, xP, yP)) 5166 { 5167 pcTmpCU = NULL; 5168 } 5169 } 5170 #endif 5171 5008 5172 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx )) 5009 5173 { -
branches/HTM-4.1-dev1-LG/source/Lib/TLibCommon/TComDataCU.h
r154 r163 538 538 Void getDisMvpCand ( UInt uiPartIdx, UInt uiPartAddr, DisInfo* pDInfo ); 539 539 #if LGE_DVMCP 540 Void getDisMvpCand2( UInt uiPartIdx, UInt uiPartAddr, DisInfo* pDInfo, Bool bMerge=false, RefPicList eRefPicList=REF_PIC_LIST_X, Int iRefIdx=-1 ); 540 Void getDisMvpCand2( UInt uiPartIdx, UInt uiPartAddr, DisInfo* pDInfo, Bool bMerge=false, RefPicList eRefPicList=REF_PIC_LIST_X, Int iRefIdx=-1 541 #if LGE_IVMP_PARALLEL_MERGE_B0136 542 , Bool bParMerg = false 543 #endif 544 ); 541 545 #endif 542 546 -
branches/HTM-4.1-dev1-LG/source/Lib/TLibCommon/TypeDef.h
r162 r163 155 155 156 156 #define PARALLEL_MERGE 1 //< H0082 parallel merge/skip 157 #define LGE_IVMP_PARALLEL_MERGE_B0136 1 //< B0136 support of parallel merge/skip in disparity vector derivation 157 158 #define LOG2_PARALLEL_MERGE_LEVEL_MINUS2 0 //< H0082 parallel merge level 0-> 4x4, 1-> 8x8, 2->16x16, 3->32x32, 4->64x64 158 159 #if PARALLEL_MERGE && LOG2_PARALLEL_MERGE_LEVEL_MINUS2 159 160 #define CU_BASED_MRG_CAND_LIST 1 //< H0240: single merge candidate list for all PUs inside a 8x8 CU conditioned on LOG2_PARALLEL_MERGE_LEVEL_MINUS2 > 0 161 #define FIX_CU_BASED_MRG_CAND_LIST_B0136 1 //< B0136 bug fix for CU_BASED_MRG_CAND_LIST 160 162 #endif 161 163 #define MVP_AT_ENTROPYSLICE_BOUNDARY 1 //< H0362 enable motion prediction accross entropy slice boundary -
branches/HTM-4.1-dev1-LG/source/Lib/TLibEncoder/TEncSearch.cpp
r125 r163 2642 2642 */ 2643 2643 #if CU_BASED_MRG_CAND_LIST 2644 #if LG_RESTRICTEDRESPRED_M24766 2645 Void TEncSearch::xMergeEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, TComYuv* rpcResiPredYuv, Int iPUIdx, UInt& uiInterDir, TComMvField* pacMvField, UInt& uiMergeIndex, UInt& ruiCost, TComMvField* cMvFieldNeighbours, UChar* uhInterDirNeighbours, Int& numValidMergeCand ) 2646 #else 2644 2647 Void TEncSearch::xMergeEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPUIdx, UInt& uiInterDir, TComMvField* pacMvField, UInt& uiMergeIndex, UInt& ruiCost, TComMvField* cMvFieldNeighbours, UChar* uhInterDirNeighbours, Int& numValidMergeCand ) 2648 #endif 2645 2649 #else 2646 2650 #if LG_RESTRICTEDRESPRED_M24766 … … 3539 3543 UInt uiMRGCost = MAX_UINT; 3540 3544 #if CU_BASED_MRG_CAND_LIST 3545 #if LG_RESTRICTEDRESPRED_M24766 3546 xMergeEstimation( pcCU, pcOrgYuv, rpcResiPredYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand); 3547 #else 3541 3548 xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand); 3549 #endif 3542 3550 #else 3543 3551 #if LG_RESTRICTEDRESPRED_M24766
Note: See TracChangeset for help on using the changeset viewer.