- Timestamp:
- 20 Jul 2015, 14:13:33 (10 years ago)
- Location:
- branches/HTM-14.1-update-dev1
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.1-update-dev1/doc/Doxyfile
r1200 r1287 39 39 # control system is used. 40 40 41 PROJECT_NUMBER = HM-16. 441 PROJECT_NUMBER = HM-16.6 42 42 43 43 # Using the PROJECT_BRIEF tag one can provide an optional one line description -
branches/HTM-14.1-update-dev1/doc/software-manual.tex
r1200 r1287 187 187 \begin{abstract} 188 188 This document is a user manual describing usage of reference software 189 for the HEVC project. It applies to version 16. 4189 for the HEVC project. It applies to version 16.6 190 190 of the software. 191 191 \end{abstract} … … 677 677 \\ 678 678 679 \Option{SummaryOutFilename} & 680 %\ShortOption{\None} & 681 \Default{false} & 682 Filename to use for producing summary output file. If empty, do not produce a file. 683 \\ 684 685 \Option{SummaryPicFilenameBase} & 686 %\ShortOption{\None} & 687 \Default{false} & 688 Base filename to use for producing summary picture output files. The actual filenames used will have I.txt, P.txt and B.txt appended. If empty, do not produce a file. 689 \\ 690 691 \Option{SummaryVerboseness} & 692 %\ShortOption{\None} & 693 \Default{false} & 694 Specifies the level of the verboseness of the text output. 695 \\ 696 679 697 \Option{CabacZeroWordPaddingEnabled} & 680 698 %\ShortOption{\None} & … … 751 769 \\ 752 770 771 \Option{ClipInputVideoToRec709Range} & 772 %\ShortOption{\None} & 773 \Default{0} & 774 If 1 then clip input video to the Rec. 709 Range on loading when InternalBitDepth is less than MSBExtendedBitDepth. 775 \\ 776 777 \Option{ClipOutputVideoToRec709Range} & 778 %\ShortOption{\None} & 779 \Default{0} & 780 If 1 then clip output video to the Rec. 709 Range on saving when OutputBitDepth is less than InternalBitDepth. 781 \\ 782 783 \Option{EfficientFieldIRAPEnabled} & 784 %\ShortOption{\None} & 785 \Default{1} & 786 Enable to code fields in a specific, potentially more efficient, order. 787 \\ 788 789 \Option{HarmonizeGopFirstFieldCoupleEnabled} & 790 %\ShortOption{\None} & 791 \Default{1} & 792 Enables harmonization of Gop first field couple. 793 \\ 794 753 795 \end{OptionTableNoShorthand} 754 796 … … 810 852 \Default{false} & 811 853 For --profile=main-RExt, specifies the value of general_intra_constraint_flag to use for RExt profiles. 854 \\ 855 856 \Option{OnePictureOnlyConstraintFlag} & 857 %\ShortOption{\None} & 858 \Default{false} & 859 For --profile=main-RExt, specifies the value of general_one_picture_only_constraint_flag to use for RExt profiles. 812 860 \\ 813 861 … … 976 1024 Specifies the search range used for bi-prediction refinement in motion 977 1025 estimation. 1026 \\ 1027 1028 \Option{ClipForBiPredMEEnabled} & 1029 %\ShortOption{\None} & 1030 \Default{0} & 1031 Enables clipping in the Bi-Pred ME, which prevents values over- or under-flowing. It is usually disabled to reduce encoder run-time. 1032 \\ 1033 1034 \Option{FastMEAssumingSmootherMVEnabled} & 1035 %\ShortOption{\None} & 1036 \Default{0} & 1037 Enables fast ME assuming a smoother MV. 978 1038 \\ 979 1039 … … 1014 1074 \\ 1015 1075 1076 \Option{DisableIntraInInter} & 1077 %\ShortOption{\None} & 1078 \Default{0} & 1079 Flag to disable intra PUs in inter slices. 1080 \\ 1016 1081 1017 1082 \end{OptionTableNoShorthand} … … 1339 1404 \\ 1340 1405 1341 \Option{DeblockingFilterControlPresent}&1342 %\ShortOption{\None}&1343 \Default{false}&1344 Enables or disables the presence of the deblocking filter control1345 parameters in the picture parameter set and in the slice segment header.1346 When disabled, the default deblocking filter parameters are used.1347 \\1348 1349 1406 \Option{LoopFilterOffsetInPPS}& 1350 1407 %\ShortOption{\None}& … … 1377 1434 %\ShortOption{\None}& 1378 1435 \Default{false}& 1379 Enables or disables the use of a deblocking filter metric to evaluate the suitability of deblocking.. 1436 Enables or disables the use of a deblocking filter metric to evaluate the suitability of deblocking. If enabled then 1437 LoopFilterOffsetInPPS and LoopFilterDisable must be 0. 1380 1438 \\ 1381 1439 … … 1408 1466 \\ 1409 1467 1468 \Option{TestSAODisableAtPictureLevel} & 1469 %\ShortOption{\None} & 1470 \Default{false} & 1471 Enables the testing of disabling SAO at the picture level after having analysed all blocks. 1472 \\ 1473 1474 \Option{SaoEncodingRate} & 1475 %\ShortOption{\None} & 1476 \Default{0.75} & 1477 When >0 SAO early picture termination is enabled for luma and chroma. 1478 \\ 1479 1480 \Option{SaoEncodingRateChroma} & 1481 %\ShortOption{\None} & 1482 \Default{0.5} & 1483 The SAO early picture termination rate to use for chroma (when m_SaoEncodingRate is >0). If <=0, use results for luma. 1484 \\ 1485 1410 1486 \Option{SAOLcuBoundary} & 1411 1487 %\ShortOption{\None} & … … 1421 1497 prediction only permits samples from intra blocks in the same slice as the 1422 1498 current block to be used for intra prediction. 1499 \\ 1500 1501 \Option{FastUDIUseMPMEnabled} & 1502 %\ShortOption{\None} & 1503 \Default{true} & 1504 If enabled, adapt intra direction search, accounting for MPM 1505 \\ 1506 1507 \Option{FastMEForGenBLowDelayEnabled} & 1508 %\ShortOption{\None} & 1509 \Default{true} & 1510 If enabled use a fast ME for generalised B Low Delay slices 1511 \\ 1512 1513 \Option{UseBLambdaForNonKeyLowDelayPictures} & 1514 %\ShortOption{\None} & 1515 \Default{true} & 1516 Enables use of B-Lambda for non-key low-delay pictures 1423 1517 \\ 1424 1518 … … 2514 2608 \\ 2515 2609 2516 HB_LAMBDA_FOR_LDC &2517 on &2518 use of B-style lambda for non-key pictures in low-delay mode2519 \\2520 2521 GPB_SIMPLE &2522 on &2523 Fast estimation of generalized B in low-delay mode2524 \\2525 2526 GPB_SIMPLE_UNI &2527 on &2528 Fast estimation of generalized B in low-delay mode for uni-direction2529 \\2530 2531 FASTME_SMOOTHER_MV &2532 on &2533 Fast ME using smoother MV assumption2534 \\2535 2536 2610 ADAPT_SR_SCALE & 2537 2611 on & 2538 2612 division factor for adaptive search range 2539 \\2540 2541 CLIP_TO_709_RANGE &2542 off &2543 2613 \\ 2544 2614 … … 2689 2759 \\ 2690 2760 2761 \Option{ClipOutputVideoToRec709Range} & 2762 %\ShortOption{\None} & 2763 \Default{0} & 2764 If 1 then clip output video to the Rec. 709 Range on saving when OutputBitDepth is less than InternalBitDepth. 2765 \\ 2766 2691 2767 \end{OptionTableNoShorthand} 2692 2768 -
branches/HTM-14.1-update-dev1/source/App/TAppEncoder/TAppEncCfg.cpp
r1252 r1287 1008 1008 ("MaxCuDQPDepth,-dqd", m_iMaxCuDQPDepth, 0, "max depth for a minimum CuDQP") 1009 1009 ("MaxCUChromaQpAdjustmentDepth", m_diffCuChromaQpOffsetDepth, -1, "Maximum depth for CU chroma Qp adjustment - set less than 0 to disable") 1010 ("FastDeltaQP", m_bFastDeltaQP, false, "Fast Delta QP Algorithm") 1010 1011 1011 1012 ("CbQpOffset,-cbqpofs", m_cbQpOffset, 0, "Chroma Cb QP Offset") … … 2101 2102 2102 2103 m_uiMaxTotalCUDepth = m_uiMaxCUDepth + uiAddCUDepth + getMaxCUDepthOffset(m_chromaFormatIDC, m_uiQuadtreeTULog2MinSize); // if minimum TU larger than 4x4, allow for additional part indices for 4:2:2 SubTUs. 2103 uiAddCUDepth++;2104 2104 m_uiLog2DiffMaxMinCodingBlockSize = m_uiMaxCUDepth - 1; 2105 2105 … … 2145 2145 #define xConfirmPara(a,b) check_failed |= confirmPara(a,b) 2146 2146 2147 xConfirmPara(m_pchBitstreamFile==NULL, "A bitstream file name must be specified (BitstreamFile)"); 2147 2148 const UInt maxBitDepth=(m_chromaFormatIDC==CHROMA_400) ? m_internalBitDepth[CHANNEL_TYPE_LUMA] : std::max(m_internalBitDepth[CHANNEL_TYPE_LUMA], m_internalBitDepth[CHANNEL_TYPE_CHROMA]); 2148 2149 xConfirmPara(m_bitDepthConstraint<maxBitDepth, "The internalBitDepth must not be greater than the bitDepthConstraint value"); … … 2541 2542 #endif 2542 2543 } 2544 xConfirmPara( m_uiMaxCUDepth < 1, "MaxPartitionDepth must be greater than zero"); 2543 2545 xConfirmPara( (m_uiMaxCUWidth >> m_uiMaxCUDepth) < 4, "Minimum partition width size should be larger than or equal to 8"); 2544 2546 xConfirmPara( (m_uiMaxCUHeight >> m_uiMaxCUDepth) < 4, "Minimum partition height size should be larger than or equal to 8"); -
branches/HTM-14.1-update-dev1/source/App/TAppEncoder/TAppEncCfg.h
r1200 r1287 247 247 Int m_iMaxCuDQPDepth; ///< Max. depth for a minimum CuDQPSize (0:default) 248 248 Int m_diffCuChromaQpOffsetDepth; ///< If negative, then do not apply chroma qp offsets. 249 Bool m_bFastDeltaQP; ///< Fast Delta QP (false:default) 249 250 250 251 Int m_cbQpOffset; ///< Chroma Cb QP Offset (0:default) -
branches/HTM-14.1-update-dev1/source/App/TAppEncoder/TAppEncTop.cpp
r1279 r1287 433 433 //====== Tool list ======== 434 434 m_cTEncTop.setDeltaQpRD ( m_uiDeltaQpRD ); 435 m_cTEncTop.setFastDeltaQp ( m_bFastDeltaQP ); 435 436 m_cTEncTop.setUseASR ( m_bUseASR ); 436 437 m_cTEncTop.setUseHADME ( m_bUseHADME ); -
branches/HTM-14.1-update-dev1/source/Lib/TLibCommon/CommonDef.h
r1279 r1287 73 73 #if NH_MV 74 74 #define NV_VERSION "14.1" ///< Current software version 75 #define HM_VERSION "16. 5" ///<76 #else 77 #define NV_VERSION "16. 5" ///< Current software version75 #define HM_VERSION "16.6" ///< 76 #else 77 #define NV_VERSION "16.6" ///< Current software version 78 78 #endif 79 79 // ==================================================================================================================== -
branches/HTM-14.1-update-dev1/source/Lib/TLibCommon/TComPattern.cpp
r1200 r1287 113 113 114 114 // TODO: move this function to TComPrediction.cpp. 115 Void TComPrediction::initIntraPatternChType( TComTU &rTu, Bool& bAbove, Bool& bLeft,const ComponentID compID, const Bool bFilterRefSamples DEBUG_STRING_FN_DECLARE(sDebug))115 Void TComPrediction::initIntraPatternChType( TComTU &rTu, const ComponentID compID, const Bool bFilterRefSamples DEBUG_STRING_FN_DECLARE(sDebug)) 116 116 { 117 117 const ChannelType chType = toChannelType(compID); … … 151 151 iNumIntraNeighbor += isLeftAvailable ( pcCU, uiPartIdxLT, uiPartIdxLB, (bNeighborFlags + iLeftUnits - 1) ); 152 152 iNumIntraNeighbor += isBelowLeftAvailable ( pcCU, uiPartIdxLT, uiPartIdxLB, (bNeighborFlags + iLeftUnits - 1 - iTUHeightInUnits) ); 153 154 bAbove = true;155 bLeft = true;156 153 157 154 const UInt uiROIWidth = uiTuWidth2+1; -
branches/HTM-14.1-update-dev1/source/Lib/TLibCommon/TComPrediction.cpp
r1279 r1287 216 216 // Function for calculating DC value of the reference samples used in Intra prediction 217 217 //NOTE: Bit-Limit - 25-bit source 218 Pel TComPrediction::predIntraGetPredValDC( const Pel* pSrc, Int iSrcStride, UInt iWidth, UInt iHeight , Bool bAbove, Bool bLeft)218 Pel TComPrediction::predIntraGetPredValDC( const Pel* pSrc, Int iSrcStride, UInt iWidth, UInt iHeight) 219 219 { 220 220 assert(iWidth > 0 && iHeight > 0); … … 222 222 Pel pDcVal; 223 223 224 if (bAbove) 225 { 226 for (iInd = 0;iInd < iWidth;iInd++) 227 { 228 iSum += pSrc[iInd-iSrcStride]; 229 } 230 } 231 if (bLeft) 232 { 233 for (iInd = 0;iInd < iHeight;iInd++) 234 { 235 iSum += pSrc[iInd*iSrcStride-1]; 236 } 237 } 238 239 if (bAbove && bLeft) 240 { 241 pDcVal = (iSum + iWidth) / (iWidth + iHeight); 242 } 243 else if (bAbove) 244 { 245 pDcVal = (iSum + iWidth/2) / iWidth; 246 } 247 else if (bLeft) 248 { 249 pDcVal = (iSum + iHeight/2) / iHeight; 250 } 251 else 252 { 253 pDcVal = pSrc[-1]; // Default DC value already calculated and placed in the prediction array if no neighbors are available 254 } 224 for (iInd = 0;iInd < iWidth;iInd++) 225 { 226 iSum += pSrc[iInd-iSrcStride]; 227 } 228 for (iInd = 0;iInd < iHeight;iInd++) 229 { 230 iSum += pSrc[iInd*iSrcStride-1]; 231 } 232 233 pDcVal = (iSum + iWidth) / (iWidth + iHeight); 255 234 256 235 return pDcVal; … … 287 266 Pel* pTrueDst, Int dstStrideTrue, 288 267 UInt uiWidth, UInt uiHeight, ChannelType channelType, 289 UInt dirMode, Bool blkAboveAvailable, Bool blkLeftAvailable 290 , const Bool bEnableEdgeFilters 268 UInt dirMode, const Bool bEnableEdgeFilters 291 269 ) 292 270 { … … 301 279 if (modeDC) 302 280 { 303 const Pel dcval = predIntraGetPredValDC(pSrc, srcStride, width, height , blkAboveAvailable, blkLeftAvailable);281 const Pel dcval = predIntraGetPredValDC(pSrc, srcStride, width, height); 304 282 305 283 for (Int y=height;y>0;y--, pTrueDst+=dstStrideTrue) … … 332 310 Pel refLeft[2*MAX_CU_SIZE+1]; 333 311 334 // Initiali se the Main and Left reference array.312 // Initialize the Main and Left reference array. 335 313 if (intraPredAngle < 0) 336 314 { … … 445 423 } 446 424 447 Void TComPrediction::predIntraAng( const ComponentID compID, UInt uiDirMode, Pel* piOrg /* Will be null for decoding */, UInt uiOrgStride, Pel* piPred, UInt uiStride, TComTU &rTu, Bool bAbove, Bool bLeft,const Bool bUseFilteredPredSamples, const Bool bUseLosslessDPCM )425 Void TComPrediction::predIntraAng( const ComponentID compID, UInt uiDirMode, Pel* piOrg /* Will be null for decoding */, UInt uiOrgStride, Pel* piPred, UInt uiStride, TComTU &rTu, const Bool bUseFilteredPredSamples, const Bool bUseLosslessDPCM ) 448 426 { 449 427 const ChannelType channelType = toChannelType(compID); … … 519 497 const Int channelsBitDepthForPrediction = rTu.getCU()->getSlice()->getSPS()->getBitDepth(channelType); 520 498 #endif 521 xPredIntraAng( channelsBitDepthForPrediction, ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight, channelType, uiDirMode, bAbove, bLeft,enableEdgeFilters );522 523 if( ( uiDirMode == DC_IDX ) && bAbove && bLeft)499 xPredIntraAng( channelsBitDepthForPrediction, ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight, channelType, uiDirMode, enableEdgeFilters ); 500 501 if( uiDirMode == DC_IDX ) 524 502 { 525 503 xDCPredFiltering( ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight, channelType ); -
branches/HTM-14.1-update-dev1/source/Lib/TLibCommon/TComPrediction.h
r1279 r1287 98 98 TComYuv m_cYuvDepthOnVsp; 99 99 #endif 100 101 Void xPredIntraAng ( Int bitDepth, const Pel* pSrc, Int srcStride, Pel* pDst, Int dstStride, UInt width, UInt height, ChannelType channelType, UInt dirMode, Bool blkAboveAvailable, Bool blkLeftAvailable, const Bool bEnableEdgeFilters ); 100 Void xPredIntraAng ( Int bitDepth, const Pel* pSrc, Int srcStride, Pel* pDst, Int dstStride, UInt width, UInt height, ChannelType channelType, UInt dirMode, const Bool bEnableEdgeFilters ); 102 101 Void xPredIntraPlanar ( const Pel* pSrc, Int srcStride, Pel* rpDst, Int dstStride, UInt width, UInt height ); 103 102 … … 159 158 160 159 // Angular Intra 161 Void predIntraAng ( const ComponentID compID, UInt uiDirMode, Pel *piOrg /* Will be null for decoding */, UInt uiOrgStride, Pel* piPred, UInt uiStride, TComTU &rTu, Bool bAbove, Bool bLeft, const Bool bUseFilteredPredSamples, const Bool bUseLosslessDPCM = false ); 162 160 Void predIntraAng ( const ComponentID compID, UInt uiDirMode, Pel *piOrg /* Will be null for decoding */, UInt uiOrgStride, Pel* piPred, UInt uiStride, TComTU &rTu, const Bool bUseFilteredPredSamples, const Bool bUseLosslessDPCM = false ); 161 162 Pel predIntraGetPredValDC ( const Pel* pSrc, Int iSrcStride, UInt iWidth, UInt iHeight); 163 163 #if NH_3D_DMM 164 164 Void predIntraLumaDmm ( TComDataCU* pcCU, UInt uiAbsPartIdx, DmmID dmmType, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight ); … … 187 187 /// set parameters from CU data for accessing intra data 188 188 Void initIntraPatternChType ( TComTU &rTu, 189 Bool& bAbove,190 Bool& bLeft,191 189 const ComponentID compID, const Bool bFilterRefSamples 192 190 DEBUG_STRING_FN_DECLARE(sDebug) -
branches/HTM-14.1-update-dev1/source/Lib/TLibCommon/TComSlice.cpp
r1279 r1287 56 56 , m_iAssociatedIRAP ( 0 ) 57 57 , m_iAssociatedIRAPType ( NAL_UNIT_INVALID ) 58 , m_p cRPS( 0 )59 , m_ LocalRPS ( )60 , m_ iBDidx ( 0 )58 , m_pRPS ( 0 ) 59 , m_localRPS ( ) 60 , m_rpsIdx ( 0 ) 61 61 , m_RefPicListModification ( ) 62 62 , m_eNalUnitType ( NAL_UNIT_CODED_SLICE_IDR_W_RADL ) … … 465 465 Int i; 466 466 467 for(i=0; i < m_p cRPS->getNumberOfNegativePictures(); i++)468 { 469 if(m_p cRPS->getUsed(i))470 { 471 pcRefPic = xGetRefPic(rcListPic, getPOC()+m_p cRPS->getDeltaPOC(i));467 for(i=0; i < m_pRPS->getNumberOfNegativePictures(); i++) 468 { 469 if(m_pRPS->getUsed(i)) 470 { 471 pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pRPS->getDeltaPOC(i)); 472 472 pcRefPic->setIsLongTerm(0); 473 473 pcRefPic->getPicYuvRec()->extendPicBorder(); … … 478 478 } 479 479 480 for(; i < m_p cRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures(); i++)481 { 482 if(m_p cRPS->getUsed(i))483 { 484 pcRefPic = xGetRefPic(rcListPic, getPOC()+m_p cRPS->getDeltaPOC(i));480 for(; i < m_pRPS->getNumberOfNegativePictures()+m_pRPS->getNumberOfPositivePictures(); i++) 481 { 482 if(m_pRPS->getUsed(i)) 483 { 484 pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pRPS->getDeltaPOC(i)); 485 485 pcRefPic->setIsLongTerm(0); 486 486 pcRefPic->getPicYuvRec()->extendPicBorder(); … … 491 491 } 492 492 493 for(i = m_p cRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures()+m_pcRPS->getNumberOfLongtermPictures()-1; i > m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures()-1 ; i--)494 { 495 if(m_p cRPS->getUsed(i))496 { 497 pcRefPic = xGetLongTermRefPic(rcListPic, m_p cRPS->getPOC(i), m_pcRPS->getCheckLTMSBPresent(i));493 for(i = m_pRPS->getNumberOfNegativePictures()+m_pRPS->getNumberOfPositivePictures()+m_pRPS->getNumberOfLongtermPictures()-1; i > m_pRPS->getNumberOfNegativePictures()+m_pRPS->getNumberOfPositivePictures()-1 ; i--) 494 { 495 if(m_pRPS->getUsed(i)) 496 { 497 pcRefPic = xGetLongTermRefPic(rcListPic, m_pRPS->getPOC(i), m_pRPS->getCheckLTMSBPresent(i)); 498 498 pcRefPic->setIsLongTerm(1); 499 499 pcRefPic->getPicYuvRec()->extendPicBorder(); … … 503 503 if(pcRefPic==NULL) 504 504 { 505 pcRefPic = xGetLongTermRefPic(rcListPic, m_p cRPS->getPOC(i), m_pcRPS->getCheckLTMSBPresent(i));506 } 507 pcRefPic->setCheckLTMSBPresent(m_p cRPS->getCheckLTMSBPresent(i));505 pcRefPic = xGetLongTermRefPic(rcListPic, m_pRPS->getPOC(i), m_pRPS->getCheckLTMSBPresent(i)); 506 } 507 pcRefPic->setCheckLTMSBPresent(m_pRPS->getCheckLTMSBPresent(i)); 508 508 } 509 509 … … 620 620 m_pocsInCurrRPSs.clear(); 621 621 #endif 622 for(i=0; i < m_p cRPS->getNumberOfNegativePictures(); i++)623 { 624 if(m_p cRPS->getUsed(i))625 { 626 pcRefPic = xGetRefPic(rcListPic, getPOC()+m_p cRPS->getDeltaPOC(i));622 for(i=0; i < m_pRPS->getNumberOfNegativePictures(); i++) 623 { 624 if(m_pRPS->getUsed(i)) 625 { 626 pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pRPS->getDeltaPOC(i)); 627 627 pcRefPic->setIsLongTerm(0); 628 628 pcRefPic->getPicYuvRec()->extendPicBorder(); … … 636 636 } 637 637 638 for(; i < m_p cRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures(); i++)639 { 640 if(m_p cRPS->getUsed(i))641 { 642 pcRefPic = xGetRefPic(rcListPic, getPOC()+m_p cRPS->getDeltaPOC(i));638 for(; i < m_pRPS->getNumberOfNegativePictures()+m_pRPS->getNumberOfPositivePictures(); i++) 639 { 640 if(m_pRPS->getUsed(i)) 641 { 642 pcRefPic = xGetRefPic(rcListPic, getPOC()+m_pRPS->getDeltaPOC(i)); 643 643 pcRefPic->setIsLongTerm(0); 644 644 pcRefPic->getPicYuvRec()->extendPicBorder(); … … 652 652 } 653 653 654 for(i = m_p cRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures()+m_pcRPS->getNumberOfLongtermPictures()-1; i > m_pcRPS->getNumberOfNegativePictures()+m_pcRPS->getNumberOfPositivePictures()-1 ; i--)655 { 656 if(m_p cRPS->getUsed(i))657 { 658 pcRefPic = xGetLongTermRefPic(rcListPic, m_p cRPS->getPOC(i), m_pcRPS->getCheckLTMSBPresent(i));654 for(i = m_pRPS->getNumberOfNegativePictures()+m_pRPS->getNumberOfPositivePictures()+m_pRPS->getNumberOfLongtermPictures()-1; i > m_pRPS->getNumberOfNegativePictures()+m_pRPS->getNumberOfPositivePictures()-1 ; i--) 655 { 656 if(m_pRPS->getUsed(i)) 657 { 658 pcRefPic = xGetLongTermRefPic(rcListPic, m_pRPS->getPOC(i), m_pRPS->getCheckLTMSBPresent(i)); 659 659 pcRefPic->setIsLongTerm(1); 660 660 pcRefPic->getPicYuvRec()->extendPicBorder(); … … 667 667 if(pcRefPic==NULL) 668 668 { 669 pcRefPic = xGetLongTermRefPic(rcListPic, m_p cRPS->getPOC(i), m_pcRPS->getCheckLTMSBPresent(i));670 } 671 pcRefPic->setCheckLTMSBPresent(m_p cRPS->getCheckLTMSBPresent(i));669 pcRefPic = xGetLongTermRefPic(rcListPic, m_pRPS->getPOC(i), m_pRPS->getCheckLTMSBPresent(i)); 670 } 671 pcRefPic->setCheckLTMSBPresent(m_pRPS->getCheckLTMSBPresent(i)); 672 672 } 673 673 … … 798 798 return 0; 799 799 } 800 for(UInt i=0; i < m_p cRPS->getNumberOfNegativePictures()+ m_pcRPS->getNumberOfPositivePictures() + m_pcRPS->getNumberOfLongtermPictures(); i++)801 { 802 if(m_p cRPS->getUsed(i))800 for(UInt i=0; i < m_pRPS->getNumberOfNegativePictures()+ m_pRPS->getNumberOfPositivePictures() + m_pRPS->getNumberOfLongtermPictures(); i++) 801 { 802 if(m_pRPS->getUsed(i)) 803 803 { 804 804 numRpsCurrTempList++; … … 1097 1097 m_pcVPS = pSrc->m_pcVPS; 1098 1098 #endif 1099 m_pcRPS = pSrc->m_pcRPS; 1100 m_iLastIDR = pSrc->m_iLastIDR; 1099 m_pRPS = pSrc->m_pRPS; m_iLastIDR = pSrc->m_iLastIDR; 1101 1100 1102 1101 m_pcPic = pSrc->m_pcPic; … … 1687 1686 Int nrOfNegativePictures = 0; 1688 1687 Int nrOfPositivePictures = 0; 1689 TComReferencePictureSet* pcRPS = this->getLocalRPS(); 1688 TComReferencePictureSet* pLocalRPS = this->getLocalRPS(); 1689 (*pLocalRPS)=TComReferencePictureSet(); 1690 1690 1691 Bool irapIsInRPS = false; // Used when bEfficientFieldIRAPEnabled==true 1691 1692 … … 1705 1706 // This picture exists as a reference picture 1706 1707 // and should be added to the explicit Reference Picture Set 1707 p cRPS->setDeltaPOC(k, pReferencePictureSet->getDeltaPOC(i));1708 p cRPS->setUsed(k, pReferencePictureSet->getUsed(i) && (!isRAP));1708 pLocalRPS->setDeltaPOC(k, pReferencePictureSet->getDeltaPOC(i)); 1709 pLocalRPS->setUsed(k, pReferencePictureSet->getUsed(i) && (!isRAP)); 1709 1710 if (bEfficientFieldIRAPEnabled) 1710 1711 { 1711 pcRPS->setUsed(k, pcRPS->getUsed(k) && !(bUseRecoveryPoint && this->getPOC() > pocRandomAccess && this->getPOC() + pReferencePictureSet->getDeltaPOC(i) < pocRandomAccess) );1712 } 1713 1714 if(p cRPS->getDeltaPOC(k) < 0)1712 pLocalRPS->setUsed(k, pLocalRPS->getUsed(k) && !(bUseRecoveryPoint && this->getPOC() > pocRandomAccess && this->getPOC() + pReferencePictureSet->getDeltaPOC(i) < pocRandomAccess) ); 1713 } 1714 1715 if(pLocalRPS->getDeltaPOC(k) < 0) 1715 1716 { 1716 1717 nrOfNegativePictures++; … … 1739 1740 if(rpcPic->getPicSym()->getSlice(0)->getPOC() == this->getAssociatedIRAPPOC() && this->getAssociatedIRAPPOC() == this->getPOC()+1) 1740 1741 { 1741 p cRPS->setDeltaPOC(k, 1);1742 p cRPS->setUsed(k, true);1742 pLocalRPS->setDeltaPOC(k, 1); 1743 pLocalRPS->setUsed(k, true); 1743 1744 nrOfPositivePictures++; 1744 1745 k ++; … … 1747 1748 } 1748 1749 } 1749 p cRPS->setNumberOfNegativePictures(nrOfNegativePictures);1750 p cRPS->setNumberOfPositivePictures(nrOfPositivePictures);1751 p cRPS->setNumberOfPictures(nrOfNegativePictures+nrOfPositivePictures);1750 pLocalRPS->setNumberOfNegativePictures(nrOfNegativePictures); 1751 pLocalRPS->setNumberOfPositivePictures(nrOfPositivePictures); 1752 pLocalRPS->setNumberOfPictures(nrOfNegativePictures+nrOfPositivePictures); 1752 1753 // This is a simplistic inter rps example. A smarter encoder will look for a better reference RPS to do the 1753 1754 // inter RPS prediction with. Here we just use the reference used by pReferencePictureSet. … … 1755 1756 if (!pReferencePictureSet->getInterRPSPrediction() || useNewRPS ) 1756 1757 { 1757 p cRPS->setInterRPSPrediction(false);1758 p cRPS->setNumRefIdc(0);1758 pLocalRPS->setInterRPSPrediction(false); 1759 pLocalRPS->setNumRefIdc(0); 1759 1760 } 1760 1761 else … … 1769 1770 Int deltaPOC = ((i != iRefPics)? pcRefRPS->getDeltaPOC(i) : 0); // check if the reference abs POC is >= 0 1770 1771 Int iRefIdc = 0; 1771 for (j=0; j < p cRPS->getNumberOfPictures(); j++) // loop through the pictures in the new RPS1772 { 1773 if ( (deltaPOC + deltaRPS) == p cRPS->getDeltaPOC(j))1774 { 1775 if (p cRPS->getUsed(j))1772 for (j=0; j < pLocalRPS->getNumberOfPictures(); j++) // loop through the pictures in the new RPS 1773 { 1774 if ( (deltaPOC + deltaRPS) == pLocalRPS->getDeltaPOC(j)) 1775 { 1776 if (pLocalRPS->getUsed(j)) 1776 1777 { 1777 1778 iRefIdc = 1; … … 1783 1784 } 1784 1785 } 1785 p cRPS->setRefIdc(i, iRefIdc);1786 pLocalRPS->setRefIdc(i, iRefIdc); 1786 1787 iNewIdc++; 1787 1788 } 1788 p cRPS->setInterRPSPrediction(true);1789 p cRPS->setNumRefIdc(iNewIdc);1790 p cRPS->setDeltaRPS(deltaRPS);1791 p cRPS->setDeltaRIdxMinus1(pReferencePictureSet->getDeltaRIdxMinus1() + this->getSPS()->getRPSList()->getNumberOfReferencePictureSets() - this->getRPSidx());1792 } 1793 1794 this->setRPS(p cRPS);1789 pLocalRPS->setInterRPSPrediction(true); 1790 pLocalRPS->setNumRefIdc(iNewIdc); 1791 pLocalRPS->setDeltaRPS(deltaRPS); 1792 pLocalRPS->setDeltaRIdxMinus1(pReferencePictureSet->getDeltaRIdxMinus1() + this->getSPS()->getRPSList()->getNumberOfReferencePictureSets() - this->getRPSidx()); 1793 } 1794 1795 this->setRPS(pLocalRPS); 1795 1796 this->setRPSidx(-1); 1796 1797 } -
branches/HTM-14.1-update-dev1/source/Lib/TLibCommon/TComSlice.h
r1279 r1287 2479 2479 Int m_iAssociatedIRAP; 2480 2480 NalUnitType m_iAssociatedIRAPType; 2481 TComReferencePictureSet* m_pcRPS;2482 TComReferencePictureSet m_ LocalRPS;2483 Int m_ iBDidx;2481 const TComReferencePictureSet* m_pRPS; //< pointer to RPS, either in the SPS or the local RPS in the same slice header 2482 TComReferencePictureSet m_localRPS; //< RPS when present in slice header 2483 Int m_rpsIdx; //< index of used RPS in the SPS or -1 for local RPS in the slice header 2484 2484 TComRefPicListModification m_RefPicListModification; 2485 2485 NalUnitType m_eNalUnitType; ///< Nal unit type for the slice … … 2676 2676 Void setSaoEnabledFlag(ChannelType chType, Bool s) {m_saoEnabledFlag[chType] =s; } 2677 2677 Bool getSaoEnabledFlag(ChannelType chType) const { return m_saoEnabledFlag[chType]; } 2678 Void setRPS( TComReferencePictureSet *pcRPS ) { m_pcRPS = pcRPS;}2679 TComReferencePictureSet* getRPS() { return m_pcRPS;}2680 TComReferencePictureSet* getLocalRPS() { return &m_ LocalRPS; }2681 2682 Void setRPSidx( Int iBDidx ) { m_iBDidx = iBDidx; }2683 Int getRPSidx() const { return m_ iBDidx; }2678 Void setRPS( const TComReferencePictureSet *pcRPS ) { m_pRPS = pcRPS; } 2679 const TComReferencePictureSet* getRPS() { return m_pRPS; } 2680 TComReferencePictureSet* getLocalRPS() { return &m_localRPS; } 2681 2682 Void setRPSidx( Int rpsIdx ) { m_rpsIdx = rpsIdx; } 2683 Int getRPSidx() const { return m_rpsIdx; } 2684 2684 TComRefPicListModification* getRefPicListModification() { return &m_RefPicListModification; } 2685 2685 Void setLastIDR(Int iIDRPOC) { m_iLastIDR = iIDRPOC; } -
branches/HTM-14.1-update-dev1/source/Lib/TLibDecoder/TDecCAVLC.cpp
r1279 r1287 2349 2349 #endif 2350 2350 TComReferencePictureSet* rps = pcSlice->getLocalRPS(); 2351 rps->setNumberOfNegativePictures(0); 2352 rps->setNumberOfPositivePictures(0); 2353 rps->setNumberOfLongtermPictures(0); 2354 rps->setNumberOfPictures(0); 2351 (*rps)=TComReferencePictureSet(); 2355 2352 pcSlice->setRPS(rps); 2356 2353 #if NH_MV … … 2391 2388 TComReferencePictureSet* rps; 2392 2389 rps = pcSlice->getLocalRPS(); 2390 (*rps)=TComReferencePictureSet(); 2391 2393 2392 pcSlice->setRPS(rps); 2394 2393 READ_FLAG( uiCode, "short_term_ref_pic_set_sps_flag" ); … … 2528 2527 // In the case of BLA picture types, rps data is read from slice header but ignored 2529 2528 rps = pcSlice->getLocalRPS(); 2530 rps->setNumberOfNegativePictures(0); 2531 rps->setNumberOfPositivePictures(0); 2532 rps->setNumberOfLongtermPictures(0); 2533 rps->setNumberOfPictures(0); 2529 (*rps)=TComReferencePictureSet(); 2534 2530 pcSlice->setRPS(rps); 2535 2531 } -
branches/HTM-14.1-update-dev1/source/Lib/TLibDecoder/TDecCu.cpp
r1279 r1287 85 85 #endif 86 86 87 UInt uiNumPartitions;88 87 for ( UInt ui = 0; ui < m_uiMaxDepth-1; ui++ ) 89 88 { 90 uiNumPartitions = 1<<( ( m_uiMaxDepth - ui - 1 )<<1 );89 UInt uiNumPartitions = 1<<( ( m_uiMaxDepth - ui - 1 )<<1 ); 91 90 UInt uiWidth = uiMaxWidth >> ui; 92 91 UInt uiHeight = uiMaxHeight >> ui; 92 93 // The following arrays (m_ppcYuvResi, m_ppcYuvReco and m_ppcCU) are only required for CU depths 94 // although data is allocated for all possible depths of the CU/TU tree except the last. 95 // Since the TU tree will always include at least one additional depth greater than the CU tree, 96 // there will be enough entries for these arrays. 97 // (Section 7.4.3.2: "The CVS shall not contain data that result in (Log2MinTrafoSize) MinTbLog2SizeY 98 // greater than or equal to MinCbLog2SizeY") 99 // TODO: tidy the array allocation given the above comment. 93 100 94 101 m_ppcYuvResi[ui] = new TComYuv; m_ppcYuvResi[ui]->create( uiWidth, uiHeight, chromaFormatIDC ); … … 778 785 { 779 786 const Bool bUseFilteredPredictions=TComPrediction::filteringIntraReferenceSamples(COMPONENT_Y, VER_IDX, uiWidth, uiHeight, chFmt, pcCU->getSlice()->getSPS()->getSpsRangeExtension().getIntraSmoothingDisabledFlag()); 780 m_pcPrediction->initIntraPatternChType( rTu, bAboveAvail, bLeftAvail,COMPONENT_Y, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) );781 m_pcPrediction->predIntraAng( COMPONENT_Y, VER_IDX, 0 /* Decoder does not have an original image */, 0, piReco, uiStride, rTu, b AboveAvail, bLeftAvail, bUseFilteredPredictions );787 m_pcPrediction->initIntraPatternChType( rTu, COMPONENT_Y, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) ); 788 m_pcPrediction->predIntraAng( COMPONENT_Y, VER_IDX, 0 /* Decoder does not have an original image */, 0, piReco, uiStride, rTu, bUseFilteredPredictions ); 782 789 } 783 790 else if ( pcCU->getDISType(uiAbsPartIdx) == 1 ) 784 791 { 785 792 const Bool bUseFilteredPredictions=TComPrediction::filteringIntraReferenceSamples(COMPONENT_Y, HOR_IDX, uiWidth, uiHeight, chFmt, pcCU->getSlice()->getSPS()->getSpsRangeExtension().getIntraSmoothingDisabledFlag()); 786 m_pcPrediction->initIntraPatternChType( rTu, bAboveAvail, bLeftAvail,COMPONENT_Y, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) );787 m_pcPrediction->predIntraAng( COMPONENT_Y, HOR_IDX, 0 /* Decoder does not have an original image */, 0, piReco, uiStride, rTu, b AboveAvail, bLeftAvail, bUseFilteredPredictions );793 m_pcPrediction->initIntraPatternChType( rTu, COMPONENT_Y, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) ); 794 m_pcPrediction->predIntraAng( COMPONENT_Y, HOR_IDX, 0 /* Decoder does not have an original image */, 0, piReco, uiStride, rTu, bUseFilteredPredictions ); 788 795 } 789 796 else if ( pcCU->getDISType(uiAbsPartIdx) == 2 ) … … 1031 1038 1032 1039 //===== init availability pattern ===== 1033 Bool bAboveAvail = false;1034 Bool bLeftAvail = false;1035 1036 1040 const Bool bUseFilteredPredictions=TComPrediction::filteringIntraReferenceSamples(compID, uiChFinalMode, uiWidth, uiHeight, chFmt, pcCU->getSlice()->getSPS()->getSpsRangeExtension().getIntraSmoothingDisabledFlag()); 1037 1041 … … 1041 1045 1042 1046 DEBUG_STRING_NEW(sTemp) 1043 m_pcPrediction->initIntraPatternChType( rTu, bAboveAvail, bLeftAvail,compID, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) );1047 m_pcPrediction->initIntraPatternChType( rTu, compID, bUseFilteredPredictions DEBUG_STRING_PASS_INTO(sTemp) ); 1044 1048 1045 1049 … … 1053 1057 { 1054 1058 #endif 1055 m_pcPrediction->predIntraAng( compID, uiChFinalMode, 0 /* Decoder does not have an original image */, 0, piPred, uiStride, rTu, b AboveAvail, bLeftAvail, bUseFilteredPredictions );1059 m_pcPrediction->predIntraAng( compID, uiChFinalMode, 0 /* Decoder does not have an original image */, 0, piPred, uiStride, rTu, bUseFilteredPredictions ); 1056 1060 #if NH_3D_DMM 1057 1061 } … … 1269 1273 TComTURecurse tuRecurseWithPU(tuRecurseCU, false, TComTU::DONT_SPLIT); 1270 1274 1271 Bool bAboveAvail = false; 1272 Bool bLeftAvail = false; 1273 m_pcPrediction->initIntraPatternChType( tuRecurseWithPU, bAboveAvail, bLeftAvail, COMPONENT_Y, false DEBUG_STRING_PASS_INTO(sTemp) ); 1275 m_pcPrediction->initIntraPatternChType( tuRecurseWithPU, COMPONENT_Y, false DEBUG_STRING_PASS_INTO(sTemp) ); 1274 1276 1275 1277 // get partition … … 1321 1323 1322 1324 //===== init pattern for luma prediction ===== 1323 Bool bAboveAvail = false;1324 Bool bLeftAvail = false;1325 1325 1326 m_pcPrediction->initIntraPatternChType( tuRecurseWithPU, bAboveAvail, bLeftAvail,COMPONENT_Y, bUseFilter DEBUG_STRING_PASS_INTO(sTemp) );1326 m_pcPrediction->initIntraPatternChType( tuRecurseWithPU, COMPONENT_Y, bUseFilter DEBUG_STRING_PASS_INTO(sTemp) ); 1327 1327 1328 m_pcPrediction->predIntraAng( COMPONENT_Y, uiLumaPredMode, NULL, uiStrideTU, piPredTU, uiStrideTU, tuRecurseWithPU, b AboveAvail, bLeftAvail, bUseFilter );1328 m_pcPrediction->predIntraAng( COMPONENT_Y, uiLumaPredMode, NULL, uiStrideTU, piPredTU, uiStrideTU, tuRecurseWithPU, bUseFilter ); 1329 1329 1330 1330 // copy for prediction of next part -
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncCfg.h
r1279 r1287 257 257 Int* m_aidQP; 258 258 UInt m_uiDeltaQpRD; 259 Bool m_bFastDeltaQP; 259 260 260 261 Bool m_bUseConstrainedIntraPred; … … 710 711 Void setdQPs ( Int* p ) { m_aidQP = p; } 711 712 Void setDeltaQpRD ( UInt u ) {m_uiDeltaQpRD = u; } 713 Void setFastDeltaQp ( Bool b ) {m_bFastDeltaQP = b; } 712 714 Bool getUseASR () { return m_bUseASR; } 713 715 Bool getUseHADME () { return m_bUseHADME; } … … 758 760 Void setIntraSmoothingDisabledFlag (Bool bValue) { m_intraSmoothingDisabledFlag=bValue; } 759 761 760 Int* getdQPs () { return m_aidQP; } 761 UInt getDeltaQpRD () { return m_uiDeltaQpRD; } 762 Int* getdQPs () { return m_aidQP; } 763 UInt getDeltaQpRD () const { return m_uiDeltaQpRD; } 764 Bool getFastDeltaQp () const { return m_bFastDeltaQP; } 762 765 763 766 //====== Slice ======== -
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncCu.cpp
r1285 r1287 122 122 m_stillToCodeChromaQpOffsetFlag = false; 123 123 m_cuChromaQpOffsetIdxPlus1 = 0; 124 m_bFastDeltaQP = false; 124 125 125 126 // initialize partition order. … … 406 407 */ 407 408 #if AMP_ENC_SPEEDUP 408 Void TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth DEBUG_STRING_FN_DECLARE(sDebug_), PartSize eParentPartSize )409 #else 410 Void TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth )409 Void TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, const UInt uiDepth DEBUG_STRING_FN_DECLARE(sDebug_), PartSize eParentPartSize ) 410 #else 411 Void TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, const UInt uiDepth ) 411 412 #endif 412 413 { … … 415 416 const TComPPS &pps=*(rpcTempCU->getSlice()->getPPS()); 416 417 const TComSPS &sps=*(rpcTempCU->getSlice()->getSPS()); 418 419 // These are only used if getFastDeltaQp() is true 420 const UInt fastDeltaQPCuMaxSize = Clip3(sps.getMaxCUHeight()>>sps.getLog2DiffMaxMinCodingBlockSize(), sps.getMaxCUHeight(), 32u); 417 421 418 422 … … 437 441 Bool bTrySplitDQP = true; 438 442 #endif 439 440 // variable for Early CU determination441 Bool bSubBranch = true;442 443 443 // variable for Cbf fast mode PU decision 444 444 Bool doNotBlockPu = true; … … 453 453 #endif 454 454 #endif 455 Bool bBoundary = false;456 UInt uiLPelX = rpcBestCU->getCUPelX();457 UInt uiRPelX = uiLPelX + rpcBestCU->getWidth(0) - 1;458 UInt uiTPelY = rpcBestCU->getCUPelY();459 UInt uiBPelY = uiTPelY + rpcBestCU->getHeight(0) - 1;455 const UInt uiLPelX = rpcBestCU->getCUPelX(); 456 const UInt uiRPelX = uiLPelX + rpcBestCU->getWidth(0) - 1; 457 const UInt uiTPelY = rpcBestCU->getCUPelY(); 458 const UInt uiBPelY = uiTPelY + rpcBestCU->getHeight(0) - 1; 459 const UInt uiWidth = rpcBestCU->getWidth(0); 460 460 461 461 #if H_MV_ENC_DEC_TRAC … … 515 515 516 516 TComSlice * pcSlice = rpcTempCU->getPic()->getSlice(rpcTempCU->getPic()->getCurrSliceIdx()); 517 // We need to split, so don't try these modes. 518 if ( ( uiRPelX < sps.getPicWidthInLumaSamples() ) && 519 ( uiBPelY < sps.getPicHeightInLumaSamples() ) ) 517 518 const Bool bBoundary = !( uiRPelX < sps.getPicWidthInLumaSamples() && uiBPelY < sps.getPicHeightInLumaSamples() ); 519 520 if ( !bBoundary ) 520 521 { 521 522 #if H_3D_FAST_TEXTURE_ENCODING … … 1187 1188 } 1188 1189 1189 m_pcRDGoOnSbacCoder->load(m_pppcRDSbacCoder[uiDepth][CI_NEXT_BEST]); 1190 m_pcEntropyCoder->resetBits(); 1191 m_pcEntropyCoder->encodeSplitFlag( rpcBestCU, 0, uiDepth, true ); 1192 rpcBestCU->getTotalBits() += m_pcEntropyCoder->getNumberOfWrittenBits(); // split bits 1193 rpcBestCU->getTotalBins() += ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded(); 1190 if( rpcBestCU->getTotalCost()!=MAX_DOUBLE ) 1191 { 1192 m_pcRDGoOnSbacCoder->load(m_pppcRDSbacCoder[uiDepth][CI_NEXT_BEST]); 1193 m_pcEntropyCoder->resetBits(); 1194 m_pcEntropyCoder->encodeSplitFlag( rpcBestCU, 0, uiDepth, true ); 1195 rpcBestCU->getTotalBits() += m_pcEntropyCoder->getNumberOfWrittenBits(); // split bits 1196 rpcBestCU->getTotalBins() += ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded(); 1194 1197 #if NH_3D_VSO // M8 1195 1198 if ( m_pcRdCost->getUseVSO() ) … … 1200 1203 #endif 1201 1204 rpcBestCU->getTotalCost() = m_pcRdCost->calcRdCost( rpcBestCU->getTotalBits(), rpcBestCU->getTotalDistortion() ); 1202 m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_NEXT_BEST]); 1203 1204 // Early CU determination 1205 if( m_pcEncCfg->getUseEarlyCU() && rpcBestCU->isSkipped(0) ) 1206 { 1207 bSubBranch = false; 1208 } 1209 else 1210 { 1211 bSubBranch = true; 1205 m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_NEXT_BEST]); 1212 1206 } 1213 1207 #if H_3D_FAST_TEXTURE_ENCODING … … 1218 1212 #endif 1219 1213 } 1220 else 1221 { 1222 bBoundary = true; 1223 } 1224 1225 // copy orginal YUV samples to PCM buffer 1226 if( rpcBestCU->isLosslessCoded(0) && (rpcBestCU->getIPCMFlag(0) == false)) 1214 1215 // copy original YUV samples to PCM buffer 1216 if( rpcBestCU->getTotalCost()!=MAX_DOUBLE && rpcBestCU->isLosslessCoded(0) && (rpcBestCU->getIPCMFlag(0) == false)) 1227 1217 { 1228 1218 xFillPCMBuffer(rpcBestCU, m_ppcOrigYuv[uiDepth]); … … 1258 1248 } 1259 1249 1260 for (Int iQP=iMinQP; iQP<=iMaxQP; iQP++) 1261 { 1262 const Bool bIsLosslessMode = false; // False at this level. Next level down may set it to true. 1263 1264 rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode ); 1265 1250 const Bool bSubBranch = bBoundary || !( m_pcEncCfg->getUseEarlyCU() && rpcBestCU->getTotalCost()!=MAX_DOUBLE && rpcBestCU->isSkipped(0) ); 1251 #if NH_3D_QTLPC 1252 if( bSubBranch && uiDepth < sps.getLog2DiffMaxMinCodingBlockSize() && (!getFastDeltaQp() || uiWidth > fastDeltaQPCuMaxSize || bBoundary) && bTrySplitDQP ) 1253 #else 1254 if( bSubBranch && uiDepth < sps.getLog2DiffMaxMinCodingBlockSize() && (!getFastDeltaQp() || uiWidth > fastDeltaQPCuMaxSize || bBoundary)) 1255 #endif 1256 { 1266 1257 // further split 1267 #if NH_3D_QTLPC 1268 1269 if( bSubBranch && bTrySplitDQP && uiDepth < sps.getLog2DiffMaxMinCodingBlockSize() ) 1270 #else 1271 if( bSubBranch && uiDepth < sps.getLog2DiffMaxMinCodingBlockSize() ) 1272 #endif 1273 { 1258 for (Int iQP=iMinQP; iQP<=iMaxQP; iQP++) 1259 { 1260 const Bool bIsLosslessMode = false; // False at this level. Next level down may set it to true. 1261 1262 rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode ); 1263 1274 1264 #if NH_3D_VSO // M9 1275 1265 // reset Model … … 1310 1300 #if AMP_ENC_SPEEDUP 1311 1301 DEBUG_STRING_NEW(sChild) 1312 if ( ! rpcBestCU->isInter(0) )1302 if ( !(rpcBestCU->getTotalCost()!=MAX_DOUBLE && rpcBestCU->isInter(0)) ) 1313 1303 { 1314 1304 xCompressCU( pcSubBestPartCU, pcSubTempPartCU, uhNextDepth DEBUG_STRING_PASS_INTO(sChild), NUMBER_OF_PART_SIZES ); … … 1366 1356 } 1367 1357 1368 UInt uiTargetPartIdx = 0;1369 1358 if ( hasResidual ) 1370 1359 { 1371 1360 m_pcEntropyCoder->resetBits(); 1372 m_pcEntropyCoder->encodeQP( rpcTempCU, uiTargetPartIdx, false );1361 m_pcEntropyCoder->encodeQP( rpcTempCU, 0, false ); 1373 1362 rpcTempCU->getTotalBits() += m_pcEntropyCoder->getNumberOfWrittenBits(); // dQP bits 1374 1363 rpcTempCU->getTotalBins() += ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded(); … … 1383 1372 1384 1373 Bool foundNonZeroCbf = false; 1385 rpcTempCU->setQPSubCUs( rpcTempCU->getRefQP( uiTargetPartIdx), 0, uiDepth, foundNonZeroCbf );1374 rpcTempCU->setQPSubCUs( rpcTempCU->getRefQP( 0 ), 0, uiDepth, foundNonZeroCbf ); 1386 1375 assert( foundNonZeroCbf ); 1387 1376 } 1388 1377 else 1389 1378 { 1390 rpcTempCU->setQPSubParts( rpcTempCU->getRefQP( uiTargetPartIdx), 0, uiDepth ); // set QP to default QP1379 rpcTempCU->setQPSubParts( rpcTempCU->getRefQP( 0 ), 0, uiDepth ); // set QP to default QP 1391 1380 } 1392 1381 } … … 1399 1388 // This can be achieved by forcing the decision to be that of the rpcTempCU. 1400 1389 // The exception is each slice / slice-segment must have at least one CTU. 1401 const Bool isEndOfSlice = pcSlice->getSliceMode()==FIXED_NUMBER_OF_BYTES 1402 && ((pcSlice->getSliceBits()+rpcBestCU->getTotalBits())>pcSlice->getSliceArgument()<<3) 1403 && rpcBestCU->getCtuRsAddr() != pcPic->getPicSym()->getCtuTsToRsAddrMap(pcSlice->getSliceCurStartCtuTsAddr()) 1404 && rpcBestCU->getCtuRsAddr() != pcPic->getPicSym()->getCtuTsToRsAddrMap(pcSlice->getSliceSegmentCurStartCtuTsAddr()); 1405 const Bool isEndOfSliceSegment = pcSlice->getSliceSegmentMode()==FIXED_NUMBER_OF_BYTES 1406 && ((pcSlice->getSliceSegmentBits()+rpcBestCU->getTotalBits()) > pcSlice->getSliceSegmentArgument()<<3) 1407 && rpcBestCU->getCtuRsAddr() != pcPic->getPicSym()->getCtuTsToRsAddrMap(pcSlice->getSliceSegmentCurStartCtuTsAddr()); 1408 // Do not need to check slice condition for slice-segment since a slice-segment is a subset of a slice. 1409 if(isEndOfSlice||isEndOfSliceSegment) 1390 if (rpcBestCU->getTotalCost()!=MAX_DOUBLE) 1410 1391 { 1411 rpcBestCU->getTotalCost()=MAX_DOUBLE; 1392 const Bool isEndOfSlice = pcSlice->getSliceMode()==FIXED_NUMBER_OF_BYTES 1393 && ((pcSlice->getSliceBits()+rpcBestCU->getTotalBits())>pcSlice->getSliceArgument()<<3) 1394 && rpcBestCU->getCtuRsAddr() != pcPic->getPicSym()->getCtuTsToRsAddrMap(pcSlice->getSliceCurStartCtuTsAddr()) 1395 && rpcBestCU->getCtuRsAddr() != pcPic->getPicSym()->getCtuTsToRsAddrMap(pcSlice->getSliceSegmentCurStartCtuTsAddr()); 1396 const Bool isEndOfSliceSegment = pcSlice->getSliceSegmentMode()==FIXED_NUMBER_OF_BYTES 1397 && ((pcSlice->getSliceSegmentBits()+rpcBestCU->getTotalBits()) > pcSlice->getSliceSegmentArgument()<<3) 1398 && rpcBestCU->getCtuRsAddr() != pcPic->getPicSym()->getCtuTsToRsAddrMap(pcSlice->getSliceSegmentCurStartCtuTsAddr()); 1399 // Do not need to check slice condition for slice-segment since a slice-segment is a subset of a slice. 1400 if(isEndOfSlice||isEndOfSliceSegment) 1401 { 1402 rpcBestCU->getTotalCost()=MAX_DOUBLE; 1403 } 1412 1404 } 1413 1405 1414 1406 xCheckBestMode( rpcBestCU, rpcTempCU, uiDepth DEBUG_STRING_PASS_INTO(sDebug) DEBUG_STRING_PASS_INTO(sTempDebug) DEBUG_STRING_PASS_INTO(false) ); // RD compare current larger prediction 1415 // with sub partitioned prediction.1407 // with sub partitioned prediction. 1416 1408 } 1417 1409 } … … 1785 1777 { 1786 1778 assert( rpcTempCU->getSlice()->getSliceType() != I_SLICE ); 1779 if(getFastDeltaQp()) 1780 { 1781 return; // never check merge in fast deltaqp mode 1782 } 1787 1783 #if NH_3D_MLC 1788 1784 TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS_MEM << 1]; // double length for mv of both lists … … 2247 2243 DEBUG_STRING_NEW(sTest) 2248 2244 2245 if(getFastDeltaQp()) 2246 { 2247 const TComSPS &sps=*(rpcTempCU->getSlice()->getSPS()); 2248 const UInt fastDeltaQPCuMaxSize = Clip3(sps.getMaxCUHeight()>>(sps.getLog2DiffMaxMinCodingBlockSize()), sps.getMaxCUHeight(), 32u); 2249 if(ePartSize != SIZE_2Nx2N || rpcTempCU->getWidth( 0 ) > fastDeltaQPCuMaxSize) 2250 { 2251 return; // only check necessary 2Nx2N Inter in fast deltaqp mode 2252 } 2253 } 2254 2249 2255 // prior to this, rpcTempCU will have just been reset using rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode ); 2250 2256 #if H_3D || NH_3D_ARP … … 2740 2746 DEBUG_STRING_NEW(sTest) 2741 2747 2748 if(getFastDeltaQp()) 2749 { 2750 const TComSPS &sps=*(rpcTempCU->getSlice()->getSPS()); 2751 const UInt fastDeltaQPCuMaxSize = Clip3(sps.getMaxCUHeight()>>(sps.getLog2DiffMaxMinCodingBlockSize()), sps.getMaxCUHeight(), 32u); 2752 if(rpcTempCU->getWidth( 0 ) > fastDeltaQPCuMaxSize) 2753 { 2754 return; // only check necessary 2Nx2N Intra in fast deltaqp mode 2755 } 2756 } 2757 2742 2758 UInt uiDepth = rpcTempCU->getDepth( 0 ); 2743 2759 #if NH_3D_VSO // M5 … … 2844 2860 Void TEncCu::xCheckIntraPCM( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU ) 2845 2861 { 2862 if(getFastDeltaQp()) 2863 { 2864 const TComSPS &sps=*(rpcTempCU->getSlice()->getSPS()); 2865 const UInt fastDeltaQPCuMaxPCMSize = Clip3((UInt)1<<sps.getPCMLog2MinSize(), (UInt)1<<sps.getPCMLog2MaxSize(), 32u); 2866 if (rpcTempCU->getWidth( 0 ) > fastDeltaQPCuMaxPCMSize) 2867 { 2868 return; // only check necessary PCM in fast deltaqp mode 2869 } 2870 } 2871 2846 2872 UInt uiDepth = rpcTempCU->getDepth( 0 ); 2847 2873 -
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncCu.h
r1282 r1287 88 88 // Data : encoder control 89 89 Bool m_bEncodeDQP; 90 Bool m_bFastDeltaQP; 90 91 Bool m_stillToCodeChromaQpOffsetFlag; //indicates whether chroma QP offset flag needs to coded at this particular CU granularity. 91 92 Int m_cuChromaQpOffsetIdxPlus1; // if 0, then cu_chroma_qp_offset_flag will be 0, otherwise cu_chroma_qp_offset_flag will be 1. … … 132 133 #endif 133 134 135 Void setFastDeltaQp ( Bool b) { m_bFastDeltaQP = b; } 136 134 137 protected: 135 138 Void finishCU ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 136 139 #if AMP_ENC_SPEEDUP 137 Void xCompressCU ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth DEBUG_STRING_FN_DECLARE(sDebug), PartSize eParentPartSize = NUMBER_OF_PART_SIZES );138 #else 139 Void xCompressCU ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth );140 Void xCompressCU ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, const UInt uiDepth DEBUG_STRING_FN_DECLARE(sDebug), PartSize eParentPartSize = NUMBER_OF_PART_SIZES ); 141 #else 142 Void xCompressCU ( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, const UInt uiDepth ); 140 143 #endif 141 144 Void xEncodeCU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ); … … 181 184 Void setdQPFlag ( Bool b ) { m_bEncodeDQP = b; } 182 185 186 Bool getFastDeltaQp () const { return m_bFastDeltaQP; } 187 183 188 Bool getCodeChromaQpAdjFlag() { return m_stillToCodeChromaQpOffsetFlag; } 184 189 Void setCodeChromaQpAdjFlag( Bool b ) { m_stillToCodeChromaQpOffsetFlag = b; } -
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncGOP.cpp
r1279 r1287 1264 1264 pcSlice->decodingRefreshMarking(m_pocCRA, m_bRefreshPending, rcListPic, m_pcCfg->getEfficientFieldIRAPEnabled()); 1265 1265 m_pcEncTop->selectReferencePictureSet(pcSlice, pocCurr, iGOPid); 1266 pcSlice->getRPS()->setNumberOfLongtermPictures(0);1267 1266 if (!m_pcCfg->getEfficientFieldIRAPEnabled()) 1268 1267 { … … 1757 1756 { 1758 1757 m_pcSliceEncoder->precompressSlice( pcPic ); 1759 m_pcSliceEncoder->compressSlice ( pcPic, false );1758 m_pcSliceEncoder->compressSlice ( pcPic, false, false ); 1760 1759 1761 1760 const UInt curSliceSegmentEnd = pcSlice->getSliceSegmentCurEndCtuTsAddr(); … … 2741 2740 Void TEncGOP::arrangeLongtermPicturesInRPS(TComSlice *pcSlice, TComList<TComPic*>& rcListPic) 2742 2741 { 2743 TComReferencePictureSet *rps = pcSlice->getRPS(); 2744 if(!rps->getNumberOfLongtermPictures()) 2742 if(pcSlice->getRPS()->getNumberOfLongtermPictures() == 0) 2745 2743 { 2746 2744 return; 2747 2745 } 2746 // we can only modify the local RPS! 2747 assert (pcSlice->getRPSidx()==-1); 2748 TComReferencePictureSet *rps = pcSlice->getLocalRPS(); 2748 2749 2749 2750 // Arrange long-term reference pictures in the correct order of LSB and MSB, -
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 -
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncSearch.h
r1279 r1287 127 127 TComMv m_integerMv2Nx2N[NUM_REF_PIC_LIST_01][MAX_NUM_REF]; 128 128 129 Bool m_isInitialized; 129 130 public: 130 131 TEncSearch(); 131 132 virtual ~TEncSearch(); 132 133 133 Void init( 134 Void init(TEncCfg* pcEncCfg, 134 135 TComTrQuant* pcTrQuant, 135 136 Int iSearchRange, … … 143 144 TEncSbac*** pppcRDSbacCoder, 144 145 TEncSbac* pcRDGoOnSbacCoder ); 146 147 Void destroy(); 145 148 146 149 protected: -
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncSlice.cpp
r1279 r1287 680 680 681 681 // try compress 682 compressSlice ( pcPic, true 682 compressSlice ( pcPic, true, m_pcCfg->getFastDeltaQp()); 683 683 684 684 #if NH_3D_VSO … … 751 751 /** \param pcPic picture class 752 752 */ 753 Void TEncSlice::compressSlice( TComPic* pcPic, const Bool bCompressEntireSlice )753 Void TEncSlice::compressSlice( TComPic* pcPic, const Bool bCompressEntireSlice, const Bool bFastDeltaQP ) 754 754 { 755 755 // if bCompressEntireSlice is true, then the entire slice (not slice segment) is compressed, … … 781 781 TComBitCounter tempBitCounter; 782 782 const UInt frameWidthInCtus = pcPic->getPicSym()->getFrameWidthInCtus(); 783 784 m_pcCuEncoder->setFastDeltaQp(bFastDeltaQP); 783 785 784 786 //------------------------------------------------------------------------------ -
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncSlice.h
r1200 r1287 126 126 // compress and encode slice 127 127 Void precompressSlice ( TComPic* pcPic ); ///< precompress slice for multi-loop slice-level QP opt. 128 Void compressSlice ( TComPic* pcPic, const Bool bCompressEntireSlice 128 Void compressSlice ( TComPic* pcPic, const Bool bCompressEntireSlice, const Bool bFastDeltaQP ); ///< analysis stage of slice 129 129 Void calCostSliceI ( TComPic* pcPic ); 130 130 Void encodeSlice ( TComPic* pcPic, TComOutputBitstream* pcSubstreams, UInt &numBinsCoded ); -
branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncTop.cpp
r1279 r1287 174 174 m_cLoopFilter. destroy(); 175 175 m_cRateCtrl. destroy(); 176 m_cSearch. destroy(); 176 177 Int iDepth; 177 178 for ( iDepth = 0; iDepth < m_maxTotalCUDepth+1; iDepth++ ) … … 953 954 hrd->setCpbSizeValueMinus1( i, j, 0, ( cpbSizeValue - 1 ) ); 954 955 hrd->setDuCpbSizeValueMinus1( i, j, 0, ( duCpbSizeValue - 1 ) ); 956 hrd->setDuBitRateValueMinus1( i, j, 0, ( duBitRateValue - 1 ) ); 955 957 hrd->setCbrFlag( i, j, 0, false ); 956 958 … … 1323 1325 } 1324 1326 1325 TComReferencePictureSet *rps=slice->getLocalRPS(); 1326 (*rps) = *(slice->getSPS()->getRPSList()->getReferencePictureSet(slice->getRPSidx())); 1327 const TComReferencePictureSet *rps = (slice->getSPS()->getRPSList()->getReferencePictureSet(slice->getRPSidx())); 1327 1328 slice->setRPS(rps); 1328 slice->getRPS()->setNumberOfPictures(slice->getRPS()->getNumberOfNegativePictures()+slice->getRPS()->getNumberOfPositivePictures());1329 1329 #if NH_MV 1330 1330 }
Note: See TracChangeset for help on using the changeset viewer.