Ignore:
Timestamp:
13 Feb 2014, 22:58:51 (10 years ago)
Author:
tech
Message:

Integrated following MV-HEVC HLS 7 items:

H_MV_HLS7_GEN Stub for further integrations (not tested)
H_MV_HLS_7_OUTPUT_LAYERS_5_10_22_27
Output layer sets, various

(VPS/P0300/alt output layer flag) #27 Change alt output layer flag to be signalled within the loop of output layer sets, from JCTVC-P0300-v2. Decision: Adopt.
(VPS/P0156/Num of output_layer_flag) #10 Proposal 3: The output_layer_flag[ i ][ j ] is signalled for j equal to 0 to NumLayersInIdList[ lsIdx ] inclusive. It was remarked that we might be able to just assume that the top layer is always output; however, this was not entirely clear , so the safe thing to do may be to also send the flag for this layer.
(VPS/P0295/Default output layer sets) #5 Discussion from (P0110). Decision: Three-state approach (text in P0295, decoder shall allow 3 to be present and shall treat 3 the same as the value 2).

H_MV_HLS_7_HRD_P0156_7 (HRD/P0156/MaxSubLayersInLayerSetMinus1) #7 Proposal 1: signal, in the VPS extension, the DPB parameters for an output layer set for sub-DPBs only up to the maximum temporal sub-layers in the corresponding layer set
H_MV_HLS_7_VPS_P0048_14
(VPS/P0048/profile_ref_minus1 rem) #14 Remove profile_ref_minus1 from the VPS extension, from JCTVC-P0048
H_MV_HLS_7_VPS_P0076_15 (VPS/P0076/video signal info move) #15 Move video signal information syntax structure earlier in the VPS VUI.
H_MV_HLS_7_SPS_P0155_16_32
(SPS/P0155/sps_sub_layer_ordering_info) #16, #32 Not signal the sps_max_num_reorder_pics[], sps_max_latency_increase_plus1[], and sps_max_dec_pic_buffering_minus1[] syntax elements in the SPS when nuh_layer_id > 0.
H_MV_HLS_7_GEN_P0166_PPS_EXTENSION (GEN/P0166/pps_extension) #17 Add PPS extension type flags for conditional presence of syntax extensions per extension type, aligned with the SPS extension type flags, from JCTVC-P0166. Further align the SPS extension type flags syntax between RExt and MV-HEVC/SHVC
H_MV_HLS_7_FIX_SET_DPB_SIZE
Fix derivation dpb size parameters
H_MV_HLS_7_RESERVED_FLAGS Added flags

(SPS/P0312/SHVC reserved flag) The flag will be used for the syntax vert_phase_position_enable_flag in SHVC draft
(VPS/O0215/SHVC reserved flag): this flag will be used for the syntax cross_layer_phase_alignment_flag in SHVC draft.
(VPS VUI/O0199,P0312/SHVC reserved flags) the 3 reserved bits will be used for the syntaxes single_layer_for_non_irap_flag, higher_layer_irap_skip_flag and vert_phase_position_not_in_use_flag in SHVC draft.

