Changeset 1274 in 3DVCSoftware for branches/HTM-14.1-update-dev2/source/Lib/TLibEncoder/TEncSearch.cpp
- Timestamp:
- 14 Jul 2015, 12:31:09 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.1-update-dev2/source/Lib/TLibEncoder/TEncSearch.cpp
r1256 r1274 3876 3876 //! estimation of best merge coding 3877 3877 Void TEncSearch::xMergeEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPUIdx, UInt& uiInterDir, TComMvField* pacMvField, UInt& uiMergeIndex, Distortion& ruiCost, TComMvField* cMvFieldNeighbours, UChar* uhInterDirNeighbours, Int& numValidMergeCand 3878 #if H_3D_VSP3878 #if NH_3D_VSP 3879 3879 , Int* vspFlag 3880 3880 #endif 3881 #if H_3D_SPIVMP3881 #if NH_3D_SPIVMP 3882 3882 , Bool* pbSPIVMPFlag, TComMvField* pcMvFieldSP, UChar* puhInterDirSP 3883 3883 #endif … … 3891 3891 UInt uiDepth = pcCU->getDepth( uiAbsPartIdx ); 3892 3892 3893 #if H_3D_DBBP3893 #if NH_3D_DBBP 3894 3894 DbbpTmpData* pDBBPTmpData = pcCU->getDBBPTmpData(); 3895 3895 if( pcCU->getDBBPFlag(0) ) … … 3898 3898 AOF( iPUIdx == 0 ); 3899 3899 AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N ); 3900 AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE);3900 AOF( pDBBPTmpData->eVirtualPartSize != NUMBER_OF_PART_SIZES ); 3901 3901 3902 3902 // temporary change of partition size for candidate derivation … … 3923 3923 3924 3924 PartSize partSize = pcCU->getPartitionSize( 0 ); 3925 #if H_3D_DBBP3925 #if NH_3D_DBBP 3926 3926 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && partSize != SIZE_2Nx2N && pcCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(0) == false ) 3927 3927 #else … … 3932 3932 { 3933 3933 pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth ); // temporarily set 3934 #if H_3D3934 #if NH_3D_MLC 3935 3935 pcCU->initAvailableFlags(); 3936 pcCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand );3936 pcCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand ); 3937 3937 pcCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours 3938 #if H_3D_SPIVMP3938 #if NH_3D_SPIVMP 3939 3939 , pcMvFieldSP, puhInterDirSP 3940 3940 #endif … … 3943 3943 3944 3944 pcCU->buildMCL( cMvFieldNeighbours,uhInterDirNeighbours 3945 #if H_3D_VSP3945 #if NH_3D_VSP 3946 3946 , vspFlag 3947 3947 #endif 3948 #if H_3D_SPIVMP3948 #if NH_3D_SPIVMP 3949 3949 , pbSPIVMPFlag 3950 3950 #endif 3951 3951 , numValidMergeCand 3952 3952 ); 3953 3953 #else … … 3959 3959 else 3960 3960 { 3961 #if H_3D3961 #if NH_3D_MLC 3962 3962 pcCU->initAvailableFlags(); 3963 pcCU->getInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);3963 pcCU->getInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand ); 3964 3964 pcCU->xGetInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours 3965 #if H_3D_SPIVMP3965 #if NH_3D_SPIVMP 3966 3966 , pcMvFieldSP, puhInterDirSP 3967 3967 #endif … … 3970 3970 3971 3971 pcCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours 3972 #if H_3D_VSP3972 #if NH_3D_VSP 3973 3973 , vspFlag 3974 3974 #endif 3975 #if H_3D_SPIVMP3975 #if NH_3D_SPIVMP 3976 3976 , pbSPIVMPFlag 3977 3977 #endif 3978 3978 , numValidMergeCand 3979 3979 ); 3980 3980 #else … … 3985 3985 xRestrictBipredMergeCand( pcCU, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand ); 3986 3986 3987 #if H_3D_DBBP3987 #if NH_3D_DBBP 3988 3988 if( pcCU->getDBBPFlag(0) ) 3989 3989 { … … 4008 4008 4009 4009 PartSize ePartSize = pcCU->getPartitionSize( 0 ); 4010 #if H_3D_VSP4010 #if NH_3D_VSP 4011 4011 pcCU->setVSPFlagSubParts( vspFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 4012 4012 #endif 4013 4013 4014 #if H_3D_SPIVMP4014 #if NH_3D_SPIVMP 4015 4015 pcCU->setSPIVMPFlagSubParts( pbSPIVMPFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx )); 4016 4016 if (pbSPIVMPFlag[uiMergeCand]) … … 4031 4031 else 4032 4032 #endif 4033 #if H_3D_VSP4034 #if H_3D_DBBP4033 #if NH_3D_VSP 4034 #if NH_3D_DBBP 4035 4035 if ( vspFlag[uiMergeCand] && !pcCU->getDBBPFlag(0) ) 4036 4036 #else … … 4068 4068 pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 4069 4069 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 4070 #if H_3D_VSP4070 #if NH_3D_VSP 4071 4071 } 4072 4072 #endif … … 4179 4179 Distortion biPDistTemp = std::numeric_limits<Distortion>::max(); 4180 4180 4181 #if H_3D_IV_MERGE4181 #if NH_3D_IV_MERGE 4182 4182 TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS_MEM << 1]; // double length for mv of both lists 4183 4183 UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM]; … … 4214 4214 4215 4215 pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iRoiWidth, iRoiHeight ); 4216 #if H_3D_VSP4216 #if NH_3D_VSP 4217 4217 pcCU->setVSPFlagSubParts( 0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr) ); 4218 4218 #endif … … 4557 4557 } // end if bTestNormalMC 4558 4558 #endif 4559 #if H_3D_DBBP4559 #if NH_3D_DBBP 4560 4560 // test merge mode for DBBP (2Nx2N) 4561 4561 if ( pcCU->getPartitionSize( uiPartAddr ) != SIZE_2Nx2N || pcCU->getDBBPFlag(0) ) … … 4597 4597 Distortion uiMRGCost = std::numeric_limits<Distortion>::max(); 4598 4598 4599 #if H_3D_VSP4599 #if NH_3D_VSP 4600 4600 Int vspFlag[MRG_MAX_NUM_CANDS_MEM]; 4601 4601 memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM); … … 4606 4606 DisInfo OriginalDvInfo = pcCU->getDvInfo(uiAbsPartIdx); 4607 4607 #endif 4608 #if H_3D_SPIVMP4608 #if NH_3D_SPIVMP 4609 4609 Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM]; 4610 4610 memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM); 4611 4611 TComMvField* pcMvFieldSP; 4612 4612 UChar* puhInterDirSP; 4613 pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartition()*2]; 4614 puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartition()]; 4615 #endif 4616 xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours 4617 4618 #if H_3D_VSP 4613 pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartitionsInCtu()*2]; 4614 puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartitionsInCtu()]; 4615 #endif 4616 xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand 4617 #if NH_3D_VSP 4619 4618 , vspFlag 4620 4619 #endif 4621 #if H_3D_SPIVMP4620 #if NH_3D_SPIVMP 4622 4621 , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP 4623 4622 #endif 4624 , numValidMergeCand);4623 ); 4625 4624 4626 4625 if ( uiMRGCost < uiMECost ) … … 4629 4628 pcCU->setMergeFlagSubParts ( true, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4630 4629 pcCU->setMergeIndexSubParts( uiMRGIndex, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4631 #if H_3D_VSP4630 #if NH_3D_VSP 4632 4631 pcCU->setVSPFlagSubParts( vspFlag[uiMRGIndex], uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4633 4632 #endif 4634 #if H_3D_SPIVMP4633 #if NH_3D_SPIVMP 4635 4634 pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMRGIndex], uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4636 4635 if (bSPIVMPFlag[uiMRGIndex]!=0) … … 4655 4654 else 4656 4655 #endif 4657 #if H_3D_VSP4658 #if H_3D_DBBP4656 #if NH_3D_VSP 4657 #if NH_3D_DBBP 4659 4658 if ( vspFlag[uiMRGIndex] && !pcCU->getDBBPFlag(uiPartAddr) ) 4660 4659 #else … … 4692 4691 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx ); 4693 4692 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4693 #if NH_3D_VSP 4694 } 4695 #endif 4694 4696 #if H_3D 4695 4697 } … … 4705 4707 else 4706 4708 { 4707 #if H_3D_SPIVMP4709 #if NH_3D_SPIVMP 4708 4710 pcCU->setSPIVMPFlagSubParts(0, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4709 4711 #endif … … 4711 4713 pcCU->setMergeFlagSubParts( false, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4712 4714 pcCU->setInterDirSubParts ( uiMEInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4713 #if H_3D_VSP4715 #if NH_3D_VSP 4714 4716 pcCU->setVSPFlagSubParts ( 0, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4715 4717 pcCU->setDvInfoSubParts(OriginalDvInfo, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); … … 4718 4720 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMEMvField[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4719 4721 } 4720 #if H_3D_SPIVMP4722 #if NH_3D_SPIVMP 4721 4723 delete[] pcMvFieldSP; 4722 4724 delete[] puhInterDirSP; … … 4754 4756 { 4755 4757 4756 #if H_3D_DBBP4758 #if NH_3D_DBBP 4757 4759 DbbpTmpData* pDBBPTmpData = pcCU->getDBBPTmpData(); 4758 4760 if( pcCU->getDBBPFlag(0) ) … … 4761 4763 AOF( uiPartIdx == 0 ); 4762 4764 AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N ); 4763 AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE);4765 AOF( pDBBPTmpData->eVirtualPartSize != NUMBER_OF_PART_SIZES ); 4764 4766 AOF( iRoiWidth == iRoiHeight ); 4765 4767 … … 4786 4788 4787 4789 pcCU->fillMvpCand( uiPartIdx, uiPartAddr, eRefPicList, iRefIdx, pcAMVPInfo ); 4788 #if H_3D_DBBP4790 #if NH_3D_DBBP 4789 4791 if( pcCU->getDBBPFlag(0) ) 4790 4792 { … … 5014 5016 if ( pcCU->getSlice()->testWeightPred() && pcCU->getSlice()->getSliceType()==P_SLICE ) 5015 5017 { 5016 xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, true, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA) ); 5018 xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, true, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA) 5019 #if NH_3D_ARP 5020 , false //add this for IC, otherwise, it could be removed 5021 #endif 5022 ); 5017 5023 } 5018 5024 else 5019 5025 { 5020 5026 xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, false, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA) 5021 #if H_3D_ARP5027 #if NH_3D_ARP 5022 5028 , false 5023 5029 #endif … … 5114 5120 5115 5121 m_pcRdCost->setPredictor ( *pcMvPred ); 5116 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5122 #if NH_3D_INTEGER_MV_DEPTH 5117 5123 if( pcCU->getSlice()->getIsDepth() ) 5118 5124 { … … 5123 5129 #endif 5124 5130 m_pcRdCost->setCostScale ( 2 ); 5125 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5131 #if NH_3D_INTEGER_MV_DEPTH 5126 5132 } 5127 5133 #endif … … 5150 5156 5151 5157 m_pcRdCost->getMotionCost( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) ); 5152 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5158 #if NH_3D_INTEGER_MV_DEPTH 5153 5159 if( ! pcCU->getSlice()->getIsDepth() ) 5154 5160 { … … 5163 5169 rcMv += (cMvHalf <<= 1); 5164 5170 rcMv += cMvQter; 5165 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5171 #if NH_3D_INTEGER_MV_DEPTH 5166 5172 } 5167 5173 #endif 5168 5174 5169 5175 UInt uiMvBits = m_pcRdCost->getBits( rcMv.getHor(), rcMv.getVer() ); 5170 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5176 #if NH_3D_INTEGER_MV_DEPTH 5171 5177 if( pcCU->getSlice()->getIsDepth() ) 5172 5178 { … … 5182 5188 { 5183 5189 Int iMvShift = 2; 5184 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5190 #if NH_3D_INTEGER_MV_DEPTH 5185 5191 if( pcCU->getSlice()->getIsDepth() ) 5186 5192 { … … 5340 5346 UInt uiSearchRange = m_iSearchRange; 5341 5347 pcCU->clipMv( rcMv ); 5342 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5348 #if NH_3D_INTEGER_MV_DEPTH 5343 5349 if( ! pcCU->getSlice()->getIsDepth() ) 5344 5350 #endif … … 5360 5366 TComMv cMv = m_acMvPredictors[index]; 5361 5367 pcCU->clipMv( cMv ); 5362 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5368 #if NH_3D_INTEGER_MV_DEPTH 5363 5369 if( ! pcCU->getSlice()->getIsDepth() ) 5364 5370 { 5365 5371 #endif 5366 5372 cMv >>= 2; 5367 #if NH_3D_ FULL_PEL_DEPTH_MAP_MV_ACC5373 #if NH_3D_INTEGER_MV_DEPTH 5368 5374 } 5369 5375 #endif … … 5788 5794 m_pcEntropyCoder->encodeSkipFlag(pcCU, 0, true); 5789 5795 m_pcEntropyCoder->encodeMergeIndex( pcCU, 0, true ); 5790 #if H_3D_ARP5796 #if NH_3D_ARP 5791 5797 m_pcEntropyCoder->encodeARPW( pcCU, 0 ); 5792 5798 #endif … … 5884 5890 const Double zeroCost = (pcCU->isLosslessCoded( 0 )) ? (nonZeroCost+1) : (m_pcRdCost->calcRdCost( zeroResiBits, zeroDistortion )); 5885 5891 #endif 5886 #if H_3D_SPIVMP5887 if ( dZeroCost < dCost || pcCU->getQtRootCbf(0)==0)5892 #if NH_3D_SPIVMP 5893 if ( zeroCost < nonZeroCost || pcCU->getQtRootCbf(0)==0) 5888 5894 #else 5889 5895 if ( zeroCost < nonZeroCost || !pcCU->getQtRootCbf(0) ) … … 7104 7110 m_pcEntropyCoder->encodeSkipFlag(pcCU, 0, true); 7105 7111 m_pcEntropyCoder->encodeMergeIndex(pcCU, 0, true); 7106 #if H_3D_ARP7112 #if NH_3D_ARP 7107 7113 m_pcEntropyCoder->encodeARPW( pcCU, 0 ); 7108 7114 #endif … … 7131 7137 m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true ); 7132 7138 #endif 7133 #if H_3D_ARP7139 #if NH_3D_ARP 7134 7140 m_pcEntropyCoder->encodeARPW( pcCU , 0 ); 7135 7141 #endif … … 7137 7143 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true ); 7138 7144 #endif 7139 #if H_3D7145 #if NH_3D_DBBP 7140 7146 m_pcEntropyCoder->encodeDBBPFlag( pcCU, 0, true ); 7141 7147 #endif
Note: See TracChangeset for help on using the changeset viewer.