Ignore:
Timestamp:
28 Apr 2013, 08:49:16 (12 years ago)
Author:
seregin
Message:

update to HM10.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-2.0-dev/source/Lib/TLibEncoder/TEncSearch.cpp

    r125 r133  
    32493249    UInt          uiBitsTempL0[MAX_NUM_REF];
    32503250
     3251#if L0034_COMBINED_LIST_CLEANUP
     3252    TComMv        mvValidList1;
     3253    Int           refIdxValidList1 = 0;
     3254    UInt          bitsValidList1 = MAX_UINT;
     3255    UInt          costValidList1 = MAX_UINT;
     3256#endif
     3257
    32513258#if (ENCODER_FAST_MODE)
    32523259    Bool          testILR;
     
    33263333        uiBitsTemp += m_auiMVPIdxCost[aaiMvpIdx[iRefList][iRefIdxTemp]][AMVP_MAX_NUM_CANDS];
    33273334#if ZERO_MVD_EST
     3335#if L0034_COMBINED_LIST_CLEANUP
     3336        if ( iRefList == 0 || pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) < 0 )
     3337#else
    33283338        if ((iRefList != 1 || !pcCU->getSlice()->getNoBackPredFlag()) &&
    33293339            (pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_C) <= 0 || pcCU->getSlice()->getRefIdxOfLC(eRefPicList, iRefIdxTemp)>=0))
     3340#endif
    33303341        {
    33313342          uiZeroMvdBitsTemp = uiBitsTemp;
     
    33473358       
    33483359#if GPB_SIMPLE_UNI
     3360#if L0034_COMBINED_LIST_CLEANUP
     3361        if ( iRefList == 1 )    // list 1
     3362        {
     3363          if ( pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) >= 0 )
     3364          {
     3365            cMvTemp[1][iRefIdxTemp] = cMvTemp[0][pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )];
     3366            uiCostTemp = uiCostTempL0[pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )];
     3367            /*first subtract the bit-rate part of the cost of the other list*/
     3368            uiCostTemp -= m_pcRdCost->getCost( uiBitsTempL0[pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )] );
     3369            /*correct the bit-rate part of the current ref*/
     3370            m_pcRdCost->setPredictor  ( cMvPred[iRefList][iRefIdxTemp] );
     3371            uiBitsTemp += m_pcRdCost->getBits( cMvTemp[1][iRefIdxTemp].getHor(), cMvTemp[1][iRefIdxTemp].getVer() );
     3372            /*calculate the correct cost*/
     3373            uiCostTemp += m_pcRdCost->getCost( uiBitsTemp );
     3374          }
     3375          else
     3376          {
     3377            xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
     3378          }
     3379        }
     3380        else
     3381        {
     3382          xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
     3383        }
     3384#else
    33493385        if ( pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_C) > 0)
    33503386        {
     
    33883424          }       
    33893425        }
     3426#endif
    33903427#else
    33913428        xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
     
    33943431        xCheckBestMVP(pcCU, eRefPicList, cMvTemp[iRefList][iRefIdxTemp], cMvPred[iRefList][iRefIdxTemp], aaiMvpIdx[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp);
    33953432
     3433#if L0034_COMBINED_LIST_CLEANUP
     3434        if ( iRefList == 0 )
     3435        {
     3436          uiCostTempL0[iRefIdxTemp] = uiCostTemp;
     3437          uiBitsTempL0[iRefIdxTemp] = uiBitsTemp;
     3438        }
     3439        if ( uiCostTemp < uiCost[iRefList] )
     3440        {
     3441          uiCost[iRefList] = uiCostTemp;
     3442          uiBits[iRefList] = uiBitsTemp; // storing for bi-prediction
     3443
     3444          // set motion
     3445          cMv[iRefList]     = cMvTemp[iRefList][iRefIdxTemp];
     3446          iRefIdx[iRefList] = iRefIdxTemp;
     3447        }
     3448
     3449        if ( iRefList == 1 && uiCostTemp < costValidList1 && pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) < 0 )
     3450        {
     3451          costValidList1 = uiCostTemp;
     3452          bitsValidList1 = uiBitsTemp;
     3453
     3454          // set motion
     3455          mvValidList1     = cMvTemp[iRefList][iRefIdxTemp];
     3456          refIdxValidList1 = iRefIdxTemp;
     3457        }
     3458#else
    33963459        if(pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_C) > 0 && !pcCU->getSlice()->getNoBackPredFlag())
    33973460        {
     
    34493512            }
    34503513          }
     3514#endif
    34513515      }
    34523516    }
     
    35163580       
    35173581        Int         iRefList    = iIter % 2;
     3582#if L0034_COMBINED_LIST_CLEANUP
     3583        if ( m_pcEncCfg->getUseFastEnc() )
     3584        {
     3585          if( uiCost[0] <= uiCost[1] )
     3586          {
     3587            iRefList = 1;
     3588          }
     3589          else
     3590          {
     3591            iRefList = 0;
     3592          }
     3593        }
     3594        else if ( iIter == 0 )
     3595        {
     3596          iRefList = 0;
     3597        }
     3598        if ( iIter == 0 && !pcCU->getSlice()->getMvdL1ZeroFlag())
     3599        {
     3600          pcCU->getCUMvField(RefPicList(1-iRefList))->setAllMv( cMv[1-iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
     3601          pcCU->getCUMvField(RefPicList(1-iRefList))->setAllRefIdx( iRefIdx[1-iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
     3602          TComYuv*  pcYuvPred = &m_acYuvPred[1-iRefList];
     3603          motionCompensation ( pcCU, pcYuvPred, RefPicList(1-iRefList), iPartIdx );
     3604        }
     3605#else
    35183606        if ( m_pcEncCfg->getUseFastEnc() && (pcCU->getSlice()->getNoBackPredFlag() || (pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_C) > 0 && pcCU->getSlice()->getRefIdxOfL0FromRefIdxOfL1(0)==0 )) )
    35193607        {
    35203608          iRefList = 1;
    35213609        }
     3610#endif
    35223611        RefPicList  eRefPicList = ( iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 );
    35233612
     
    36803769    UInt uiMEBits = 0;
    36813770    // Set Motion Field_
     3771#if L0034_COMBINED_LIST_CLEANUP
     3772    cMv[1] = mvValidList1;
     3773    iRefIdx[1] = refIdxValidList1;
     3774    uiBits[1] = bitsValidList1;
     3775    uiCost[1] = costValidList1;
     3776#else
    36823777    if ( pcCU->getSlice()->getNoBackPredFlag() || (pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_C) > 0 && pcCU->getSlice()->getRefIdxOfL0FromRefIdxOfL1(0)==0 ) )
    36833778    {
    36843779      uiCost[1] = MAX_UINT;
    36853780    }
     3781#endif
    36863782#if AMP_MRG
    36873783    if (bTestNormalMC)
     
    46634759    while( pcCU->getWidth(0) > (pcCU->getSlice()->getSPS()->getMaxTrSize()<<uiTrLevel) ) uiTrLevel++;
    46644760  }
    4665   UInt uiMaxTrMode = pcCU->getSlice()->getSPS()->getMaxTrDepth() + uiTrLevel;
     4761  UInt uiMaxTrMode = 1 + uiTrLevel;
    46664762 
    46674763  while((uiWidth>>uiMaxTrMode) < (g_uiMaxCUWidth>>g_uiMaxCUDepth)) uiMaxTrMode--;
Note: See TracChangeset for help on using the changeset viewer.