H_MV_FIX_VPS_LAYER_ID_NOT_EQUAL_ZERO Discard VPS with nuh_layer_Id > 0
H_MV_HLS_7_MISC_P0130_EOS
(MISC/P0130/EOS NAL layer id) #19 Require that end of bitstream NAL unit shall have nuh_layer_id equal to 0, from JCTVC-P0130. Decoders shall allow an end of bitstream NAL unit with nuh_layer_id > 0 to be present, and shall ignore the NAL unit.
H_MV_HLS_7_MISC_P0182_13 (MISC/P0182/BL PS Compatibility flag) #13 Define the flag (in VPS VUI) with the proposed semantics, without specifying an associated extraction process. Editors to select the position in the VPS VUI.
H_MV_HLS_7_MISC_P0068_21
(MISC/P0068/all irap idr flag) #21 Add flag in VUI to indicate that all IRAP pictures are IDRs and that all layer pictures in an AU are IDR aligned, from JCTVC-P0068 proposal 1.
H_MV_HLS_7_FIX_INFER_CROSS_LAYER_IRAP_ALIGNED_FLAG Fix inference of cross_layer_irap_aligned_flag
H_MV_HLS_7_MISC_P0079_18
(MISC/P0079/NumActiveRefLayerPics) #18 Modification of derivation of variable NumActiveRefLayerPics.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-10.0-dev0/source/Lib/TLibEncoder/TEncSearch.cpp

    r852 r854  
    39503950        pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
    39513951        pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
     3952
    39523953#if NTT_STORE_SPDV_VSP_G0148
    39533954      }
     
    40424043  m_cYuvPredTemp.clear();
    40434044  rpcPredYuv->clear();
    4044 
     4045 
    40454046  if ( !bUseRes )
    40464047  {
    40474048    rpcResiYuv->clear();
    40484049  }
    4049 
     4050 
    40504051  rpcRecoYuv->clear();
    4051 
     4052 
    40524053  TComMv        cMvSrchRngLT;
    40534054  TComMv        cMvSrchRngRB;
    4054 
     4055 
    40554056  TComMv        cMvZero;
    40564057  TComMv        TempMv; //kolya
    4057 
     4058 
    40584059  TComMv        cMv[2];
    40594060  TComMv        cMvBi[2];
    40604061  TComMv        cMvTemp[2][33];
    4061 
     4062 
    40624063  Int           iNumPart    = pcCU->getNumPartInter();
    40634064  Int           iNumPredDir = pcCU->getSlice()->isInterP() ? 1 : 2;
    4064 
     4065 
    40654066  TComMv        cMvPred[2][33];
    4066 
     4067 
    40674068  TComMv        cMvPredBi[2][33];
    40684069  Int           aaiMvpIdxBi[2][33];
    4069 
     4070 
    40704071  Int           aaiMvpIdx[2][33];
    40714072  Int           aaiMvpNum[2][33];
    4072 
     4073 
    40734074  AMVPInfo aacAMVPInfo[2][33];
    4074 
     4075 
    40754076  Int           iRefIdx[2]={0,0}; //If un-initialized, may cause SEGV in bi-directional prediction iterative stage.
    40764077  Int           iRefIdxBi[2];
    4077 
     4078 
    40784079  UInt          uiPartAddr;
    40794080  Int           iRoiWidth, iRoiHeight;
    4080 
     4081 
    40814082  UInt          uiMbBits[3] = {1, 1, 0};
    4082 
     4083 
    40834084  UInt          uiLastMode = 0;
    40844085  Int           iRefStart, iRefEnd;
    4085 
     4086 
    40864087  PartSize      ePartSize = pcCU->getPartitionSize( 0 );
    40874088
     
    41104111    UInt          uiCostBi  =   MAX_UINT;
    41114112    UInt          uiCostTemp;
    4112 
     4113   
    41134114    UInt          uiBits[3];
    41144115    UInt          uiBitsTemp;
     
    41354136
    41364137    xGetBlkBits( ePartSize, pcCU->getSlice()->isInterP(), iPartIdx, uiLastMode, uiMbBits);
    4137 
     4138   
    41384139    pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iRoiWidth, iRoiHeight );
    41394140
     
    41414142    pcCU->setVSPFlagSubParts( 0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr) );
    41424143#endif
    4143 
     4144   
    41444145#if AMP_MRG
    41454146    Bool bTestNormalMC = true;
     
    41524153      bTestNormalMC = false;
    41534154    }
    4154 
     4155   
    41554156    if (bTestNormalMC)
    41564157    {
    41574158#endif
    41584159
    4159       //  Uni-directional prediction
    4160       for ( Int iRefList = 0; iRefList < iNumPredDir; iRefList++ )
    4161       {
     4160    //  Uni-directional prediction
     4161    for ( Int iRefList = 0; iRefList < iNumPredDir; iRefList++ )
     4162    {
     4163      RefPicList  eRefPicList = ( iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 );
     4164     
     4165      for ( Int iRefIdxTemp = 0; iRefIdxTemp < pcCU->getSlice()->getNumRefIdx(eRefPicList); iRefIdxTemp++ )
     4166      {
     4167        uiBitsTemp = uiMbBits[iRefList];
     4168        if ( pcCU->getSlice()->getNumRefIdx(eRefPicList) > 1 )
     4169        {
     4170          uiBitsTemp += iRefIdxTemp+1;
     4171          if ( iRefIdxTemp == pcCU->getSlice()->getNumRefIdx(eRefPicList)-1 ) uiBitsTemp--;
     4172        }
     4173#if ZERO_MVD_EST
     4174        xEstimateMvPredAMVP( pcCU, pcOrgYuv, iPartIdx, eRefPicList, iRefIdxTemp, cMvPred[iRefList][iRefIdxTemp], false, &biPDistTemp, &uiZeroMvdDistTemp);
     4175#else
     4176        xEstimateMvPredAMVP( pcCU, pcOrgYuv, iPartIdx, eRefPicList, iRefIdxTemp, cMvPred[iRefList][iRefIdxTemp], false, &biPDistTemp);
     4177#endif
     4178        aaiMvpIdx[iRefList][iRefIdxTemp] = pcCU->getMVPIdx(eRefPicList, uiPartAddr);
     4179        aaiMvpNum[iRefList][iRefIdxTemp] = pcCU->getMVPNum(eRefPicList, uiPartAddr);
     4180       
     4181        if(pcCU->getSlice()->getMvdL1ZeroFlag() && iRefList==1 && biPDistTemp < bestBiPDist)
     4182        {
     4183          bestBiPDist = biPDistTemp;
     4184          bestBiPMvpL1 = aaiMvpIdx[iRefList][iRefIdxTemp];
     4185          bestBiPRefIdxL1 = iRefIdxTemp;
     4186        }
     4187
     4188        uiBitsTemp += m_auiMVPIdxCost[aaiMvpIdx[iRefList][iRefIdxTemp]][AMVP_MAX_NUM_CANDS];
     4189#if ZERO_MVD_EST
     4190        if ( iRefList == 0 || pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) < 0 )
     4191        {
     4192          uiZeroMvdBitsTemp = uiBitsTemp;
     4193          uiZeroMvdBitsTemp += 2; //zero mvd bits
     4194
     4195          m_pcRdCost->getMotionCost( 1, 0 );
     4196          uiZeroMvdCostTemp = uiZeroMvdDistTemp + m_pcRdCost->getCost(uiZeroMvdBitsTemp);
     4197
     4198          if (uiZeroMvdCostTemp < uiZeroMvdCost)
     4199          {
     4200            uiZeroMvdCost = uiZeroMvdCostTemp;
     4201            iZeroMvdDir = iRefList + 1;
     4202            aiZeroMvdRefIdx[iRefList] = iRefIdxTemp;
     4203            aiZeroMvdMvpIdx[iRefList] = aaiMvpIdx[iRefList][iRefIdxTemp];
     4204            auiZeroMvdBits[iRefList] = uiZeroMvdBitsTemp;
     4205          }         
     4206        }
     4207#endif
     4208       
     4209#if GPB_SIMPLE_UNI
     4210        if ( iRefList == 1 )    // list 1
     4211        {
     4212          if ( pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) >= 0 )
     4213          {
     4214            cMvTemp[1][iRefIdxTemp] = cMvTemp[0][pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )];
     4215            uiCostTemp = uiCostTempL0[pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )];
     4216            /*first subtract the bit-rate part of the cost of the other list*/
     4217            uiCostTemp -= m_pcRdCost->getCost( uiBitsTempL0[pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )] );
     4218            /*correct the bit-rate part of the current ref*/
     4219            m_pcRdCost->setPredictor  ( cMvPred[iRefList][iRefIdxTemp] );
     4220            uiBitsTemp += m_pcRdCost->getBits( cMvTemp[1][iRefIdxTemp].getHor(), cMvTemp[1][iRefIdxTemp].getVer() );
     4221            /*calculate the correct cost*/
     4222            uiCostTemp += m_pcRdCost->getCost( uiBitsTemp );
     4223          }
     4224          else
     4225          {
     4226            xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
     4227          }
     4228        }
     4229        else
     4230        {
     4231          xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
     4232        }
     4233#else
     4234        xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
     4235#endif
     4236        xCopyAMVPInfo(pcCU->getCUMvField(eRefPicList)->getAMVPInfo(), &aacAMVPInfo[iRefList][iRefIdxTemp]); // must always be done ( also when AMVP_MODE = AM_NONE )
     4237        xCheckBestMVP(pcCU, eRefPicList, cMvTemp[iRefList][iRefIdxTemp], cMvPred[iRefList][iRefIdxTemp], aaiMvpIdx[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp);
     4238
     4239        if ( iRefList == 0 )
     4240        {
     4241          uiCostTempL0[iRefIdxTemp] = uiCostTemp;
     4242          uiBitsTempL0[iRefIdxTemp] = uiBitsTemp;
     4243        }
     4244        if ( uiCostTemp < uiCost[iRefList] )
     4245        {
     4246          uiCost[iRefList] = uiCostTemp;
     4247          uiBits[iRefList] = uiBitsTemp; // storing for bi-prediction
     4248
     4249          // set motion
     4250          cMv[iRefList]     = cMvTemp[iRefList][iRefIdxTemp];
     4251          iRefIdx[iRefList] = iRefIdxTemp;
     4252        }
     4253
     4254        if ( iRefList == 1 && uiCostTemp < costValidList1 && pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) < 0 )
     4255        {
     4256          costValidList1 = uiCostTemp;
     4257          bitsValidList1 = uiBitsTemp;
     4258
     4259          // set motion
     4260          mvValidList1     = cMvTemp[iRefList][iRefIdxTemp];
     4261          refIdxValidList1 = iRefIdxTemp;
     4262        }
     4263      }
     4264    }
     4265    //  Bi-directional prediction
     4266    if ( (pcCU->getSlice()->isInterB()) && (pcCU->isBipredRestriction(iPartIdx) == false) )
     4267    {
     4268     
     4269      cMvBi[0] = cMv[0];            cMvBi[1] = cMv[1];
     4270      iRefIdxBi[0] = iRefIdx[0];    iRefIdxBi[1] = iRefIdx[1];
     4271     
     4272      ::memcpy(cMvPredBi, cMvPred, sizeof(cMvPred));
     4273      ::memcpy(aaiMvpIdxBi, aaiMvpIdx, sizeof(aaiMvpIdx));
     4274     
     4275      UInt uiMotBits[2];
     4276
     4277      if(pcCU->getSlice()->getMvdL1ZeroFlag())
     4278      {
     4279        xCopyAMVPInfo(&aacAMVPInfo[1][bestBiPRefIdxL1], pcCU->getCUMvField(REF_PIC_LIST_1)->getAMVPInfo());
     4280        pcCU->setMVPIdxSubParts( bestBiPMvpL1, REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4281        aaiMvpIdxBi[1][bestBiPRefIdxL1] = bestBiPMvpL1;
     4282        cMvPredBi[1][bestBiPRefIdxL1]   = pcCU->getCUMvField(REF_PIC_LIST_1)->getAMVPInfo()->m_acMvCand[bestBiPMvpL1];
     4283
     4284        cMvBi[1] = cMvPredBi[1][bestBiPRefIdxL1];
     4285        iRefIdxBi[1] = bestBiPRefIdxL1;
     4286        pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMv( cMvBi[1], ePartSize, uiPartAddr, 0, iPartIdx );
     4287        pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllRefIdx( iRefIdxBi[1], ePartSize, uiPartAddr, 0, iPartIdx );
     4288        TComYuv* pcYuvPred = &m_acYuvPred[1];
     4289        motionCompensation( pcCU, pcYuvPred, REF_PIC_LIST_1, iPartIdx );
     4290
     4291        uiMotBits[0] = uiBits[0] - uiMbBits[0];
     4292        uiMotBits[1] = uiMbBits[1];
     4293
     4294        if ( pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1) > 1 )
     4295        {
     4296          uiMotBits[1] += bestBiPRefIdxL1+1;
     4297          if ( bestBiPRefIdxL1 == pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1)-1 ) uiMotBits[1]--;
     4298        }
     4299
     4300        uiMotBits[1] += m_auiMVPIdxCost[aaiMvpIdxBi[1][bestBiPRefIdxL1]][AMVP_MAX_NUM_CANDS];
     4301
     4302        uiBits[2] = uiMbBits[2] + uiMotBits[0] + uiMotBits[1];
     4303
     4304        cMvTemp[1][bestBiPRefIdxL1] = cMvBi[1];
     4305      }
     4306      else
     4307      {
     4308        uiMotBits[0] = uiBits[0] - uiMbBits[0];
     4309        uiMotBits[1] = uiBits[1] - uiMbBits[1];
     4310        uiBits[2] = uiMbBits[2] + uiMotBits[0] + uiMotBits[1];
     4311      }
     4312
     4313      // 4-times iteration (default)
     4314      Int iNumIter = 4;
     4315     
     4316      // fast encoder setting: only one iteration
     4317      if ( m_pcEncCfg->getUseFastEnc() || pcCU->getSlice()->getMvdL1ZeroFlag())
     4318      {
     4319        iNumIter = 1;
     4320      }
     4321     
     4322      for ( Int iIter = 0; iIter < iNumIter; iIter++ )
     4323      {
     4324       
     4325        Int         iRefList    = iIter % 2;
     4326        if ( m_pcEncCfg->getUseFastEnc() )
     4327        {
     4328          if( uiCost[0] <= uiCost[1] )
     4329          {
     4330            iRefList = 1;
     4331          }
     4332          else
     4333          {
     4334            iRefList = 0;
     4335          }
     4336        }
     4337        else if ( iIter == 0 )
     4338        {
     4339          iRefList = 0;
     4340        }
     4341        if ( iIter == 0 && !pcCU->getSlice()->getMvdL1ZeroFlag())
     4342        {
     4343          pcCU->getCUMvField(RefPicList(1-iRefList))->setAllMv( cMv[1-iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
     4344          pcCU->getCUMvField(RefPicList(1-iRefList))->setAllRefIdx( iRefIdx[1-iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
     4345          TComYuv*  pcYuvPred = &m_acYuvPred[1-iRefList];
     4346          motionCompensation ( pcCU, pcYuvPred, RefPicList(1-iRefList), iPartIdx );
     4347        }
    41624348        RefPicList  eRefPicList = ( iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 );
    41634349
    4164         for ( Int iRefIdxTemp = 0; iRefIdxTemp < pcCU->getSlice()->getNumRefIdx(eRefPicList); iRefIdxTemp++ )
    4165         {
    4166           uiBitsTemp = uiMbBits[iRefList];
     4350        if(pcCU->getSlice()->getMvdL1ZeroFlag())
     4351        {
     4352          iRefList = 0;
     4353          eRefPicList = REF_PIC_LIST_0;
     4354        }
     4355
     4356        Bool bChanged = false;
     4357       
     4358        iRefStart = 0;
     4359        iRefEnd   = pcCU->getSlice()->getNumRefIdx(eRefPicList)-1;
     4360       
     4361        for ( Int iRefIdxTemp = iRefStart; iRefIdxTemp <= iRefEnd; iRefIdxTemp++ )
     4362        {
     4363          uiBitsTemp = uiMbBits[2] + uiMotBits[1-iRefList];
    41674364          if ( pcCU->getSlice()->getNumRefIdx(eRefPicList) > 1 )
    41684365          {
     
    41704367            if ( iRefIdxTemp == pcCU->getSlice()->getNumRefIdx(eRefPicList)-1 ) uiBitsTemp--;
    41714368          }
     4369          uiBitsTemp += m_auiMVPIdxCost[aaiMvpIdxBi[iRefList][iRefIdxTemp]][AMVP_MAX_NUM_CANDS];
     4370          // call ME
     4371          xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPredBi[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp, true );
     4372          xCopyAMVPInfo(&aacAMVPInfo[iRefList][iRefIdxTemp], pcCU->getCUMvField(eRefPicList)->getAMVPInfo());
     4373          xCheckBestMVP(pcCU, eRefPicList, cMvTemp[iRefList][iRefIdxTemp], cMvPredBi[iRefList][iRefIdxTemp], aaiMvpIdxBi[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp);
     4374
     4375          if ( uiCostTemp < uiCostBi )
     4376          {
     4377            bChanged = true;
     4378           
     4379            cMvBi[iRefList]     = cMvTemp[iRefList][iRefIdxTemp];
     4380            iRefIdxBi[iRefList] = iRefIdxTemp;
     4381           
     4382            uiCostBi            = uiCostTemp;
     4383            uiMotBits[iRefList] = uiBitsTemp - uiMbBits[2] - uiMotBits[1-iRefList];
     4384            uiBits[2]           = uiBitsTemp;
     4385           
     4386            if(iNumIter!=1)
     4387            {
     4388              //  Set motion
     4389              pcCU->getCUMvField( eRefPicList )->setAllMv( cMvBi[iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
     4390              pcCU->getCUMvField( eRefPicList )->setAllRefIdx( iRefIdxBi[iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
     4391
     4392              TComYuv* pcYuvPred = &m_acYuvPred[iRefList];
     4393              motionCompensation( pcCU, pcYuvPred, eRefPicList, iPartIdx );
     4394            }
     4395          }
     4396        } // for loop-iRefIdxTemp
     4397       
     4398        if ( !bChanged )
     4399        {
     4400          if ( uiCostBi <= uiCost[0] && uiCostBi <= uiCost[1] )
     4401          {
     4402            xCopyAMVPInfo(&aacAMVPInfo[0][iRefIdxBi[0]], pcCU->getCUMvField(REF_PIC_LIST_0)->getAMVPInfo());
     4403            xCheckBestMVP(pcCU, REF_PIC_LIST_0, cMvBi[0], cMvPredBi[0][iRefIdxBi[0]], aaiMvpIdxBi[0][iRefIdxBi[0]], uiBits[2], uiCostBi);
     4404            if(!pcCU->getSlice()->getMvdL1ZeroFlag())
     4405            {
     4406              xCopyAMVPInfo(&aacAMVPInfo[1][iRefIdxBi[1]], pcCU->getCUMvField(REF_PIC_LIST_1)->getAMVPInfo());
     4407              xCheckBestMVP(pcCU, REF_PIC_LIST_1, cMvBi[1], cMvPredBi[1][iRefIdxBi[1]], aaiMvpIdxBi[1][iRefIdxBi[1]], uiBits[2], uiCostBi);
     4408            }
     4409          }
     4410          break;
     4411        }
     4412      } // for loop-iter
     4413    } // if (B_SLICE)
    41724414#if ZERO_MVD_EST
    4173           xEstimateMvPredAMVP( pcCU, pcOrgYuv, iPartIdx, eRefPicList, iRefIdxTemp, cMvPred[iRefList][iRefIdxTemp], false, &biPDistTemp, &uiZeroMvdDistTemp);
    4174 #else
    4175           xEstimateMvPredAMVP( pcCU, pcOrgYuv, iPartIdx, eRefPicList, iRefIdxTemp, cMvPred[iRefList][iRefIdxTemp], false, &biPDistTemp);
    4176 #endif
    4177           aaiMvpIdx[iRefList][iRefIdxTemp] = pcCU->getMVPIdx(eRefPicList, uiPartAddr);
    4178           aaiMvpNum[iRefList][iRefIdxTemp] = pcCU->getMVPNum(eRefPicList, uiPartAddr);
    4179 
    4180           if(pcCU->getSlice()->getMvdL1ZeroFlag() && iRefList==1 && biPDistTemp < bestBiPDist)
     4415    if ( (pcCU->getSlice()->isInterB()) && (pcCU->isBipredRestriction(iPartIdx) == false) )
     4416    {
     4417      m_pcRdCost->getMotionCost( 1, 0 );
     4418
     4419      for ( Int iL0RefIdxTemp = 0; iL0RefIdxTemp <= pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_0)-1; iL0RefIdxTemp++ )
     4420      for ( Int iL1RefIdxTemp = 0; iL1RefIdxTemp <= pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1)-1; iL1RefIdxTemp++ )
     4421      {
     4422        UInt uiRefIdxBitsTemp = 0;
     4423        if ( pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_0) > 1 )
     4424        {
     4425          uiRefIdxBitsTemp += iL0RefIdxTemp+1;
     4426          if ( iL0RefIdxTemp == pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_0)-1 ) uiRefIdxBitsTemp--;
     4427        }
     4428        if ( pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1) > 1 )
     4429        {
     4430          uiRefIdxBitsTemp += iL1RefIdxTemp+1;
     4431          if ( iL1RefIdxTemp == pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1)-1 ) uiRefIdxBitsTemp--;
     4432        }
     4433
     4434        Int iL0MVPIdx = 0;
     4435        Int iL1MVPIdx = 0;
     4436
     4437        for (iL0MVPIdx = 0; iL0MVPIdx < aaiMvpNum[0][iL0RefIdxTemp]; iL0MVPIdx++)
     4438        {
     4439          for (iL1MVPIdx = 0; iL1MVPIdx < aaiMvpNum[1][iL1RefIdxTemp]; iL1MVPIdx++)
    41814440          {
    4182             bestBiPDist = biPDistTemp;
    4183             bestBiPMvpL1 = aaiMvpIdx[iRefList][iRefIdxTemp];
    4184             bestBiPRefIdxL1 = iRefIdxTemp;
    4185           }
    4186 
    4187           uiBitsTemp += m_auiMVPIdxCost[aaiMvpIdx[iRefList][iRefIdxTemp]][AMVP_MAX_NUM_CANDS];
    4188 #if ZERO_MVD_EST
    4189           if ( iRefList == 0 || pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) < 0 )
    4190           {
    4191             uiZeroMvdBitsTemp = uiBitsTemp;
    4192             uiZeroMvdBitsTemp += 2; //zero mvd bits
    4193 
    4194             m_pcRdCost->getMotionCost( 1, 0 );
    4195             uiZeroMvdCostTemp = uiZeroMvdDistTemp + m_pcRdCost->getCost(uiZeroMvdBitsTemp);
    4196 
     4441            uiZeroMvdBitsTemp = uiRefIdxBitsTemp;
     4442            uiZeroMvdBitsTemp += uiMbBits[2];
     4443            uiZeroMvdBitsTemp += m_auiMVPIdxCost[iL0MVPIdx][aaiMvpNum[0][iL0RefIdxTemp]] + m_auiMVPIdxCost[iL1MVPIdx][aaiMvpNum[1][iL1RefIdxTemp]];
     4444            uiZeroMvdBitsTemp += 4; //zero mvd for both directions
     4445            pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( aacAMVPInfo[0][iL0RefIdxTemp].m_acMvCand[iL0MVPIdx], iL0RefIdxTemp, ePartSize, uiPartAddr, iPartIdx, 0 );
     4446            pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( aacAMVPInfo[1][iL1RefIdxTemp].m_acMvCand[iL1MVPIdx], iL1RefIdxTemp, ePartSize, uiPartAddr, iPartIdx, 0 );
     4447 
     4448            xGetInterPredictionError( pcCU, pcOrgYuv, iPartIdx, uiZeroMvdDistTemp, m_pcEncCfg->getUseHADME() );
     4449            uiZeroMvdCostTemp = uiZeroMvdDistTemp + m_pcRdCost->getCost( uiZeroMvdBitsTemp );
    41974450            if (uiZeroMvdCostTemp < uiZeroMvdCost)
    41984451            {
    41994452              uiZeroMvdCost = uiZeroMvdCostTemp;
    4200               iZeroMvdDir = iRefList + 1;
    4201               aiZeroMvdRefIdx[iRefList] = iRefIdxTemp;
    4202               aiZeroMvdMvpIdx[iRefList] = aaiMvpIdx[iRefList][iRefIdxTemp];
    4203               auiZeroMvdBits[iRefList] = uiZeroMvdBitsTemp;
    4204             }         
    4205           }
    4206 #endif
    4207 
    4208 #if GPB_SIMPLE_UNI
    4209           if ( iRefList == 1 )    // list 1
    4210           {
    4211             if ( pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) >= 0 )
    4212             {
    4213               cMvTemp[1][iRefIdxTemp] = cMvTemp[0][pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )];
    4214               uiCostTemp = uiCostTempL0[pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )];
    4215               /*first subtract the bit-rate part of the cost of the other list*/
    4216               uiCostTemp -= m_pcRdCost->getCost( uiBitsTempL0[pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp )] );
    4217               /*correct the bit-rate part of the current ref*/
    4218               m_pcRdCost->setPredictor  ( cMvPred[iRefList][iRefIdxTemp] );
    4219               uiBitsTemp += m_pcRdCost->getBits( cMvTemp[1][iRefIdxTemp].getHor(), cMvTemp[1][iRefIdxTemp].getVer() );
    4220               /*calculate the correct cost*/
    4221               uiCostTemp += m_pcRdCost->getCost( uiBitsTemp );
    4222             }
    4223             else
    4224             {
    4225               xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
     4453              iZeroMvdDir = 3;
     4454              aiZeroMvdMvpIdx[0] = iL0MVPIdx;
     4455              aiZeroMvdMvpIdx[1] = iL1MVPIdx;
     4456              aiZeroMvdRefIdx[0] = iL0RefIdxTemp;
     4457              aiZeroMvdRefIdx[1] = iL1RefIdxTemp;
     4458              auiZeroMvdBits[2] = uiZeroMvdBitsTemp;
    42264459            }
    42274460          }
    4228           else
    4229           {
    4230             xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
    4231           }
    4232 #else
    4233           xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPred[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp );
    4234 #endif
    4235           xCopyAMVPInfo(pcCU->getCUMvField(eRefPicList)->getAMVPInfo(), &aacAMVPInfo[iRefList][iRefIdxTemp]); // must always be done ( also when AMVP_MODE = AM_NONE )
    4236           xCheckBestMVP(pcCU, eRefPicList, cMvTemp[iRefList][iRefIdxTemp], cMvPred[iRefList][iRefIdxTemp], aaiMvpIdx[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp);
    4237 
    4238           if ( iRefList == 0 )
    4239           {
    4240             uiCostTempL0[iRefIdxTemp] = uiCostTemp;
    4241             uiBitsTempL0[iRefIdxTemp] = uiBitsTemp;
    4242           }
    4243           if ( uiCostTemp < uiCost[iRefList] )
    4244           {
    4245             uiCost[iRefList] = uiCostTemp;
    4246             uiBits[iRefList] = uiBitsTemp; // storing for bi-prediction
    4247 
    4248             // set motion
    4249             cMv[iRefList]     = cMvTemp[iRefList][iRefIdxTemp];
    4250             iRefIdx[iRefList] = iRefIdxTemp;
    4251           }
    4252 
    4253           if ( iRefList == 1 && uiCostTemp < costValidList1 && pcCU->getSlice()->getList1IdxToList0Idx( iRefIdxTemp ) < 0 )
    4254           {
    4255             costValidList1 = uiCostTemp;
    4256             bitsValidList1 = uiBitsTemp;
    4257 
    4258             // set motion
    4259             mvValidList1     = cMvTemp[iRefList][iRefIdxTemp];
    4260             refIdxValidList1 = iRefIdxTemp;
    4261           }
    4262         }
    4263       }
    4264       //  Bi-directional prediction
    4265       if ( (pcCU->getSlice()->isInterB()) && (pcCU->isBipredRestriction(iPartIdx) == false) )
    4266       {
    4267 
    4268         cMvBi[0] = cMv[0];            cMvBi[1] = cMv[1];
    4269         iRefIdxBi[0] = iRefIdx[0];    iRefIdxBi[1] = iRefIdx[1];
    4270 
    4271         ::memcpy(cMvPredBi, cMvPred, sizeof(cMvPred));
    4272         ::memcpy(aaiMvpIdxBi, aaiMvpIdx, sizeof(aaiMvpIdx));
    4273 
    4274         UInt uiMotBits[2];
    4275 
    4276         if(pcCU->getSlice()->getMvdL1ZeroFlag())
    4277         {
    4278           xCopyAMVPInfo(&aacAMVPInfo[1][bestBiPRefIdxL1], pcCU->getCUMvField(REF_PIC_LIST_1)->getAMVPInfo());
    4279           pcCU->setMVPIdxSubParts( bestBiPMvpL1, REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4280           aaiMvpIdxBi[1][bestBiPRefIdxL1] = bestBiPMvpL1;
    4281           cMvPredBi[1][bestBiPRefIdxL1]   = pcCU->getCUMvField(REF_PIC_LIST_1)->getAMVPInfo()->m_acMvCand[bestBiPMvpL1];
    4282 
    4283           cMvBi[1] = cMvPredBi[1][bestBiPRefIdxL1];
    4284           iRefIdxBi[1] = bestBiPRefIdxL1;
    4285           pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMv( cMvBi[1], ePartSize, uiPartAddr, 0, iPartIdx );
    4286           pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllRefIdx( iRefIdxBi[1], ePartSize, uiPartAddr, 0, iPartIdx );
    4287           TComYuv* pcYuvPred = &m_acYuvPred[1];
    4288           motionCompensation( pcCU, pcYuvPred, REF_PIC_LIST_1, iPartIdx );
    4289 
    4290           uiMotBits[0] = uiBits[0] - uiMbBits[0];
    4291           uiMotBits[1] = uiMbBits[1];
    4292 
    4293           if ( pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1) > 1 )
    4294           {
    4295             uiMotBits[1] += bestBiPRefIdxL1+1;
    4296             if ( bestBiPRefIdxL1 == pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1)-1 ) uiMotBits[1]--;
    4297           }
    4298 
    4299           uiMotBits[1] += m_auiMVPIdxCost[aaiMvpIdxBi[1][bestBiPRefIdxL1]][AMVP_MAX_NUM_CANDS];
    4300 
    4301           uiBits[2] = uiMbBits[2] + uiMotBits[0] + uiMotBits[1];
    4302 
    4303           cMvTemp[1][bestBiPRefIdxL1] = cMvBi[1];
    4304         }
    4305         else
    4306         {
    4307           uiMotBits[0] = uiBits[0] - uiMbBits[0];
    4308           uiMotBits[1] = uiBits[1] - uiMbBits[1];
    4309           uiBits[2] = uiMbBits[2] + uiMotBits[0] + uiMotBits[1];
    4310         }
    4311 
    4312         // 4-times iteration (default)
    4313         Int iNumIter = 4;
    4314 
    4315         // fast encoder setting: only one iteration
    4316         if ( m_pcEncCfg->getUseFastEnc() || pcCU->getSlice()->getMvdL1ZeroFlag())
    4317         {
    4318           iNumIter = 1;
    4319         }
    4320 
    4321         for ( Int iIter = 0; iIter < iNumIter; iIter++ )
    4322         {
    4323 
    4324           Int         iRefList    = iIter % 2;
    4325           if ( m_pcEncCfg->getUseFastEnc() )
    4326           {
    4327             if( uiCost[0] <= uiCost[1] )
    4328             {
    4329               iRefList = 1;
    4330             }
    4331             else
    4332             {
    4333               iRefList = 0;
    4334             }
    4335           }
    4336           else if ( iIter == 0 )
    4337           {
    4338             iRefList = 0;
    4339           }
    4340           if ( iIter == 0 && !pcCU->getSlice()->getMvdL1ZeroFlag())
    4341           {
    4342             pcCU->getCUMvField(RefPicList(1-iRefList))->setAllMv( cMv[1-iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
    4343             pcCU->getCUMvField(RefPicList(1-iRefList))->setAllRefIdx( iRefIdx[1-iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
    4344             TComYuv*  pcYuvPred = &m_acYuvPred[1-iRefList];
    4345             motionCompensation ( pcCU, pcYuvPred, RefPicList(1-iRefList), iPartIdx );
    4346           }
    4347           RefPicList  eRefPicList = ( iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 );
    4348 
    4349           if(pcCU->getSlice()->getMvdL1ZeroFlag())
    4350           {
    4351             iRefList = 0;
    4352             eRefPicList = REF_PIC_LIST_0;
    4353           }
    4354 
    4355           Bool bChanged = false;
    4356 
    4357           iRefStart = 0;
    4358           iRefEnd   = pcCU->getSlice()->getNumRefIdx(eRefPicList)-1;
    4359 
    4360           for ( Int iRefIdxTemp = iRefStart; iRefIdxTemp <= iRefEnd; iRefIdxTemp++ )
    4361           {
    4362             uiBitsTemp = uiMbBits[2] + uiMotBits[1-iRefList];
    4363             if ( pcCU->getSlice()->getNumRefIdx(eRefPicList) > 1 )
    4364             {
    4365               uiBitsTemp += iRefIdxTemp+1;
    4366               if ( iRefIdxTemp == pcCU->getSlice()->getNumRefIdx(eRefPicList)-1 ) uiBitsTemp--;
    4367             }
    4368             uiBitsTemp += m_auiMVPIdxCost[aaiMvpIdxBi[iRefList][iRefIdxTemp]][AMVP_MAX_NUM_CANDS];
    4369             // call ME
    4370             xMotionEstimation ( pcCU, pcOrgYuv, iPartIdx, eRefPicList, &cMvPredBi[iRefList][iRefIdxTemp], iRefIdxTemp, cMvTemp[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp, true );
    4371             xCopyAMVPInfo(&aacAMVPInfo[iRefList][iRefIdxTemp], pcCU->getCUMvField(eRefPicList)->getAMVPInfo());
    4372             xCheckBestMVP(pcCU, eRefPicList, cMvTemp[iRefList][iRefIdxTemp], cMvPredBi[iRefList][iRefIdxTemp], aaiMvpIdxBi[iRefList][iRefIdxTemp], uiBitsTemp, uiCostTemp);
    4373 
    4374             if ( uiCostTemp < uiCostBi )
    4375             {
    4376               bChanged = true;
    4377 
    4378               cMvBi[iRefList]     = cMvTemp[iRefList][iRefIdxTemp];
    4379               iRefIdxBi[iRefList] = iRefIdxTemp;
    4380 
    4381               uiCostBi            = uiCostTemp;
    4382               uiMotBits[iRefList] = uiBitsTemp - uiMbBits[2] - uiMotBits[1-iRefList];
    4383               uiBits[2]           = uiBitsTemp;
    4384 
    4385               if(iNumIter!=1)
    4386               {
    4387                 //  Set motion
    4388                 pcCU->getCUMvField( eRefPicList )->setAllMv( cMvBi[iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
    4389                 pcCU->getCUMvField( eRefPicList )->setAllRefIdx( iRefIdxBi[iRefList], ePartSize, uiPartAddr, 0, iPartIdx );
    4390 
    4391                 TComYuv* pcYuvPred = &m_acYuvPred[iRefList];
    4392                 motionCompensation( pcCU, pcYuvPred, eRefPicList, iPartIdx );
    4393               }
    4394             }
    4395           } // for loop-iRefIdxTemp
    4396 
    4397           if ( !bChanged )
    4398           {
    4399             if ( uiCostBi <= uiCost[0] && uiCostBi <= uiCost[1] )
    4400             {
    4401               xCopyAMVPInfo(&aacAMVPInfo[0][iRefIdxBi[0]], pcCU->getCUMvField(REF_PIC_LIST_0)->getAMVPInfo());
    4402               xCheckBestMVP(pcCU, REF_PIC_LIST_0, cMvBi[0], cMvPredBi[0][iRefIdxBi[0]], aaiMvpIdxBi[0][iRefIdxBi[0]], uiBits[2], uiCostBi);
    4403               if(!pcCU->getSlice()->getMvdL1ZeroFlag())
    4404               {
    4405                 xCopyAMVPInfo(&aacAMVPInfo[1][iRefIdxBi[1]], pcCU->getCUMvField(REF_PIC_LIST_1)->getAMVPInfo());
    4406                 xCheckBestMVP(pcCU, REF_PIC_LIST_1, cMvBi[1], cMvPredBi[1][iRefIdxBi[1]], aaiMvpIdxBi[1][iRefIdxBi[1]], uiBits[2], uiCostBi);
    4407               }
    4408             }
    4409             break;
    4410           }
    4411         } // for loop-iter
    4412       } // if (B_SLICE)
    4413 #if ZERO_MVD_EST
    4414       if ( (pcCU->getSlice()->isInterB()) && (pcCU->isBipredRestriction(iPartIdx) == false) )
    4415       {
    4416         m_pcRdCost->getMotionCost( 1, 0 );
    4417 
    4418         for ( Int iL0RefIdxTemp = 0; iL0RefIdxTemp <= pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_0)-1; iL0RefIdxTemp++ )
    4419           for ( Int iL1RefIdxTemp = 0; iL1RefIdxTemp <= pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1)-1; iL1RefIdxTemp++ )
    4420           {
    4421             UInt uiRefIdxBitsTemp = 0;
    4422             if ( pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_0) > 1 )
    4423             {
    4424               uiRefIdxBitsTemp += iL0RefIdxTemp+1;
    4425               if ( iL0RefIdxTemp == pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_0)-1 ) uiRefIdxBitsTemp--;
    4426             }
    4427             if ( pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1) > 1 )
    4428             {
    4429               uiRefIdxBitsTemp += iL1RefIdxTemp+1;
    4430               if ( iL1RefIdxTemp == pcCU->getSlice()->getNumRefIdx(REF_PIC_LIST_1)-1 ) uiRefIdxBitsTemp--;
    4431             }
    4432 
    4433             Int iL0MVPIdx = 0;
    4434             Int iL1MVPIdx = 0;
    4435 
    4436             for (iL0MVPIdx = 0; iL0MVPIdx < aaiMvpNum[0][iL0RefIdxTemp]; iL0MVPIdx++)
    4437             {
    4438               for (iL1MVPIdx = 0; iL1MVPIdx < aaiMvpNum[1][iL1RefIdxTemp]; iL1MVPIdx++)
    4439               {
    4440                 uiZeroMvdBitsTemp = uiRefIdxBitsTemp;
    4441                 uiZeroMvdBitsTemp += uiMbBits[2];
    4442                 uiZeroMvdBitsTemp += m_auiMVPIdxCost[iL0MVPIdx][aaiMvpNum[0][iL0RefIdxTemp]] + m_auiMVPIdxCost[iL1MVPIdx][aaiMvpNum[1][iL1RefIdxTemp]];
    4443                 uiZeroMvdBitsTemp += 4; //zero mvd for both directions
    4444                 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( aacAMVPInfo[0][iL0RefIdxTemp].m_acMvCand[iL0MVPIdx], iL0RefIdxTemp, ePartSize, uiPartAddr, iPartIdx, 0 );
    4445                 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( aacAMVPInfo[1][iL1RefIdxTemp].m_acMvCand[iL1MVPIdx], iL1RefIdxTemp, ePartSize, uiPartAddr, iPartIdx, 0 );
    4446 
    4447                 xGetInterPredictionError( pcCU, pcOrgYuv, iPartIdx, uiZeroMvdDistTemp, m_pcEncCfg->getUseHADME() );
    4448                 uiZeroMvdCostTemp = uiZeroMvdDistTemp + m_pcRdCost->getCost( uiZeroMvdBitsTemp );
    4449                 if (uiZeroMvdCostTemp < uiZeroMvdCost)
    4450                 {
    4451                   uiZeroMvdCost = uiZeroMvdCostTemp;
    4452                   iZeroMvdDir = 3;
    4453                   aiZeroMvdMvpIdx[0] = iL0MVPIdx;
    4454                   aiZeroMvdMvpIdx[1] = iL1MVPIdx;
    4455                   aiZeroMvdRefIdx[0] = iL0RefIdxTemp;
    4456                   aiZeroMvdRefIdx[1] = iL1RefIdxTemp;
    4457                   auiZeroMvdBits[2] = uiZeroMvdBitsTemp;
    4458                 }
    4459               }
    4460             }
    4461           }
    4462       }
     4461        }
     4462      }
     4463    }
    44634464#endif
    44644465
     
    44764477    pcCU->setMVPIdxSubParts( -1, REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    44774478    pcCU->setMVPNumSubParts( -1, REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4478 
     4479   
    44794480    UInt uiMEBits = 0;
    44804481    // Set Motion Field_
     
    44884489#endif
    44894490#if ZERO_MVD_EST
    4490       if (uiZeroMvdCost <= uiCostBi && uiZeroMvdCost <= uiCost[0] && uiZeroMvdCost <= uiCost[1])
    4491       {
    4492         if (iZeroMvdDir == 3)
    4493         {
    4494           uiLastMode = 2;
    4495 
    4496           pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( aacAMVPInfo[0][aiZeroMvdRefIdx[0]].m_acMvCand[aiZeroMvdMvpIdx[0]], aiZeroMvdRefIdx[0], ePartSize, uiPartAddr, iPartIdx, 0 );
    4497           pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( aacAMVPInfo[1][aiZeroMvdRefIdx[1]].m_acMvCand[aiZeroMvdMvpIdx[1]], aiZeroMvdRefIdx[1], ePartSize, uiPartAddr, iPartIdx, 0 );
    4498 
    4499           pcCU->setInterDirSubParts( 3, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
    4500 
    4501           pcCU->setMVPIdxSubParts( aiZeroMvdMvpIdx[0], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4502           pcCU->setMVPNumSubParts( aaiMvpNum[0][aiZeroMvdRefIdx[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4503           pcCU->setMVPIdxSubParts( aiZeroMvdMvpIdx[1], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4504           pcCU->setMVPNumSubParts( aaiMvpNum[1][aiZeroMvdRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4505           uiMEBits = auiZeroMvdBits[2];
    4506         }
    4507         else if (iZeroMvdDir == 1)
    4508         {       
    4509           uiLastMode = 0;
    4510 
    4511           pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( aacAMVPInfo[0][aiZeroMvdRefIdx[0]].m_acMvCand[aiZeroMvdMvpIdx[0]], aiZeroMvdRefIdx[0], ePartSize, uiPartAddr, iPartIdx, 0 );
    4512 
    4513           pcCU->setInterDirSubParts( 1, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
    4514 
    4515           pcCU->setMVPIdxSubParts( aiZeroMvdMvpIdx[0], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4516           pcCU->setMVPNumSubParts( aaiMvpNum[0][aiZeroMvdRefIdx[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4517           uiMEBits = auiZeroMvdBits[0];
    4518         }
    4519         else if (iZeroMvdDir == 2)
    4520         {
    4521           uiLastMode = 1;
    4522 
    4523           pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( aacAMVPInfo[1][aiZeroMvdRefIdx[1]].m_acMvCand[aiZeroMvdMvpIdx[1]], aiZeroMvdRefIdx[1], ePartSize, uiPartAddr, iPartIdx, 0 );
    4524 
    4525           pcCU->setInterDirSubParts( 2, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
    4526 
    4527           pcCU->setMVPIdxSubParts( aiZeroMvdMvpIdx[1], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4528           pcCU->setMVPNumSubParts( aaiMvpNum[1][aiZeroMvdRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4529           uiMEBits = auiZeroMvdBits[1];
    4530         }
    4531         else
    4532         {
    4533           assert(0);
    4534         }
     4491    if (uiZeroMvdCost <= uiCostBi && uiZeroMvdCost <= uiCost[0] && uiZeroMvdCost <= uiCost[1])
     4492    {
     4493      if (iZeroMvdDir == 3)
     4494      {
     4495        uiLastMode = 2;
     4496
     4497        pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( aacAMVPInfo[0][aiZeroMvdRefIdx[0]].m_acMvCand[aiZeroMvdMvpIdx[0]], aiZeroMvdRefIdx[0], ePartSize, uiPartAddr, iPartIdx, 0 );
     4498        pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( aacAMVPInfo[1][aiZeroMvdRefIdx[1]].m_acMvCand[aiZeroMvdMvpIdx[1]], aiZeroMvdRefIdx[1], ePartSize, uiPartAddr, iPartIdx, 0 );
     4499 
     4500        pcCU->setInterDirSubParts( 3, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
     4501       
     4502        pcCU->setMVPIdxSubParts( aiZeroMvdMvpIdx[0], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4503        pcCU->setMVPNumSubParts( aaiMvpNum[0][aiZeroMvdRefIdx[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4504        pcCU->setMVPIdxSubParts( aiZeroMvdMvpIdx[1], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4505        pcCU->setMVPNumSubParts( aaiMvpNum[1][aiZeroMvdRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4506        uiMEBits = auiZeroMvdBits[2];
     4507      }
     4508      else if (iZeroMvdDir == 1)
     4509      {       
     4510        uiLastMode = 0;
     4511
     4512        pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( aacAMVPInfo[0][aiZeroMvdRefIdx[0]].m_acMvCand[aiZeroMvdMvpIdx[0]], aiZeroMvdRefIdx[0], ePartSize, uiPartAddr, iPartIdx, 0 );
     4513
     4514        pcCU->setInterDirSubParts( 1, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
     4515       
     4516        pcCU->setMVPIdxSubParts( aiZeroMvdMvpIdx[0], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4517        pcCU->setMVPNumSubParts( aaiMvpNum[0][aiZeroMvdRefIdx[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4518        uiMEBits = auiZeroMvdBits[0];
     4519      }
     4520      else if (iZeroMvdDir == 2)
     4521      {
     4522        uiLastMode = 1;
     4523
     4524        pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( aacAMVPInfo[1][aiZeroMvdRefIdx[1]].m_acMvCand[aiZeroMvdMvpIdx[1]], aiZeroMvdRefIdx[1], ePartSize, uiPartAddr, iPartIdx, 0 );
     4525
     4526        pcCU->setInterDirSubParts( 2, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
     4527       
     4528        pcCU->setMVPIdxSubParts( aiZeroMvdMvpIdx[1], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4529        pcCU->setMVPNumSubParts( aaiMvpNum[1][aiZeroMvdRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4530        uiMEBits = auiZeroMvdBits[1];
    45354531      }
    45364532      else
    4537 #endif
    4538         if ( uiCostBi <= uiCost[0] && uiCostBi <= uiCost[1])
    4539         {
    4540           uiLastMode = 2;
    4541           pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMv( cMvBi[0], ePartSize, uiPartAddr, 0, iPartIdx );
    4542           pcCU->getCUMvField(REF_PIC_LIST_0)->setAllRefIdx( iRefIdxBi[0], ePartSize, uiPartAddr, 0, iPartIdx );
    4543           pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMv( cMvBi[1], ePartSize, uiPartAddr, 0, iPartIdx );
    4544           pcCU->getCUMvField(REF_PIC_LIST_1)->setAllRefIdx( iRefIdxBi[1], ePartSize, uiPartAddr, 0, iPartIdx );
    4545 
    4546           TempMv = cMvBi[0] - cMvPredBi[0][iRefIdxBi[0]];
    4547           pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvd    ( TempMv,                 ePartSize, uiPartAddr, 0, iPartIdx );
    4548 
    4549           TempMv = cMvBi[1] - cMvPredBi[1][iRefIdxBi[1]];
    4550           pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvd    ( TempMv,                 ePartSize, uiPartAddr, 0, iPartIdx );
    4551 
    4552           pcCU->setInterDirSubParts( 3, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
    4553 
    4554           pcCU->setMVPIdxSubParts( aaiMvpIdxBi[0][iRefIdxBi[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4555           pcCU->setMVPNumSubParts( aaiMvpNum[0][iRefIdxBi[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4556           pcCU->setMVPIdxSubParts( aaiMvpIdxBi[1][iRefIdxBi[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4557           pcCU->setMVPNumSubParts( aaiMvpNum[1][iRefIdxBi[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4558 
    4559           uiMEBits = uiBits[2];
    4560         }
    4561         else if ( uiCost[0] <= uiCost[1] )
    4562         {
    4563           uiLastMode = 0;
     4533      {
     4534        assert(0);
     4535      }
     4536    }
     4537    else
     4538#endif
     4539    if ( uiCostBi <= uiCost[0] && uiCostBi <= uiCost[1])
     4540    {
     4541      uiLastMode = 2;
     4542            pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMv( cMvBi[0], ePartSize, uiPartAddr, 0, iPartIdx );
     4543            pcCU->getCUMvField(REF_PIC_LIST_0)->setAllRefIdx( iRefIdxBi[0], ePartSize, uiPartAddr, 0, iPartIdx );
     4544            pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMv( cMvBi[1], ePartSize, uiPartAddr, 0, iPartIdx );
     4545            pcCU->getCUMvField(REF_PIC_LIST_1)->setAllRefIdx( iRefIdxBi[1], ePartSize, uiPartAddr, 0, iPartIdx );
     4546     
     4547        TempMv = cMvBi[0] - cMvPredBi[0][iRefIdxBi[0]];
     4548            pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvd    ( TempMv,                 ePartSize, uiPartAddr, 0, iPartIdx );
     4549     
     4550        TempMv = cMvBi[1] - cMvPredBi[1][iRefIdxBi[1]];
     4551            pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvd    ( TempMv,                 ePartSize, uiPartAddr, 0, iPartIdx );
     4552     
     4553      pcCU->setInterDirSubParts( 3, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
     4554     
     4555      pcCU->setMVPIdxSubParts( aaiMvpIdxBi[0][iRefIdxBi[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4556      pcCU->setMVPNumSubParts( aaiMvpNum[0][iRefIdxBi[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4557      pcCU->setMVPIdxSubParts( aaiMvpIdxBi[1][iRefIdxBi[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4558      pcCU->setMVPNumSubParts( aaiMvpNum[1][iRefIdxBi[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4559
     4560      uiMEBits = uiBits[2];
     4561    }
     4562    else if ( uiCost[0] <= uiCost[1] )
     4563    {
     4564      uiLastMode = 0;
    45644565          pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMv( cMv[0], ePartSize, uiPartAddr, 0, iPartIdx );
    45654566          pcCU->getCUMvField(REF_PIC_LIST_0)->setAllRefIdx( iRefIdx[0], ePartSize, uiPartAddr, 0, iPartIdx );
    4566           TempMv = cMv[0] - cMvPred[0][iRefIdx[0]];
    4567           pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvd    ( TempMv,                 ePartSize, uiPartAddr, 0, iPartIdx );
    4568           pcCU->setInterDirSubParts( 1, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
    4569 
    4570           pcCU->setMVPIdxSubParts( aaiMvpIdx[0][iRefIdx[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4571           pcCU->setMVPNumSubParts( aaiMvpNum[0][iRefIdx[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4572 
    4573           uiMEBits = uiBits[0];
    4574         }
    4575         else
    4576         {
    4577           uiLastMode = 1;
     4567        TempMv = cMv[0] - cMvPred[0][iRefIdx[0]];
     4568            pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvd    ( TempMv,                 ePartSize, uiPartAddr, 0, iPartIdx );
     4569      pcCU->setInterDirSubParts( 1, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
     4570     
     4571      pcCU->setMVPIdxSubParts( aaiMvpIdx[0][iRefIdx[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4572      pcCU->setMVPNumSubParts( aaiMvpNum[0][iRefIdx[0]], REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4573
     4574      uiMEBits = uiBits[0];
     4575    }
     4576    else
     4577    {
     4578      uiLastMode = 1;
    45784579          pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMv( cMv[1], ePartSize, uiPartAddr, 0, iPartIdx );
    45794580          pcCU->getCUMvField(REF_PIC_LIST_1)->setAllRefIdx( iRefIdx[1], ePartSize, uiPartAddr, 0, iPartIdx );
    4580           TempMv = cMv[1] - cMvPred[1][iRefIdx[1]];
    4581           pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvd    ( TempMv,                 ePartSize, uiPartAddr, 0, iPartIdx );
    4582           pcCU->setInterDirSubParts( 2, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
    4583 
    4584           pcCU->setMVPIdxSubParts( aaiMvpIdx[1][iRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4585           pcCU->setMVPNumSubParts( aaiMvpNum[1][iRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4586 
    4587           uiMEBits = uiBits[1];
    4588         }
     4581        TempMv = cMv[1] - cMvPred[1][iRefIdx[1]];
     4582            pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvd    ( TempMv,                 ePartSize, uiPartAddr, 0, iPartIdx );
     4583      pcCU->setInterDirSubParts( 2, uiPartAddr, iPartIdx, pcCU->getDepth(0) );
     4584     
     4585      pcCU->setMVPIdxSubParts( aaiMvpIdx[1][iRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4586      pcCU->setMVPNumSubParts( aaiMvpNum[1][iRefIdx[1]], REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4587
     4588      uiMEBits = uiBits[1];
     4589    }
    45894590#if AMP_MRG
    45904591    } // end if bTestNormalMC
     
    46494650      xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours
    46504651#if H_3D_VSP
    4651         , vspFlag
    4652         , inheritedVSPDisInfo
     4652                      , vspFlag
     4653                      , inheritedVSPDisInfo
    46534654#endif
    46544655#if H_3D_SPIVMP
    4655         , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP
     4656                      , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP
    46564657#endif
    4657         , numValidMergeCand
    4658         );
     4658                      , numValidMergeCand
     4659                      );
    46594660      if ( uiMRGCost < uiMECost )
    46604661      {
     
    46694670        if( uiMRGIndex == pcCU->getUseDDDCandIdx() )
    46704671        {
    4671           assert( vspFlag[uiMRGIndex]     == 0 );
    4672           assert( bSPIVMPFlag[uiMRGIndex] == 0 );
    4673           pcCU->setUseDDD( true, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    4674           pcCU->setDDDepthSubParts( pcCU->getDDTmpDepth(), uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     4672            assert( vspFlag[uiMRGIndex]     == 0 );
     4673            assert( bSPIVMPFlag[uiMRGIndex] == 0 );
     4674            pcCU->setUseDDD( true, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     4675            pcCU->setDDDepthSubParts( pcCU->getDDTmpDepth(), uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    46754676        }
    46764677        else
    46774678        {
    4678           pcCU->setUseDDD( false, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     4679            pcCU->setUseDDD( false, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    46794680        }
    46804681#endif
     
    47044705#if NTT_STORE_SPDV_VSP_G0148
    47054706#if H_3D_DBBP
    4706           if ( vspFlag[uiMRGIndex] && !pcCU->getDBBPFlag(uiPartAddr) )
     4707        if ( vspFlag[uiMRGIndex] && !pcCU->getDBBPFlag(uiPartAddr) )
    47074708#else
    4708           if ( vspFlag[uiMRGIndex] )
    4709 #endif
     4709        if ( vspFlag[uiMRGIndex] )
     4710#endif
     4711        {
     4712          UInt partAddrTemp;
     4713          Int vspSize;
     4714          Int width, height;
     4715          pcCU->getPartIndexAndSize( iPartIdx, partAddrTemp, width, height ); // true or pcCU->getTotalNumPart()==256
     4716          if( uiMRGInterDir & 0x01 )
    47104717          {
    4711             UInt partAddrTemp;
    4712             Int vspSize;
    4713             Int width, height;
    4714             pcCU->getPartIndexAndSize( iPartIdx, partAddrTemp, width, height ); // true or pcCU->getTotalNumPart()==256
    4715             if( uiMRGInterDir & 0x01 )
    4716             {
    4717               pcCU->setMvFieldPUForVSP( pcCU, partAddrTemp, width, height, REF_PIC_LIST_0, cMRGMvField[0].getRefIdx(), vspSize );
    4718               pcCU->setVSPFlag( partAddrTemp, vspSize );
    4719             }
    4720             else
    4721             {
    4722               pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx );
    4723             }
    4724             if( uiMRGInterDir & 0x02 )
    4725             {
    4726               pcCU->setMvFieldPUForVSP( pcCU, partAddrTemp, width, height, REF_PIC_LIST_1, cMRGMvField[1].getRefIdx(), vspSize );
    4727               pcCU->setVSPFlag( partAddrTemp, vspSize );
    4728             }
    4729             else
    4730             {
    4731               pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
    4732             }
    4733             pcCU->setInterDirSubParts  ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     4718            pcCU->setMvFieldPUForVSP( pcCU, partAddrTemp, width, height, REF_PIC_LIST_0, cMRGMvField[0].getRefIdx(), vspSize );
     4719            pcCU->setVSPFlag( partAddrTemp, vspSize );
    47344720          }
    47354721          else
     4722          {
     4723            pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx );
     4724          }
     4725          if( uiMRGInterDir & 0x02 )
     4726          {
     4727            pcCU->setMvFieldPUForVSP( pcCU, partAddrTemp, width, height, REF_PIC_LIST_1, cMRGMvField[1].getRefIdx(), vspSize );
     4728            pcCU->setVSPFlag( partAddrTemp, vspSize );
     4729          }
     4730          else
     4731          {
     4732            pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
     4733          }
     4734          pcCU->setInterDirSubParts  ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     4735        }
     4736        else
    47364737#if H_3D_FIX_G0148_BRACE
    47374738          {
    47384739#endif
    47394740#endif
    4740             pcCU->setInterDirSubParts  ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     4741          pcCU->setInterDirSubParts  ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    47414742            pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx );
    47424743            pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
     
    47444745          }
    47454746#endif
    4746           pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvd    ( cMvZero,            ePartSize, uiPartAddr, 0, iPartIdx );
    4747           pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvd    ( cMvZero,            ePartSize, uiPartAddr, 0, iPartIdx );
    4748 
    4749           pcCU->setMVPIdxSubParts( -1, REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4750           pcCU->setMVPNumSubParts( -1, REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4751           pcCU->setMVPIdxSubParts( -1, REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    4752           pcCU->setMVPNumSubParts( -1, REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4747        pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvd    ( cMvZero,            ePartSize, uiPartAddr, 0, iPartIdx );
     4748        pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvd    ( cMvZero,            ePartSize, uiPartAddr, 0, iPartIdx );
     4749
     4750        pcCU->setMVPIdxSubParts( -1, REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4751        pcCU->setMVPNumSubParts( -1, REF_PIC_LIST_0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4752        pcCU->setMVPIdxSubParts( -1, REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
     4753        pcCU->setMVPNumSubParts( -1, REF_PIC_LIST_1, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr));
    47534754      }
    47544755      else
     
    47674768        pcCU->setDvInfoSubParts(OriginalDvInfo, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    47684769#endif
    4769         pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMEMvField[0], ePartSize, uiPartAddr, 0, iPartIdx );
    4770         pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMEMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
    4771       }
     4770          pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMEMvField[0], ePartSize, uiPartAddr, 0, iPartIdx );
     4771          pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMEMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
     4772        }
    47724773#if H_3D_SPIVMP
    47734774      delete[] pcMvFieldSP;
     
    47784779    //  MC
    47794780    motionCompensation ( pcCU, rpcPredYuv, REF_PIC_LIST_X, iPartIdx );
    4780 
     4781   
    47814782  } //  end of for ( Int iPartIdx = 0; iPartIdx < iNumPart; iPartIdx++ )
    47824783
     
    58035804      dCostBest        = dCost;
    58045805      qpBest           = qp;
    5805       m_pcRDGoOnSbacCoder->store( m_pppcRDSbacCoder[ pcCU->getDepth( 0 ) ][ CI_TEMP_BEST ] );
    5806     }
     5806        m_pcRDGoOnSbacCoder->store( m_pppcRDSbacCoder[ pcCU->getDepth( 0 ) ][ CI_TEMP_BEST ] );
     5807      }
    58075808#if H_3D_VSO // M21
    58085809    if( m_pcRdCost->getUseRenModel() && !m_pcRdCost->getUseEstimatedVSD() )
Note: See TracChangeset for help on using the changeset viewer.