Changeset 1540 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibEncoder
- Timestamp:
- 22 Mar 2016, 23:10:27 (9 years ago)
- Location:
- branches/SHM-dev/source/Lib/TLibEncoder
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified branches/SHM-dev/source/Lib/TLibEncoder/TEncGOP.cpp ¶
r1538 r1540 3587 3587 assert(noCol > 1); 3588 3588 assert(noRows > 1); 3589 UInt64 *colSAD = (UInt64*)malloc(noCol*sizeof(UInt64));3590 UInt64 *rowSAD = (UInt64*)malloc(noRows*sizeof(UInt64));3589 std::vector<UInt64> colSAD(noCol, UInt64(0)); 3590 std::vector<UInt64> rowSAD(noCol, UInt64(0)); 3591 3591 UInt colIdx = 0; 3592 3592 UInt rowIdx = 0; … … 3600 3600 const Int thr1 = 2*bitdepthScale; 3601 3601 UInt a = 0; 3602 3603 memset(colSAD, 0, noCol*sizeof(UInt64));3604 memset(rowSAD, 0, noRows*sizeof(UInt64));3605 3602 3606 3603 if (maxTBsize > minBlockArtSize) … … 3692 3689 } 3693 3690 } 3694 3695 free(colSAD);3696 free(rowSAD);3697 3691 } 3698 3692 -
TabularUnified branches/SHM-dev/source/Lib/TLibEncoder/TEncSlice.cpp ¶
r1527 r1540 50 50 : m_encCABACTableIdx(I_SLICE) 51 51 { 52 m_apcPicYuvPred = NULL;53 m_apcPicYuvResi = NULL;54 55 m_pdRdPicLambda = NULL;56 m_pdRdPicQp = NULL;57 m_piRdPicQp = NULL;58 52 } 59 53 60 54 TEncSlice::~TEncSlice() 61 55 { 56 destroy(); 62 57 } 63 58 … … 65 60 { 66 61 // create prediction picture 67 if ( m_apcPicYuvPred == NULL ) 68 { 69 m_apcPicYuvPred = new TComPicYuv; 70 m_apcPicYuvPred->create( iWidth, iHeight, chromaFormat, iMaxCUWidth, iMaxCUHeight, uhTotalDepth, true ); 71 } 62 m_picYuvPred.create( iWidth, iHeight, chromaFormat, iMaxCUWidth, iMaxCUHeight, uhTotalDepth, true ); 72 63 73 64 // create residual picture 74 if( m_apcPicYuvResi == NULL ) 75 { 76 m_apcPicYuvResi = new TComPicYuv; 77 m_apcPicYuvResi->create( iWidth, iHeight, chromaFormat, iMaxCUWidth, iMaxCUHeight, uhTotalDepth, true ); 78 } 65 m_picYuvResi.create( iWidth, iHeight, chromaFormat, iMaxCUWidth, iMaxCUHeight, uhTotalDepth, true ); 79 66 } 80 67 81 68 Void TEncSlice::destroy() 82 69 { 83 // destroy prediction picture 84 if ( m_apcPicYuvPred ) 85 { 86 m_apcPicYuvPred->destroy(); 87 delete m_apcPicYuvPred; 88 m_apcPicYuvPred = NULL; 89 } 90 91 // destroy residual picture 92 if ( m_apcPicYuvResi ) 93 { 94 m_apcPicYuvResi->destroy(); 95 delete m_apcPicYuvResi; 96 m_apcPicYuvResi = NULL; 97 } 70 m_picYuvPred.destroy(); 71 m_picYuvResi.destroy(); 98 72 99 73 // free lambda and QP arrays 100 if ( m_pdRdPicLambda ) 101 { 102 xFree( m_pdRdPicLambda ); 103 m_pdRdPicLambda = NULL; 104 } 105 if ( m_pdRdPicQp ) 106 { 107 xFree( m_pdRdPicQp ); 108 m_pdRdPicQp = NULL; 109 } 110 if ( m_piRdPicQp ) 111 { 112 xFree( m_piRdPicQp ); 113 m_piRdPicQp = NULL; 114 } 74 m_vdRdPicLambda.clear(); 75 m_vdRdPicQp.clear(); 76 m_viRdPicQp.clear(); 115 77 } 116 78 … … 134 96 135 97 // create lambda and QP arrays 136 m_ pdRdPicLambda = (Double*)xMalloc( Double,m_pcCfg->getDeltaQpRD() * 2 + 1 );137 m_ pdRdPicQp = (Double*)xMalloc( Double,m_pcCfg->getDeltaQpRD() * 2 + 1 );138 m_ piRdPicQp = (Int* )xMalloc( Int,m_pcCfg->getDeltaQpRD() * 2 + 1 );98 m_vdRdPicLambda.resize(m_pcCfg->getDeltaQpRD() * 2 + 1 ); 99 m_vdRdPicQp.resize( m_pcCfg->getDeltaQpRD() * 2 + 1 ); 100 m_viRdPicQp.resize( m_pcCfg->getDeltaQpRD() * 2 + 1 ); 139 101 m_pcRateCtrl = pcEncTop->getRateCtrl(); 140 102 … … 416 378 iQP = max( -rpcSlice->getSPS()->getQpBDOffset(CHANNEL_TYPE_LUMA), min( MAX_QP, (Int) floor( dQP + 0.5 ) ) ); 417 379 418 m_ pdRdPicLambda[iDQpIdx] = dLambda;419 m_ pdRdPicQp [iDQpIdx] = dQP;420 m_ piRdPicQp [iDQpIdx] = iQP;380 m_vdRdPicLambda[iDQpIdx] = dLambda; 381 m_vdRdPicQp [iDQpIdx] = dQP; 382 m_viRdPicQp [iDQpIdx] = iQP; 421 383 } 422 384 423 385 // obtain dQP = 0 case 424 dLambda = m_ pdRdPicLambda[0];425 dQP = m_ pdRdPicQp [0];426 iQP = m_ piRdPicQp [0];386 dLambda = m_vdRdPicLambda[0]; 387 dQP = m_vdRdPicQp [0]; 388 iQP = m_viRdPicQp [0]; 427 389 428 390 const Int temporalId=m_pcCfg->getGOPEntry(iGOPid).m_temporalId; … … 536 498 rpcSlice->setTLayer( pcPic->getTLayer() ); 537 499 538 assert( m_apcPicYuvPred ); 539 assert( m_apcPicYuvResi ); 540 541 pcPic->setPicYuvPred( m_apcPicYuvPred ); 542 pcPic->setPicYuvResi( m_apcPicYuvResi ); 500 pcPic->setPicYuvPred( &m_picYuvPred ); 501 pcPic->setPicYuvResi( &m_picYuvResi ); 543 502 rpcSlice->setSliceMode ( m_pcCfg->getSliceMode() ); 544 503 rpcSlice->setSliceArgument ( m_pcCfg->getSliceArgument() ); … … 660 619 if (m_pcCfg->getGOPSize() > 1) 661 620 { 662 dFrameLambda = 0.68 * pow (2, (m_ piRdPicQp[0] - SHIFT_QP) / 3.0) * (pcSlice->isInterB()? 2 : 1);621 dFrameLambda = 0.68 * pow (2, (m_viRdPicQp[0] - SHIFT_QP) / 3.0) * (pcSlice->isInterB()? 2 : 1); 663 622 } 664 623 else 665 624 { 666 dFrameLambda = 0.68 * pow (2, (m_ piRdPicQp[0] - SHIFT_QP) / 3.0);625 dFrameLambda = 0.68 * pow (2, (m_viRdPicQp[0] - SHIFT_QP) / 3.0); 667 626 } 668 627 m_pcRdCost ->setFrameLambda(dFrameLambda); … … 671 630 for ( UInt uiQpIdx = 0; uiQpIdx < 2 * m_pcCfg->getDeltaQpRD() + 1; uiQpIdx++ ) 672 631 { 673 pcSlice ->setSliceQp ( m_ piRdPicQp [uiQpIdx] );632 pcSlice ->setSliceQp ( m_viRdPicQp [uiQpIdx] ); 674 633 #if ADAPTIVE_QP_SELECTION 675 pcSlice ->setSliceQpBase ( m_ piRdPicQp [uiQpIdx] );676 #endif 677 setUpLambda(pcSlice, m_ pdRdPicLambda[uiQpIdx], m_piRdPicQp [uiQpIdx]);634 pcSlice ->setSliceQpBase ( m_viRdPicQp [uiQpIdx] ); 635 #endif 636 setUpLambda(pcSlice, m_vdRdPicLambda[uiQpIdx], m_viRdPicQp [uiQpIdx]); 678 637 679 638 // try compress … … 699 658 700 659 // set best values 701 pcSlice ->setSliceQp ( m_ piRdPicQp [uiQpIdxBest] );660 pcSlice ->setSliceQp ( m_viRdPicQp [uiQpIdxBest] ); 702 661 #if ADAPTIVE_QP_SELECTION 703 pcSlice ->setSliceQpBase ( m_ piRdPicQp [uiQpIdxBest] );704 #endif 705 setUpLambda(pcSlice, m_ pdRdPicLambda[uiQpIdxBest], m_piRdPicQp [uiQpIdxBest]);662 pcSlice ->setSliceQpBase ( m_viRdPicQp [uiQpIdxBest] ); 663 #endif 664 setUpLambda(pcSlice, m_vdRdPicLambda[uiQpIdxBest], m_viRdPicQp [uiQpIdxBest]); 706 665 } 707 666 -
TabularUnified branches/SHM-dev/source/Lib/TLibEncoder/TEncSlice.h ¶
r1391 r1540 68 68 // pictures 69 69 TComList<TComPic*>* m_pcListPic; ///< list of pictures 70 TComPicYuv * m_apcPicYuvPred;///< prediction picture buffer71 TComPicYuv * m_apcPicYuvResi;///< residual picture buffer70 TComPicYuv m_picYuvPred; ///< prediction picture buffer 71 TComPicYuv m_picYuvResi; ///< residual picture buffer 72 72 73 73 // processing units … … 91 91 UInt64 m_uiPicDist; ///< total distortion for the picture 92 92 Double m_dPicRdCost; ///< picture-level RD cost 93 Double* m_pdRdPicLambda; ///< array of lambda candidates94 Double* m_pdRdPicQp; ///< array of picture QP candidates (double-type for lambda)95 Int* m_piRdPicQp; ///< array of picture QP candidates (Int-type)93 std::vector<Double> m_vdRdPicLambda; ///< array of lambda candidates 94 std::vector<Double> m_vdRdPicQp; ///< array of picture QP candidates (double-type for lambda) 95 std::vector<Int> m_viRdPicQp; ///< array of picture QP candidates (Int-type) 96 96 TEncRateCtrl* m_pcRateCtrl; ///< Rate control manager 97 97 UInt m_uiSliceIdx;
Note: See TracChangeset for help on using the changeset viewer.