Changeset 1279 in 3DVCSoftware for branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncSearch.cpp
- Timestamp:
- 15 Jul 2015, 14:57:32 (9 years ago)
- Location:
- branches/HTM-14.1-update-dev1
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.1-update-dev1
-
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncSearch.cpp
r1258 r1279 340 340 341 341 piRefSrch = rcStruct.piRefY + iSearchY * rcStruct.iYStride + iSearchX; 342 #if H_3D_IC342 #if NH_3D_IC 343 343 m_cDistParam.bUseIC = pcPatternKey->getICFlag(); 344 344 #endif … … 851 851 852 852 setDistParamComp(COMPONENT_Y); 853 #if H_3D_IC853 #if NH_3D_IC 854 854 m_cDistParam.bUseIC = pcPatternKey->getICFlag(); 855 855 #endif … … 2901 2901 const Bool bUseHadamard=pcCU->getCUTransquantBypass(0) == 0; 2902 2902 m_pcRdCost->setDistParam(distParam, sps.getBitDepth(CHANNEL_TYPE_LUMA), piOrg, uiStride, piPred, uiStride, puRect.width, puRect.height, bUseHadamard); 2903 2904 #if NH_3D_IC_FIX 2905 distParam.bUseIC = false; 2906 #endif 2907 #if H_3D_INTER_SDC_FIX 2908 distParam.bUseSDCMRSAD = false; 2909 #endif 2903 2910 distParam.bApplyWeight = false; 2904 2911 for( Int modeIdx = 0; modeIdx < numModesAvailable; modeIdx++ ) … … 3835 3842 iWidth, iHeight, m_pcEncCfg->getUseHADME() && (pcCU->getCUTransquantBypass(iPartIdx) == 0) ); 3836 3843 3837 #if H_3D_IC3844 #if NH_3D_IC 3838 3845 cDistParam.bUseIC = false; 3839 3846 #endif … … 3847 3854 //! estimation of best merge coding 3848 3855 Void TEncSearch::xMergeEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPUIdx, UInt& uiInterDir, TComMvField* pacMvField, UInt& uiMergeIndex, Distortion& ruiCost, TComMvField* cMvFieldNeighbours, UChar* uhInterDirNeighbours, Int& numValidMergeCand 3849 #if H_3D_VSP3856 #if NH_3D_VSP 3850 3857 , Int* vspFlag 3851 3858 #endif 3852 #if H_3D_SPIVMP3859 #if NH_3D_SPIVMP 3853 3860 , Bool* pbSPIVMPFlag, TComMvField* pcMvFieldSP, UChar* puhInterDirSP 3854 3861 #endif … … 3862 3869 UInt uiDepth = pcCU->getDepth( uiAbsPartIdx ); 3863 3870 3864 #if H_3D_DBBP3871 #if NH_3D_DBBP 3865 3872 DbbpTmpData* pDBBPTmpData = pcCU->getDBBPTmpData(); 3866 3873 if( pcCU->getDBBPFlag(0) ) … … 3869 3876 AOF( iPUIdx == 0 ); 3870 3877 AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N ); 3871 AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE);3878 AOF( pDBBPTmpData->eVirtualPartSize != NUMBER_OF_PART_SIZES ); 3872 3879 3873 3880 // temporary change of partition size for candidate derivation … … 3894 3901 3895 3902 PartSize partSize = pcCU->getPartitionSize( 0 ); 3896 #if H_3D_DBBP3903 #if NH_3D_DBBP 3897 3904 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && partSize != SIZE_2Nx2N && pcCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(0) == false ) 3898 3905 #else … … 3903 3910 { 3904 3911 pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth ); // temporarily set 3905 #if H_3D3912 #if NH_3D_MLC 3906 3913 pcCU->initAvailableFlags(); 3907 pcCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand );3914 pcCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand ); 3908 3915 pcCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours 3909 #if H_3D_SPIVMP3916 #if NH_3D_SPIVMP 3910 3917 , pcMvFieldSP, puhInterDirSP 3911 3918 #endif … … 3914 3921 3915 3922 pcCU->buildMCL( cMvFieldNeighbours,uhInterDirNeighbours 3916 #if H_3D_VSP3923 #if NH_3D_VSP 3917 3924 , vspFlag 3918 3925 #endif 3919 #if H_3D_SPIVMP3926 #if NH_3D_SPIVMP 3920 3927 , pbSPIVMPFlag 3921 3928 #endif 3922 3929 , numValidMergeCand 3923 3930 ); 3924 3931 #else … … 3930 3937 else 3931 3938 { 3932 #if H_3D3939 #if NH_3D_MLC 3933 3940 pcCU->initAvailableFlags(); 3934 pcCU->getInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);3941 pcCU->getInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand ); 3935 3942 pcCU->xGetInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours 3936 #if H_3D_SPIVMP3943 #if NH_3D_SPIVMP 3937 3944 , pcMvFieldSP, puhInterDirSP 3938 3945 #endif … … 3941 3948 3942 3949 pcCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours 3943 #if H_3D_VSP3950 #if NH_3D_VSP 3944 3951 , vspFlag 3945 3952 #endif 3946 #if H_3D_SPIVMP3953 #if NH_3D_SPIVMP 3947 3954 , pbSPIVMPFlag 3948 3955 #endif 3949 3956 , numValidMergeCand 3950 3957 ); 3951 3958 #else … … 3956 3963 xRestrictBipredMergeCand( pcCU, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand ); 3957 3964 3958 #if H_3D_DBBP3965 #if NH_3D_DBBP 3959 3966 if( pcCU->getDBBPFlag(0) ) 3960 3967 { … … 3979 3986 3980 3987 PartSize ePartSize = pcCU->getPartitionSize( 0 ); 3981 #if H_3D_VSP3988 #if NH_3D_VSP 3982 3989 pcCU->setVSPFlagSubParts( vspFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3983 3990 #endif 3984 3991 3985 #if H_3D_SPIVMP3992 #if NH_3D_SPIVMP 3986 3993 pcCU->setSPIVMPFlagSubParts( pbSPIVMPFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx )); 3987 3994 if (pbSPIVMPFlag[uiMergeCand]) … … 4002 4009 else 4003 4010 #endif 4004 #if H_3D_VSP4005 #if H_3D_DBBP4011 #if NH_3D_VSP 4012 #if NH_3D_DBBP 4006 4013 if ( vspFlag[uiMergeCand] && !pcCU->getDBBPFlag(0) ) 4007 4014 #else … … 4039 4046 pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 4040 4047 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 4041 #if H_3D_VSP4048 #if NH_3D_VSP 4042 4049 } 4043 4050 #endif … … 4150 4157 Distortion biPDistTemp = std::numeric_limits<Distortion>::max(); 4151 4158 4152 #if H_3D_IV_MERGE4159 #if NH_3D_IV_MERGE 4153 4160 TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS_MEM << 1]; // double length for mv of both lists 4154 4161 UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM]; … … 4185 4192 4186 4193 pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iRoiWidth, iRoiHeight ); 4187 #if H_3D_VSP4194 #if NH_3D_VSP 4188 4195 pcCU->setVSPFlagSubParts( 0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr) ); 4189 4196 #endif … … 4528 4535 } // end if bTestNormalMC 4529 4536 #endif 4530 #if H_3D_DBBP4537 #if NH_3D_DBBP 4531 4538 // test merge mode for DBBP (2Nx2N) 4532 4539 if ( pcCU->getPartitionSize( uiPartAddr ) != SIZE_2Nx2N || pcCU->getDBBPFlag(0) ) … … 4568 4575 Distortion uiMRGCost = std::numeric_limits<Distortion>::max(); 4569 4576 4570 #if H_3D_VSP4577 #if NH_3D_VSP 4571 4578 Int vspFlag[MRG_MAX_NUM_CANDS_MEM]; 4572 4579 memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM); … … 4577 4584 DisInfo OriginalDvInfo = pcCU->getDvInfo(uiAbsPartIdx); 4578 4585 #endif 4579 #if H_3D_SPIVMP4586 #if NH_3D_SPIVMP 4580 4587 Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM]; 4581 4588 memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM); 4582 4589 TComMvField* pcMvFieldSP; 4583 4590 UChar* puhInterDirSP; 4584 pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartition()*2]; 4585 puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartition()]; 4586 #endif 4587 xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours 4588 4589 #if H_3D_VSP 4591 pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartitionsInCtu()*2]; 4592 puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartitionsInCtu()]; 4593 #endif 4594 xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand 4595 #if NH_3D_VSP 4590 4596 , vspFlag 4591 4597 #endif 4592 #if H_3D_SPIVMP4598 #if NH_3D_SPIVMP 4593 4599 , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP 4594 4600 #endif 4595 , numValidMergeCand);4601 ); 4596 4602 4597 4603 if ( uiMRGCost < uiMECost ) … … 4600 4606 pcCU->setMergeFlagSubParts ( true, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4601 4607 pcCU->setMergeIndexSubParts( uiMRGIndex, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4602 #if H_3D_VSP4608 #if NH_3D_VSP 4603 4609 pcCU->setVSPFlagSubParts( vspFlag[uiMRGIndex], uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4604 4610 #endif 4605 #if H_3D_SPIVMP4611 #if NH_3D_SPIVMP 4606 4612 pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMRGIndex], uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4607 4613 if (bSPIVMPFlag[uiMRGIndex]!=0) … … 4626 4632 else 4627 4633 #endif 4628 #if H_3D_VSP4629 #if H_3D_DBBP4634 #if NH_3D_VSP 4635 #if NH_3D_DBBP 4630 4636 if ( vspFlag[uiMRGIndex] && !pcCU->getDBBPFlag(uiPartAddr) ) 4631 4637 #else … … 4663 4669 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx ); 4664 4670 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4671 #if NH_3D_VSP 4672 } 4673 #endif 4665 4674 #if H_3D 4666 4675 } … … 4676 4685 else 4677 4686 { 4678 #if H_3D_SPIVMP4687 #if NH_3D_SPIVMP 4679 4688 pcCU->setSPIVMPFlagSubParts(0, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4680 4689 #endif … … 4682 4691 pcCU->setMergeFlagSubParts( false, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4683 4692 pcCU->setInterDirSubParts ( uiMEInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4684 #if H_3D_VSP4693 #if NH_3D_VSP 4685 4694 pcCU->setVSPFlagSubParts ( 0, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4686 4695 pcCU->setDvInfoSubParts(OriginalDvInfo, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); … … 4689 4698 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMEMvField[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4690 4699 } 4691 #if H_3D_SPIVMP4700 #if NH_3D_SPIVMP 4692 4701 delete[] pcMvFieldSP; 4693 4702 delete[] puhInterDirSP; … … 4725 4734 { 4726 4735 4727 #if H_3D_DBBP4736 #if NH_3D_DBBP 4728 4737 DbbpTmpData* pDBBPTmpData = pcCU->getDBBPTmpData(); 4729 4738 if( pcCU->getDBBPFlag(0) ) … … 4732 4741 AOF( uiPartIdx == 0 ); 4733 4742 AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N ); 4734 AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE);4743 AOF( pDBBPTmpData->eVirtualPartSize != NUMBER_OF_PART_SIZES ); 4735 4744 AOF( iRoiWidth == iRoiHeight ); 4736 4745 … … 4757 4766 4758 4767 pcCU->fillMvpCand( uiPartIdx, uiPartAddr, eRefPicList, iRefIdx, pcAMVPInfo ); 4759 #if H_3D_DBBP4768 #if NH_3D_DBBP 4760 4769 if( pcCU->getDBBPFlag(0) ) 4761 4770 { … … 4978 4987 pcCU->clipMv( cMvCand ); 4979 4988 4980 #if H_3D_IC4989 #if NH_3D_IC 4981 4990 Bool bICFlag = pcCU->getICFlag( uiPartAddr ) && ( pcCU->getSlice()->getViewIndex() != pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getViewIndex() ); 4982 4991 #endif … … 4985 4994 if ( pcCU->getSlice()->testWeightPred() && pcCU->getSlice()->getSliceType()==P_SLICE ) 4986 4995 { 4987 xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, true, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA) ); 4996 xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, true, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA) 4997 #if NH_3D_ARP 4998 , false //add this for IC, otherwise, it could be removed 4999 #endif 5000 ); 4988 5001 } 4989 5002 else 4990 5003 { 4991 5004 xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, false, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA) 4992 #if H_3D_ARP5005 #if NH_3D_ARP 4993 5006 , false 4994 5007 #endif 4995 #if H_3D_IC5008 #if NH_3D_IC 4996 5009 , bICFlag 4997 5010 #endif … … 5038 5051 pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iRoiWidth, iRoiHeight ); 5039 5052 5040 #if H_3D_IC5053 #if NH_3D_IC 5041 5054 Bool bICFlag = pcCU->getICFlag( uiPartAddr ) && ( pcCU->getSlice()->getViewIndex() != pcCU->getSlice()->getRefPic( eRefPicList, iRefIdxPred )->getViewIndex() ); 5042 5055 pcPatternKey->setICFlag( bICFlag ); … … 5085 5098 5086 5099 m_pcRdCost->setPredictor ( *pcMvPred ); 5087 #if H_3D_IC5100 #if NH_3D_INTEGER_MV_DEPTH 5088 5101 if( pcCU->getSlice()->getIsDepth() ) 5089 5102 { … … 5094 5107 #endif 5095 5108 m_pcRdCost->setCostScale ( 2 ); 5096 #if H_3D_IC5109 #if NH_3D_INTEGER_MV_DEPTH 5097 5110 } 5098 5111 #endif … … 5121 5134 5122 5135 m_pcRdCost->getMotionCost( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) ); 5123 #if H_3D_IC5136 #if NH_3D_INTEGER_MV_DEPTH 5124 5137 if( ! pcCU->getSlice()->getIsDepth() ) 5125 5138 { … … 5134 5147 rcMv += (cMvHalf <<= 1); 5135 5148 rcMv += cMvQter; 5136 #if H_3D_IC5149 #if NH_3D_INTEGER_MV_DEPTH 5137 5150 } 5138 5151 #endif 5139 5152 5140 5153 UInt uiMvBits = m_pcRdCost->getBits( rcMv.getHor(), rcMv.getVer() ); 5141 #if H_3D_IC5154 #if NH_3D_INTEGER_MV_DEPTH 5142 5155 if( pcCU->getSlice()->getIsDepth() ) 5143 5156 { … … 5153 5166 { 5154 5167 Int iMvShift = 2; 5155 #if H_3D_IC5168 #if NH_3D_INTEGER_MV_DEPTH 5156 5169 if( pcCU->getSlice()->getIsDepth() ) 5157 5170 { … … 5228 5241 m_cDistParam.bitDepth = pcPatternKey->getBitDepthY(); 5229 5242 5230 #if H_3D_IC5243 #if NH_3D_IC 5231 5244 m_cDistParam.bUseIC = pcPatternKey->getICFlag(); 5232 5245 #endif … … 5311 5324 UInt uiSearchRange = m_iSearchRange; 5312 5325 pcCU->clipMv( rcMv ); 5313 #if H_3D_IC5326 #if NH_3D_INTEGER_MV_DEPTH 5314 5327 if( ! pcCU->getSlice()->getIsDepth() ) 5315 5328 #endif … … 5331 5344 TComMv cMv = m_acMvPredictors[index]; 5332 5345 pcCU->clipMv( cMv ); 5333 #if H_3D_IC5346 #if NH_3D_INTEGER_MV_DEPTH 5334 5347 if( ! pcCU->getSlice()->getIsDepth() ) 5335 5348 { 5336 5349 #endif 5337 5350 cMv >>= 2; 5338 #if H_3D_IC5351 #if NH_3D_INTEGER_MV_DEPTH 5339 5352 } 5340 5353 #endif … … 5759 5772 m_pcEntropyCoder->encodeSkipFlag(pcCU, 0, true); 5760 5773 m_pcEntropyCoder->encodeMergeIndex( pcCU, 0, true ); 5761 #if H_3D_ARP5774 #if NH_3D_ARP 5762 5775 m_pcEntropyCoder->encodeARPW( pcCU, 0 ); 5763 5776 #endif 5764 #if H_3D_IC5777 #if NH_3D_IC 5765 5778 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true ); 5766 5779 #endif … … 5855 5868 const Double zeroCost = (pcCU->isLosslessCoded( 0 )) ? (nonZeroCost+1) : (m_pcRdCost->calcRdCost( zeroResiBits, zeroDistortion )); 5856 5869 #endif 5857 #if H_3D_SPIVMP5858 if ( dZeroCost < dCost || pcCU->getQtRootCbf(0)==0)5870 #if NH_3D_SPIVMP 5871 if ( zeroCost < nonZeroCost || pcCU->getQtRootCbf(0)==0) 5859 5872 #else 5860 5873 if ( zeroCost < nonZeroCost || !pcCU->getQtRootCbf(0) ) … … 7078 7091 m_pcEntropyCoder->encodeSkipFlag(pcCU, 0, true); 7079 7092 m_pcEntropyCoder->encodeMergeIndex(pcCU, 0, true); 7080 #if H_3D_ARP7093 #if NH_3D_ARP 7081 7094 m_pcEntropyCoder->encodeARPW( pcCU, 0 ); 7082 7095 #endif 7083 #if H_3D_IC7096 #if NH_3D_IC 7084 7097 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true ); 7085 7098 #endif … … 7105 7118 m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true ); 7106 7119 #endif 7107 #if H_3D_ARP7120 #if NH_3D_ARP 7108 7121 m_pcEntropyCoder->encodeARPW( pcCU , 0 ); 7109 7122 #endif 7110 #if H_3D_IC7123 #if NH_3D_IC 7111 7124 m_pcEntropyCoder->encodeICFlag( pcCU, 0, true ); 7112 7125 #endif 7113 #if H_3D7126 #if NH_3D_DBBP 7114 7127 m_pcEntropyCoder->encodeDBBPFlag( pcCU, 0, true ); 7115 7128 #endif
Note: See TracChangeset for help on using the changeset viewer.