Changeset 1287 in 3DVCSoftware for branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncSearch.cpp
- Timestamp:
- 20 Jul 2015, 14:13:33 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncSearch.cpp
r1283 r1287 116 116 117 117 TEncSearch::TEncSearch() 118 : m_puhQTTempTrIdx(NULL) 119 , m_pcQTTempTComYuv(NULL) 120 , m_pcEncCfg (NULL) 121 , m_pcTrQuant (NULL) 122 , m_pcRdCost (NULL) 123 , m_pcEntropyCoder (NULL) 124 , m_iSearchRange (0) 125 , m_bipredSearchRange (0) 126 , m_iFastSearch (0) 127 , m_pppcRDSbacCoder (NULL) 128 , m_pcRDGoOnSbacCoder (NULL) 129 , m_pTempPel (NULL) 130 , m_puiDFilter (NULL) 131 , m_isInitialized (false) 118 132 { 119 133 for (UInt ch=0; ch<MAX_NUM_COMPONENT; ch++) … … 134 148 m_puhQTTempTransformSkipFlag[ch] = NULL; 135 149 } 136 m_puhQTTempTrIdx = NULL; 137 m_pcQTTempTComYuv = NULL; 138 m_pcEncCfg = NULL; 139 m_pcEntropyCoder = NULL; 140 m_pTempPel = NULL; 150 151 for (Int i=0; i<MAX_NUM_REF_LIST_ADAPT_SR; i++) 152 { 153 memset (m_aaiAdaptSR[i], 0, MAX_IDX_ADAPT_SR * sizeof (Int)); 154 } 155 for (Int i=0; i<AMVP_MAX_NUM_CANDS+1; i++) 156 { 157 memset (m_auiMVPIdxCost[i], 0, (AMVP_MAX_NUM_CANDS+1) * sizeof (UInt) ); 158 } 159 141 160 setWpScalingDistParam( NULL, -1, REF_PIC_LIST_X ); 142 161 } 143 162 144 163 145 146 147 TEncSearch::~TEncSearch() 164 Void TEncSearch::destroy() 148 165 { 166 assert (m_isInitialized); 149 167 if ( m_pTempPel ) 150 168 { … … 197 215 198 216 m_tmpYuvPred.destroy(); 217 m_isInitialized = false; 218 } 219 220 TEncSearch::~TEncSearch() 221 { 222 if (m_isInitialized) 223 { 224 destroy(); 225 } 199 226 } 200 227 … … 216 243 ) 217 244 { 245 assert (!m_isInitialized); 218 246 m_pcEncCfg = pcEncCfg; 219 247 m_pcTrQuant = pcTrQuant; … … 296 324 m_pcQTTempTransformSkipTComYuv.create( maxCUWidth, maxCUHeight, pcEncCfg->getChromaFormatIdc() ); 297 325 m_tmpYuvPred.create(MAX_CU_SIZE, MAX_CU_SIZE, pcEncCfg->getChromaFormatIdc()); 326 m_isInitialized = true; 298 327 } 299 328 … … 1224 1253 1225 1254 //===== init availability pattern ===== 1226 Bool bAboveAvail = false;1227 Bool bLeftAvail = false;1228 1229 1255 DEBUG_STRING_NEW(sTemp) 1230 1256 … … 1235 1261 const Bool bUseFilteredPredictions=TComPrediction::filteringIntraReferenceSamples(compID, uiChFinalMode, uiWidth, uiHeight, chFmt, sps.getSpsRangeExtension().getIntraSmoothingDisabledFlag()); 1236 1262 1237 initIntraPatternChType( rTu, bAboveAvail, bLeftAvail,compID, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sDebug) );1263 initIntraPatternChType( rTu, compID, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sDebug) ); 1238 1264 1239 1265 //===== get prediction signal ===== … … 1246 1272 { 1247 1273 #endif 1248 predIntraAng( compID, uiChFinalMode, piOrg, uiStride, piPred, uiStride, rTu, b AboveAvail, bLeftAvail, bUseFilteredPredictions );1274 predIntraAng( compID, uiChFinalMode, piOrg, uiStride, piPred, uiStride, rTu, bUseFilteredPredictions ); 1249 1275 #if NH_3D_DMM 1250 1276 } … … 1575 1601 checkTransformSkip &= (!pcCU->getCUTransquantBypass(0)); 1576 1602 1603 assert (rTu.ProcessComponentSection(COMPONENT_Y)); 1604 const UInt totalAdjustedDepthChan = rTu.GetTransformDepthTotalAdj(COMPONENT_Y); 1605 1577 1606 if ( m_pcEncCfg->getUseTransformSkipFast() ) 1578 1607 { … … 1609 1638 } 1610 1639 1611 if (rTu.ProcessComponentSection(COMPONENT_Y)) 1612 { 1613 const UInt totalAdjustedDepthChan = rTu.GetTransformDepthTotalAdj(COMPONENT_Y); 1614 pcCU->setTransformSkipSubParts ( modeId, COMPONENT_Y, uiAbsPartIdx, totalAdjustedDepthChan ); 1615 1616 xIntraCodingTUBlock( pcOrgYuv, pcPredYuv, pcResiYuv, resiLumaSingle, false, singleDistTmpLuma, COMPONENT_Y, rTu DEBUG_STRING_PASS_INTO(sModeString), default0Save1Load2 ); 1617 } 1640 1641 pcCU->setTransformSkipSubParts ( modeId, COMPONENT_Y, uiAbsPartIdx, totalAdjustedDepthChan ); 1642 xIntraCodingTUBlock( pcOrgYuv, pcPredYuv, pcResiYuv, resiLumaSingle, false, singleDistTmpLuma, COMPONENT_Y, rTu DEBUG_STRING_PASS_INTO(sModeString), default0Save1Load2 ); 1643 1618 1644 singleCbfTmpLuma = pcCU->getCbf( uiAbsPartIdx, COMPONENT_Y, uiTrDepth ); 1619 1645 … … 1669 1695 } 1670 1696 1671 if (rTu.ProcessComponentSection(COMPONENT_Y)) 1672 { 1673 const UInt totalAdjustedDepthChan = rTu.GetTransformDepthTotalAdj(COMPONENT_Y); 1674 pcCU ->setTransformSkipSubParts ( bestModeId[COMPONENT_Y], COMPONENT_Y, uiAbsPartIdx, totalAdjustedDepthChan ); 1675 } 1697 pcCU ->setTransformSkipSubParts ( bestModeId[COMPONENT_Y], COMPONENT_Y, uiAbsPartIdx, totalAdjustedDepthChan ); 1676 1698 1677 1699 if(bestModeId[COMPONENT_Y] == firstCheckId) 1678 1700 { 1679 1701 xLoadIntraResultQT(COMPONENT_Y, rTu ); 1680 if (rTu.ProcessComponentSection(COMPONENT_Y)) 1681 { 1682 pcCU->setCbfSubParts ( uiSingleCbfLuma << uiTrDepth, COMPONENT_Y, uiAbsPartIdx, rTu.GetTransformDepthTotalAdj(COMPONENT_Y) ); 1683 } 1702 pcCU->setCbfSubParts ( uiSingleCbfLuma << uiTrDepth, COMPONENT_Y, uiAbsPartIdx, rTu.GetTransformDepthTotalAdj(COMPONENT_Y) ); 1684 1703 1685 1704 m_pcRDGoOnSbacCoder->load( m_pppcRDSbacCoder[ uiFullDepth ][ CI_TEMP_BEST ] ); … … 1695 1714 //----- code luma/chroma block with given intra prediction mode and store Cbf----- 1696 1715 dSingleCost = 0.0; 1697 1698 if (rTu.ProcessComponentSection(COMPONENT_Y))1699 {1700 const UInt totalAdjustedDepthChan = rTu.GetTransformDepthTotalAdj(COMPONENT_Y);1701 pcCU ->setTransformSkipSubParts ( 0, COMPONENT_Y, uiAbsPartIdx, totalAdjustedDepthChan );1702 }1703 1716 #if NH_3D_ENC_DEPTH 1704 1717 xIntraCodingTUBlock( pcOrgYuv, pcPredYuv, pcResiYuv, resiLumaSingle, false, uiSingleDistLuma, COMPONENT_Y, rTu DEBUG_STRING_PASS_INTO(sDebug), zeroResiFlag ); 1705 1718 #else 1719 pcCU ->setTransformSkipSubParts ( 0, COMPONENT_Y, uiAbsPartIdx, totalAdjustedDepthChan ); 1706 1720 xIntraCodingTUBlock( pcOrgYuv, pcPredYuv, pcResiYuv, resiLumaSingle, false, uiSingleDistLuma, COMPONENT_Y, rTu DEBUG_STRING_PASS_INTO(sDebug)); 1707 1721 #endif … … 1835 1849 pcCU->setTrIdxSubParts( uiTrDepth, uiAbsPartIdx, uiFullDepth ); 1836 1850 const TComRectangle &tuRect=rTu.getRect(COMPONENT_Y); 1837 const UInt totalAdjustedDepthChan = rTu.GetTransformDepthTotalAdj(COMPONENT_Y);1838 1851 pcCU->setCbfSubParts ( uiSingleCbfLuma << uiTrDepth, COMPONENT_Y, uiAbsPartIdx, totalAdjustedDepthChan ); 1839 1852 pcCU ->setTransformSkipSubParts ( bestModeId[COMPONENT_Y], COMPONENT_Y, uiAbsPartIdx, totalAdjustedDepthChan ); … … 1889 1902 //===== reconstruction ===== 1890 1903 1891 Bool bAboveAvail = false;1892 Bool bLeftAvail = false;1893 1894 1904 TComTURecurse rTu(pcCU, 0); 1895 1905 const ChromaFormat chFmt = rTu.GetChromaFormat(); … … 1898 1908 { 1899 1909 const Bool bUseFilteredPredictions=TComPrediction::filteringIntraReferenceSamples(COMPONENT_Y, VER_IDX, uiWidth, uiHeight, chFmt, pcCU->getSlice()->getSPS()->getSpsRangeExtension().getIntraSmoothingDisabledFlag()); 1900 initIntraPatternChType( rTu, bAboveAvail, bLeftAvail,COMPONENT_Y, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) );1901 predIntraAng( COMPONENT_Y, VER_IDX, 0, uiStride, piPred, uiStride, rTu, b AboveAvail, bLeftAvail, bUseFilteredPredictions );1910 initIntraPatternChType( rTu, COMPONENT_Y, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) ); 1911 predIntraAng( COMPONENT_Y, VER_IDX, 0, uiStride, piPred, uiStride, rTu, bUseFilteredPredictions ); 1902 1912 } 1903 1913 else if ( uiPredMode == 1 ) 1904 1914 { 1905 1915 const Bool bUseFilteredPredictions=TComPrediction::filteringIntraReferenceSamples(COMPONENT_Y, HOR_IDX, uiWidth, uiHeight, chFmt, pcCU->getSlice()->getSPS()->getSpsRangeExtension().getIntraSmoothingDisabledFlag()); 1906 initIntraPatternChType( rTu, bAboveAvail, bLeftAvail,COMPONENT_Y, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) );1907 predIntraAng( COMPONENT_Y, HOR_IDX, 0, uiStride, piPred, uiStride, rTu, b AboveAvail, bLeftAvail, bUseFilteredPredictions );1916 initIntraPatternChType( rTu, COMPONENT_Y, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) ); 1917 predIntraAng( COMPONENT_Y, HOR_IDX, 0, uiStride, piPred, uiStride, rTu, bUseFilteredPredictions ); 1908 1918 } 1909 1919 else if ( uiPredMode == 2 ) … … 2019 2029 TComTURecurse tuRecurseWithPU(tuRecurseCU, false, TComTU::DONT_SPLIT); 2020 2030 2021 Bool bAboveAvail = false; 2022 Bool bLeftAvail = false; 2023 initIntraPatternChType( tuRecurseWithPU, bAboveAvail, bLeftAvail, COMPONENT_Y, false DEBUG_STRING_PASS_INTO(sTemp) ); 2031 initIntraPatternChType( tuRecurseWithPU, COMPONENT_Y, false DEBUG_STRING_PASS_INTO(sTemp) ); 2024 2032 2025 2033 // get partition … … 2075 2083 2076 2084 //===== init pattern for luma prediction ===== 2077 Bool bAboveAvail = false;2078 Bool bLeftAvail = false;2079 2085 2080 initIntraPatternChType( tuRecurseWithPU, bAboveAvail, bLeftAvail,COMPONENT_Y, bUseFilter DEBUG_STRING_PASS_INTO(sTemp2) );2086 initIntraPatternChType( tuRecurseWithPU, COMPONENT_Y, bUseFilter DEBUG_STRING_PASS_INTO(sTemp2) ); 2081 2087 2082 predIntraAng( COMPONENT_Y, uiLumaPredMode, piOrgTU, uiStrideTU, piPredTU, uiStrideTU, tuRecurseWithPU, b AboveAvail, bLeftAvail, bUseFilter );2088 predIntraAng( COMPONENT_Y, uiLumaPredMode, piOrgTU, uiStrideTU, piPredTU, uiStrideTU, tuRecurseWithPU, bUseFilter ); 2083 2089 2084 2090 // copy for prediction of next part … … 2858 2864 //{ 2859 2865 //===== init pattern for luma prediction ===== 2860 Bool bAboveAvail = false;2861 Bool bLeftAvail = false;2862 2866 DEBUG_STRING_NEW(sTemp2) 2863 2867 … … 2867 2871 Int numModesForFullRD = m_pcEncCfg->getFastUDIUseMPMEnabled()?g_aucIntraModeNumFast_UseMPM[ uiWidthBit ] : g_aucIntraModeNumFast_NotUseMPM[ uiWidthBit ]; 2868 2872 2869 if (tuRecurseWithPU.ProcessComponentSection(COMPONENT_Y)) 2870 { 2871 initIntraPatternChType( tuRecurseWithPU, bAboveAvail, bLeftAvail, COMPONENT_Y, true DEBUG_STRING_PASS_INTO(sTemp2) ); 2872 } 2873 // this should always be true 2874 assert (tuRecurseWithPU.ProcessComponentSection(COMPONENT_Y)); 2875 initIntraPatternChType( tuRecurseWithPU, COMPONENT_Y, true DEBUG_STRING_PASS_INTO(sTemp2) ); 2873 2876 #if NH_3D_ENC_DEPTH 2874 2877 if( bOnlyIVP ) … … 2917 2920 const Bool bUseFilter=TComPrediction::filteringIntraReferenceSamples(COMPONENT_Y, uiMode, puRect.width, puRect.height, chFmt, sps.getSpsRangeExtension().getIntraSmoothingDisabledFlag()); 2918 2921 2919 predIntraAng( COMPONENT_Y, uiMode, piOrg, uiStride, piPred, uiStride, tuRecurseWithPU, b AboveAvail, bLeftAvail, bUseFilter, TComPrediction::UseDPCMForFirstPassIntraEstimation(tuRecurseWithPU, uiMode) );2922 predIntraAng( COMPONENT_Y, uiMode, piOrg, uiStride, piPred, uiStride, tuRecurseWithPU, bUseFilter, TComPrediction::UseDPCMForFirstPassIntraEstimation(tuRecurseWithPU, uiMode) ); 2920 2923 #if NH_3D_VSO // M34 2921 2924 Dist uiSad; … … 6366 6369 nonCoeffDist = m_pcRdCost->getDistPart( channelBitDepth, m_pcQTTempTComYuv[uiQTTempAccessLayer].getAddrPix( compID, tuCompRect.x0, tuCompRect.y0 ), 6367 6370 m_pcQTTempTComYuv[uiQTTempAccessLayer].getStride( compID ), pcResi->getAddrPix( compID, tuCompRect.x0, tuCompRect.y0 ), 6368 pcResi->getStride(compID), tuCompRect.width, tuCompRect.height, compID); // initialized with zero residual d estortion6371 pcResi->getStride(compID), tuCompRect.width, tuCompRect.height, compID); // initialized with zero residual distortion 6369 6372 } 6370 6373 else … … 6388 6391 #endif 6389 6392 nonCoeffDist = m_pcRdCost->getDistPart( channelBitDepth, m_pTempPel, tuCompRect.width, pcResi->getAddrPix( compID, tuCompRect.x0, tuCompRect.y0 ), 6390 pcResi->getStride(compID), tuCompRect.width, tuCompRect.height, compID); // initialized with zero residual d estortion6393 pcResi->getStride(compID), tuCompRect.width, tuCompRect.height, compID); // initialized with zero residual distortion 6391 6394 6392 6395 } … … 6412 6415 if((puiZeroDist != NULL) && isFirstMode) 6413 6416 { 6414 *puiZeroDist += nonCoeffDist; // initialized with zero residual d estortion6417 *puiZeroDist += nonCoeffDist; // initialized with zero residual distortion 6415 6418 } 6416 6419
Note: See TracChangeset for help on using the changeset viewer.