Ignore:
Timestamp:
15 Apr 2015, 11:36:33 (10 years ago)
Author:
tech
Message:

Removed 3D-HEVC.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-14.0-MV-draft-3/source/Lib/TLibDecoder/TDecEntropy.cpp

    r1179 r1191  
    5353}
    5454
    55 #if SEC_DEPTH_INTRA_SKIP_MODE_K0033
    56 Void TDecEntropy::decodeDIS( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    57 {
    58   if( !pcCU->getSlice()->getDepthIntraSkipFlag() )
    59   {
    60     return;
    61   } 
    62 
    63   m_pcEntropyDecoderIf->parseDIS( pcCU, uiAbsPartIdx, uiDepth );
    64 }
    65 #else
    66 #if H_3D_SINGLE_DEPTH
    67 Void TDecEntropy::decodeSingleDepthMode( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    68 {
    69   if( !pcCU->getSlice()->getIntraSingleFlag() )
    70   {
    71     return;
    72   } 
    73 
    74   m_pcEntropyDecoderIf->parseSingleDepthMode( pcCU, uiAbsPartIdx, uiDepth );
    75 }
    76 #endif
    77 #endif
    7855
    7956Void TDecEntropy::decodeCUTransquantBypassFlag(TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     
    11188}
    11289
    113 #if H_3D_ARP
    114 Void TDecEntropy::decodeARPW( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    115 {
    116   if( !pcCU->getSlice()->getARPStepNum() || pcCU->isIntra( uiAbsPartIdx ) )
    117   {
    118     return;
    119   }
    120 
    121   if( pcCU->getPartitionSize(uiAbsPartIdx) != SIZE_2Nx2N )
    122   {
    123     pcCU->setARPWSubParts( 0 , uiAbsPartIdx, uiDepth );
    124   }
    125   else
    126   {
    127     m_pcEntropyDecoderIf->parseARPW( pcCU , uiAbsPartIdx , uiDepth );
    128   }
    129 }
    130 #endif
    131 
    132 #if H_3D_IC
    133 Void TDecEntropy::decodeICFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    134 {
    135   pcCU->setICFlagSubParts( false , uiAbsPartIdx, 0, uiDepth );
    136 
    137   if ( pcCU->isIntra( uiAbsPartIdx ) || ( pcCU->getSlice()->getViewIndex() == 0 ) || pcCU->getSlice()->getIsDepth() || pcCU->getARPW( uiAbsPartIdx ) > 0 )
    138   {
    139     return;
    140   }
    141 
    142   if( !pcCU->getSlice()->getApplyIC() )
    143     return;
    144 
    145   if( pcCU->isICFlagRequired( uiAbsPartIdx ) )
    146     m_pcEntropyDecoderIf->parseICFlag( pcCU, uiAbsPartIdx, uiDepth );
    147 }
    148 #endif
     90
    14991
    15092Void TDecEntropy::decodeSplitFlag   ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     
    161103{
    162104  m_pcEntropyDecoderIf->parsePartSize( pcCU, uiAbsPartIdx, uiDepth );
    163 #if !HHI_MOVE_SYN_K0052 
    164 #if H_3D_DBBP
    165 if( pcCU->getSlice()->getDepthBasedBlkPartFlag() && (pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2NxN || pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_Nx2N) && pcCU->getWidth(uiAbsPartIdx) > 8 && pcCU->getSlice()->getDefaultRefViewIdxAvailableFlag() )
    166   {
    167     decodeDBBPFlag(pcCU, uiAbsPartIdx, uiDepth);
    168   }
    169 #endif
    170 #endif
    171105}
    172106
     
    176110  {
    177111    decodeIntraDirModeLuma  ( pcCU, uiAbsPartIdx, uiDepth );
    178 #if HHI_MOVE_SYN_K0052
    179     decodeSDCFlag   ( pcCU, uiAbsPartIdx, uiDepth );   
    180 #endif
    181 #if H_3D_DIM_SDC
    182 #if H_3D_DISABLE_CHROMA
    183 #if !HHI_MOVE_SYN_K0052
    184     if(!pcCU->getSDCFlag(uiAbsPartIdx) && !pcCU->getSlice()->getIsDepth() )
    185 #else
    186     if(!pcCU->getSDCFlag(uiAbsPartIdx) && pcCU->getSlice()->getSPS()->getChromaFormatIdc() != 0  )
    187 #endif
    188 #else
    189     if(!pcCU->getSDCFlag(uiAbsPartIdx))
    190 #endif
    191 #endif
    192112    decodeIntraDirModeChroma( pcCU, uiAbsPartIdx, uiDepth );
    193113  }
     
    239159  UInt uiPUOffset = ( g_auiPUOffset[UInt( ePartSize )] << ( ( pcCU->getSlice()->getSPS()->getMaxCUDepth() - uiDepth ) << 1 ) ) >> 4;
    240160
    241 #if H_3D_IV_MERGE
    242   TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS_MEM << 1]; // double length for mv of both lists
    243   UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM];
    244 #else
    245161  TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS << 1]; // double length for mv of both lists
    246162  UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS];
    247 #endif
    248 #if H_3D_SPIVMP
    249   Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];
    250   TComMvField*  pcMvFieldSP;
    251   UChar* puhInterDirSP;
    252   pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartition()*2];
    253   puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartition()];
    254 #endif
    255163  for ( UInt ui = 0; ui < pcCU->getSlice()->getMaxNumMergeCand(); ui++ )
    256164  {
     
    262170  pcSubCU->copyInterPredInfoFrom( pcCU, uiAbsPartIdx, REF_PIC_LIST_0 );
    263171  pcSubCU->copyInterPredInfoFrom( pcCU, uiAbsPartIdx, REF_PIC_LIST_1 );
    264 #if H_3D_IV_MERGE
    265   pcSubCU->copyDVInfoFrom( pcCU, uiAbsPartIdx);
    266 #endif
    267 #if HHI_MOVE_SYN_K0052
    268172  for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset )
    269173  {
     
    274178    //DTRACE_PU("x1", uiTPelY)
    275179#endif
    276 
    277     ////// Parse PUs syntax
    278180    decodeMergeFlag( pcCU, uiSubPartIdx, uiDepth, uiPartIdx );
    279181    if ( pcCU->getMergeFlag( uiSubPartIdx ) )
    280182    {
    281       decodeMergeIndex( pcCU, uiPartIdx, uiSubPartIdx, uiDepth );     
     183      decodeMergeIndex( pcCU, uiPartIdx, uiSubPartIdx, uiDepth );
     184      UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
     185      if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 )
     186      {
     187        pcSubCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth );
     188        if ( !isMerged )
     189        {
     190          pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
     191          isMerged = true;
     192        }
     193        pcSubCU->setPartSizeSubParts( ePartSize, 0, uiDepth );
     194      }
     195      else
     196      {
     197        uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
     198        pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
     199      }
     200      pcCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
     201
     202      TComMv cTmpMv( 0, 0 );
     203      for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
     204      {       
     205        if ( pcCU->getSlice()->getNumRefIdx( RefPicList( uiRefListIdx ) ) > 0 )
     206        {
     207          pcCU->setMVPIdxSubParts( 0, RefPicList( uiRefListIdx ), uiSubPartIdx, uiPartIdx, uiDepth);
     208          pcCU->setMVPNumSubParts( 0, RefPicList( uiRefListIdx ), uiSubPartIdx, uiPartIdx, uiDepth);
     209          pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
     210          pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
     211        }
     212      }
    282213    }
    283214    else
     
    294225      }
    295226    }
    296   }
    297 
    298   ////// Parse CUs extension syntax
    299   decodeDBBPFlag( pcCU, uiAbsPartIdx, uiDepth );
    300   decodeSDCFlag ( pcCU, uiAbsPartIdx, uiDepth );
    301 
    302 #if H_3D_ARP
    303   decodeARPW  ( pcCU, uiAbsPartIdx, uiDepth );
    304 #endif
    305 #if H_3D_IC
    306   decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );
    307 #endif
    308 
    309   ////// Decode motion vectors
    310   for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset )
    311   {
    312     if ( pcCU->getMergeFlag( uiSubPartIdx ) )
    313     {
    314       UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
    315 #if H_3D_DBBP
    316       if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(uiAbsPartIdx) == false )
    317 #else
    318       if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 )
    319 #endif
    320       {
    321         pcSubCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth );
    322         if ( !isMerged )
    323         {
    324 #if H_3D_VSP
    325           Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    326           memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    327 #if H_3D_SPIVMP
    328           memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
    329 #endif
    330           pcSubCU->initAvailableFlags();
    331           pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);
    332           pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours
    333 #if H_3D_SPIVMP
    334             , pcMvFieldSP, puhInterDirSP
    335 #endif
    336             , numValidMergeCand );
    337           pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag
    338 #if H_3D_SPIVMP
    339             , bSPIVMPFlag
    340 #endif
    341             , numValidMergeCand );
    342           pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
    343 
    344 #else
    345 #if H_3D
    346           pcSubCU->initAvailableFlags();
    347           pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);
    348           pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    349 
    350 #else
    351           pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    352 #endif
    353 #endif
    354           isMerged = true;
    355         }
    356         pcSubCU->setPartSizeSubParts( ePartSize, 0, uiDepth );
    357       }
    358       else
    359       {
    360         uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
    361 #if H_3D_VSP
    362         Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    363         memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    364 #if H_3D_SPIVMP
    365         memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
    366 #endif
    367         pcSubCU->initAvailableFlags();
    368         pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    369         pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours
    370 #if H_3D_SPIVMP
    371           , pcMvFieldSP, puhInterDirSP
    372 #endif
    373           ,numValidMergeCand, uiMergeIndex );
    374         pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag
    375 #if H_3D_SPIVMP
    376           , bSPIVMPFlag
    377 #endif
    378           ,numValidMergeCand );
    379         pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
    380 #else
    381 #if H_3D
    382         pcSubCU->initAvailableFlags();
    383         pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    384         pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    385 #else
    386         pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    387 #endif
    388 #endif
    389       }
    390       pcCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
    391 
    392       TComMv cTmpMv( 0, 0 );
    393       for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
    394       {       
    395         if ( pcCU->getSlice()->getNumRefIdx( RefPicList( uiRefListIdx ) ) > 0 )
    396         {
    397           pcCU->setMVPIdxSubParts( 0, RefPicList( uiRefListIdx ), uiSubPartIdx, uiPartIdx, uiDepth);
    398           pcCU->setMVPNumSubParts( 0, RefPicList( uiRefListIdx ), uiSubPartIdx, uiPartIdx, uiDepth);
    399           pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
    400           pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
    401 #if H_3D_VSP
    402 #if H_3D_DBBP
    403           if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 && !pcCU->getDBBPFlag( uiAbsPartIdx ) )
    404 #else
    405           if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 )
    406 #endif
    407           {
    408             if ( uhInterDirNeighbours[ uiMergeIndex ] & (1<<uiRefListIdx) )
    409             {
    410               UInt dummy;
    411               Int vspSize;
    412               Int width, height;
    413               pcCU->getPartIndexAndSize( uiPartIdx, dummy, width, height, uiSubPartIdx, pcCU->getTotalNumPart()==256 );
    414               pcCU->setMvFieldPUForVSP( pcCU, uiSubPartIdx, width, height, RefPicList( uiRefListIdx ), cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getRefIdx(), vspSize );
    415               pcCU->setVSPFlag( uiSubPartIdx, vspSize );
    416             }
    417           }
    418 #endif
    419         }
    420       }
    421 #if H_3D_SPIVMP
    422       pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth ); 
    423       if (bSPIVMPFlag[uiMergeIndex] != 0)
    424       {
    425         Int iWidth, iHeight;
    426         UInt uiIdx;
    427         pcCU->getPartIndexAndSize( uiPartIdx, uiIdx, iWidth, iHeight, uiSubPartIdx, true );
    428 
    429         UInt uiSPAddr;
    430 
    431         Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
    432 
    433         pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
    434 
    435         for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
    436         {
    437           pcCU->getSPAbsPartIdx(uiSubPartIdx, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
    438           pcCU->setInterDirSP(puhInterDirSP[iPartitionIdx], uiSPAddr, iSPWidth, iSPHeight);
    439           pcCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
    440           pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
    441         }
    442       }
    443 #endif
    444     }
    445     else
    446     {
    447       for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
    448       {       
    449         if ( pcCU->getSlice()->getNumRefIdx( RefPicList( uiRefListIdx ) ) > 0 )
    450         {
    451           decodeMvsAMVP   ( pcSubCU, uiSubPartIdx-uiAbsPartIdx, uiDepth, uiPartIdx, RefPicList( uiRefListIdx ) );
    452         }
    453       }
    454     }
    455 
    456227    if ( (pcCU->getInterDir(uiSubPartIdx) == 3) && pcSubCU->isBipredRestriction(uiPartIdx) )
    457228    {
     
    461232    }
    462233  }
    463 #else
    464   for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset )
    465   {
    466 #if H_MV_ENC_DEC_TRAC
    467     DTRACE_PU_S("=========== prediction_unit ===========\n")
    468     // ToDo:
    469     //DTRACE_PU("x0", uiLPelX)
    470     //DTRACE_PU("x1", uiTPelY)
    471 #endif
    472     decodeMergeFlag( pcCU, uiSubPartIdx, uiDepth, uiPartIdx );
    473     if ( pcCU->getMergeFlag( uiSubPartIdx ) )
    474     {
    475       decodeMergeIndex( pcCU, uiPartIdx, uiSubPartIdx, uiDepth );
    476       UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
    477 #if H_3D_ARP
    478       decodeARPW  ( pcCU, uiAbsPartIdx, uiDepth );
    479 #endif
    480 #if H_3D_IC
    481       decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );
    482 #endif
    483 #if H_3D_DBBP
    484       if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(uiAbsPartIdx) == false )
    485 #else
    486       if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 )
    487 #endif
    488       {
    489         pcSubCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth );
    490         if ( !isMerged )
    491         {
    492 #if H_3D_VSP
    493           Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    494           memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    495 #if H_3D_SPIVMP
    496           memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
    497 #endif
    498           pcSubCU->initAvailableFlags();
    499           pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);
    500           pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours
    501 #if H_3D_SPIVMP
    502             , pcMvFieldSP, puhInterDirSP
    503 #endif
    504             , numValidMergeCand );
    505           pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag
    506 #if H_3D_SPIVMP
    507             , bSPIVMPFlag
    508 #endif
    509             , numValidMergeCand );
    510           pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
    511 
    512 #else
    513 #if H_3D
    514           pcSubCU->initAvailableFlags();
    515           pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);
    516           pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    517 
    518 #else
    519           pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    520 #endif
    521 #endif
    522           isMerged = true;
    523         }
    524         pcSubCU->setPartSizeSubParts( ePartSize, 0, uiDepth );
    525       }
    526       else
    527       {
    528         uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
    529 #if H_3D_VSP
    530         Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    531         memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    532 #if H_3D_SPIVMP
    533         memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
    534 #endif
    535         pcSubCU->initAvailableFlags();
    536         pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    537         pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours
    538 #if H_3D_SPIVMP
    539           , pcMvFieldSP, puhInterDirSP
    540 #endif
    541           ,numValidMergeCand, uiMergeIndex );
    542         pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag
    543 #if H_3D_SPIVMP
    544           , bSPIVMPFlag
    545 #endif
    546           ,numValidMergeCand );
    547         pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
    548 #else
    549 #if H_3D
    550         pcSubCU->initAvailableFlags();
    551         pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    552         pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    553 #else
    554         pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    555 #endif
    556 #endif
    557       }
    558       pcCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
    559 
    560       TComMv cTmpMv( 0, 0 );
    561       for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
    562       {       
    563         if ( pcCU->getSlice()->getNumRefIdx( RefPicList( uiRefListIdx ) ) > 0 )
    564         {
    565           pcCU->setMVPIdxSubParts( 0, RefPicList( uiRefListIdx ), uiSubPartIdx, uiPartIdx, uiDepth);
    566           pcCU->setMVPNumSubParts( 0, RefPicList( uiRefListIdx ), uiSubPartIdx, uiPartIdx, uiDepth);
    567           pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
    568           pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
    569 #if H_3D_VSP
    570 #if H_3D_DBBP
    571           if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 && !pcCU->getDBBPFlag( uiAbsPartIdx ) )
    572 #else
    573           if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 )
    574 #endif
    575           {
    576             if ( uhInterDirNeighbours[ uiMergeIndex ] & (1<<uiRefListIdx) )
    577             {
    578               UInt dummy;
    579               Int vspSize;
    580               Int width, height;
    581               pcCU->getPartIndexAndSize( uiPartIdx, dummy, width, height, uiSubPartIdx, pcCU->getTotalNumPart()==256 );
    582               pcCU->setMvFieldPUForVSP( pcCU, uiSubPartIdx, width, height, RefPicList( uiRefListIdx ), cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getRefIdx(), vspSize );
    583               pcCU->setVSPFlag( uiSubPartIdx, vspSize );
    584             }
    585           }
    586 #endif
    587         }
    588       }
    589 #if H_3D_SPIVMP
    590       pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth ); 
    591       if (bSPIVMPFlag[uiMergeIndex] != 0)
    592       {
    593         Int iWidth, iHeight;
    594         UInt uiIdx;
    595         pcCU->getPartIndexAndSize( uiPartIdx, uiIdx, iWidth, iHeight, uiSubPartIdx, true );
    596 
    597         UInt uiSPAddr;
    598 
    599         Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
    600 
    601         pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
    602 
    603         for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
    604         {
    605           pcCU->getSPAbsPartIdx(uiSubPartIdx, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
    606           pcCU->setInterDirSP(puhInterDirSP[iPartitionIdx], uiSPAddr, iSPWidth, iSPHeight);
    607           pcCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
    608           pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
    609         }
    610       }
    611 #endif
    612     }
    613     else
    614     {
    615       decodeInterDirPU( pcCU, uiSubPartIdx, uiDepth, uiPartIdx );
    616       for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
    617       {       
    618         if ( pcCU->getSlice()->getNumRefIdx( RefPicList( uiRefListIdx ) ) > 0 )
    619         {
    620           decodeRefFrmIdxPU( pcCU,    uiSubPartIdx,              uiDepth, uiPartIdx, RefPicList( uiRefListIdx ) );
    621           decodeMvdPU      ( pcCU,    uiSubPartIdx,              uiDepth, uiPartIdx, RefPicList( uiRefListIdx ) );
    622           decodeMVPIdxPU   ( pcSubCU, uiSubPartIdx-uiAbsPartIdx, uiDepth, uiPartIdx, RefPicList( uiRefListIdx ) );
    623         }
    624       }
    625 #if H_3D_ARP
    626       decodeARPW  ( pcCU, uiAbsPartIdx, uiDepth );
    627 #endif
    628 #if H_3D_IC
    629       decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );
    630 #endif
    631     }
    632     if ( (pcCU->getInterDir(uiSubPartIdx) == 3) && pcSubCU->isBipredRestriction(uiPartIdx) )
    633     {
    634       pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMv( TComMv(0,0), ePartSize, uiSubPartIdx, uiDepth, uiPartIdx);
    635       pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllRefIdx( -1, ePartSize, uiSubPartIdx, uiDepth, uiPartIdx);
    636       pcCU->setInterDirSubParts( 1, uiSubPartIdx, uiPartIdx, uiDepth);
    637     }
    638   }
    639 #endif
    640 #if H_3D_SPIVMP
    641   delete[] pcMvFieldSP;
    642   delete[] puhInterDirSP;
    643 #endif
    644234  return;
    645235}
     
    706296}
    707297
    708 #if HHI_MOVE_SYN_K0052
    709298Void TDecEntropy::decodeMVPIdxPU( TComDataCU* pcSubCU, UInt uiPartAddr, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList )
    710299{
    711300  Int iMVPIdx = -1;
     301
     302  TComMv cZeroMv( 0, 0 );
     303  TComMv cMv     = cZeroMv;
     304  Int    iRefIdx = -1;
     305
     306  TComCUMvField* pcSubCUMvField = pcSubCU->getCUMvField( eRefList );
     307  AMVPInfo* pAMVPInfo = pcSubCUMvField->getAMVPInfo();
     308
     309  iRefIdx = pcSubCUMvField->getRefIdx(uiPartAddr);
     310  cMv = cZeroMv;
    712311
    713312  if ( (pcSubCU->getInterDir(uiPartAddr) & ( 1 << eRefList )) )
     
    727326#endif
    728327  }
    729   pcSubCU->setMVPIdxSubParts( iMVPIdx, eRefList, uiPartAddr, uiPartIdx, uiDepth );
    730 }
    731 
    732 Void TDecEntropy::decodeMvsAMVP( TComDataCU* pcSubCU, UInt uiPartAddr, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList )
    733 {
    734   TComMv cZeroMv( 0, 0 );
    735   TComMv cMv     = cZeroMv;
    736   Int    iRefIdx = -1;
    737 
    738   TComCUMvField* pcSubCUMvField = pcSubCU->getCUMvField( eRefList );
    739   AMVPInfo* pAMVPInfo = pcSubCUMvField->getAMVPInfo();
    740 
    741   iRefIdx = pcSubCUMvField->getRefIdx(uiPartAddr);
    742   cMv = cZeroMv;
    743 
    744   pcSubCU->fillMvpCand(uiPartIdx, uiPartAddr, eRefList, iRefIdx, pAMVPInfo);
    745   pcSubCU->setMVPNumSubParts(pAMVPInfo->iN, eRefList, uiPartAddr, uiPartIdx, uiDepth);
    746   if ( iRefIdx >= 0 )
    747   {
    748     m_pcPrediction->getMvPredAMVP( pcSubCU, uiPartIdx, uiPartAddr, eRefList, cMv);
    749     cMv += pcSubCUMvField->getMvd( uiPartAddr );
    750   }
    751 
    752   PartSize ePartSize = pcSubCU->getPartitionSize( uiPartAddr );
    753   pcSubCU->getCUMvField( eRefList )->setAllMv(cMv, ePartSize, uiPartAddr, 0, uiPartIdx);
    754 }
    755 
    756 #else
    757 Void TDecEntropy::decodeMVPIdxPU( TComDataCU* pcSubCU, UInt uiPartAddr, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList )
    758 {
    759   Int iMVPIdx = -1;
    760 
    761   TComMv cZeroMv( 0, 0 );
    762   TComMv cMv     = cZeroMv;
    763   Int    iRefIdx = -1;
    764 
    765   TComCUMvField* pcSubCUMvField = pcSubCU->getCUMvField( eRefList );
    766   AMVPInfo* pAMVPInfo = pcSubCUMvField->getAMVPInfo();
    767 
    768   iRefIdx = pcSubCUMvField->getRefIdx(uiPartAddr);
    769   cMv = cZeroMv;
    770 
    771   if ( (pcSubCU->getInterDir(uiPartAddr) & ( 1 << eRefList )) )
    772   {
    773     m_pcEntropyDecoderIf->parseMVPIdx( iMVPIdx );
    774 #if H_MV_ENC_DEC_TRAC
    775 #if ENC_DEC_TRACE
    776     if ( eRefList == REF_PIC_LIST_0 )
    777     {
    778       DTRACE_PU("mvp_l0_flag", iMVPIdx)
    779     }
    780     else
    781     {
    782       DTRACE_PU("mvp_l1_flag", iMVPIdx)
    783     }
    784 #endif
    785 #endif
    786   }
    787328  pcSubCU->fillMvpCand(uiPartIdx, uiPartAddr, eRefList, iRefIdx, pAMVPInfo);
    788329  pcSubCU->setMVPNumSubParts(pAMVPInfo->iN, eRefList, uiPartAddr, uiPartIdx, uiDepth);
     
    797338  pcSubCU->getCUMvField( eRefList )->setAllMv(cMv, ePartSize, uiPartAddr, 0, uiPartIdx);
    798339}
    799 #endif
    800340Void TDecEntropy::xDecodeTransform( TComDataCU* pcCU, UInt offsetLuma, UInt offsetChroma, UInt uiAbsPartIdx, UInt uiDepth, UInt width, UInt height, UInt uiTrIdx, Bool& bCodeDQP, Int quadtreeTULog2MinSizeInCU)
    801341{
     
    866406    if( bFirstCbfOfCU || uiLog2TrafoSize > 2 )
    867407    {
    868 #if H_3D_DISABLE_CHROMA
    869       if (pcCU->getSlice()->getSPS()->getChromaFormatIdc() != 0 )     
    870       {
    871408      if( bFirstCbfOfCU || pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrDepth - 1 ) )
    872409      {
     
    877414        m_pcEntropyDecoderIf->parseQtCbf( pcCU, uiAbsPartIdx, TEXT_CHROMA_V, uiTrDepth, uiDepth );
    878415      }
    879     }
    880     else
    881     {
    882         if( bFirstCbfOfCU || pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrDepth - 1 ) )
    883         {
    884           pcCU->setCbfSubParts( 0, TEXT_CHROMA_U, uiAbsPartIdx, uiTrDepth - 1 );
    885         }
    886         if( bFirstCbfOfCU || pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiTrDepth - 1 ) )
    887         {
    888           pcCU->setCbfSubParts( 0, TEXT_CHROMA_V, uiAbsPartIdx, uiTrDepth - 1 );
    889         }
    890       }
    891 #else
    892       if( bFirstCbfOfCU || pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrDepth - 1 ) )
    893       {
    894         m_pcEntropyDecoderIf->parseQtCbf( pcCU, uiAbsPartIdx, TEXT_CHROMA_U, uiTrDepth, uiDepth );
    895       }
    896       if( bFirstCbfOfCU || pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiTrDepth - 1 ) )
    897       {
    898         m_pcEntropyDecoderIf->parseQtCbf( pcCU, uiAbsPartIdx, TEXT_CHROMA_V, uiTrDepth, uiDepth );
    899       }
    900 #endif
    901416    }
    902417    else
     
    1054569  UInt uiLumaOffset   = uiMinCoeffSize*uiAbsPartIdx;
    1055570  UInt uiChromaOffset = uiLumaOffset>>2;
    1056 #if H_3D_DIM_SDC
    1057   if( pcCU->getSDCFlag( uiAbsPartIdx ) && pcCU->isIntra( uiAbsPartIdx) )
    1058   {
    1059     assert( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2Nx2N );
    1060     assert( pcCU->getTransformIdx(uiAbsPartIdx) == 0 );
    1061     assert( pcCU->getCbf(uiAbsPartIdx, TEXT_LUMA) == 1 );
    1062 #if H_3D_DISABLE_CHROMA
    1063     if (pcCU->getSlice()->getSPS()->getChromaFormatIdc() != 0 )
    1064     {
    1065       assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_U) == 1 );
    1066       assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 );
    1067     }
    1068 #else
    1069     assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_U) == 1 );
    1070     assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 );
    1071 #endif
    1072   }
    1073 
    1074 #if H_3D_INTER_SDC
    1075   if( pcCU->getSDCFlag( uiAbsPartIdx ) && !pcCU->isIntra( uiAbsPartIdx) )
    1076   {
    1077     assert( !pcCU->isSkipped( uiAbsPartIdx ) );
    1078     assert( !pcCU->isIntra( uiAbsPartIdx) );
    1079     assert( pcCU->getSlice()->getIsDepth() );
    1080   }
    1081 #endif
    1082   if( pcCU->getSlice()->getIsDepth() && ( pcCU->getSDCFlag( uiAbsPartIdx ) || pcCU->isIntra( uiAbsPartIdx ) ) )
    1083   {
    1084     Int iPartNum = ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_NxN ) ? 4 : 1;
    1085     UInt uiPartOffset = ( pcCU->getPic()->getNumPartInCU() >> ( pcCU->getDepth( uiAbsPartIdx ) << 1 ) ) >> 2;
    1086  
    1087     if( !pcCU->getSDCFlag( uiAbsPartIdx ) )
    1088     {
    1089       for( Int iPart = 0; iPart < iPartNum; iPart++ )
    1090       {
    1091         if( getDimType( pcCU->getLumaIntraDir( uiAbsPartIdx + uiPartOffset*iPart ) ) < DIM_NUM_TYPE )
    1092         {
    1093           m_pcEntropyDecoderIf->parseDeltaDC( pcCU, uiAbsPartIdx + uiPartOffset*iPart, uiDepth + ( pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_NxN ) );
    1094         }
    1095       }
    1096     }
    1097     else
    1098     {
    1099       m_pcEntropyDecoderIf->parseDeltaDC( pcCU, uiAbsPartIdx, uiDepth );
    1100       return;
    1101     }
    1102   }
    1103 #endif
    1104571
    1105572  if( pcCU->isIntra(uiAbsPartIdx) )
     
    1127594}
    1128595
    1129 #if H_3D_INTER_SDC
    1130 Void TDecEntropy::decodeSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    1131 {
    1132   pcCU->setSDCFlagSubParts( false, uiAbsPartIdx, uiDepth );
    1133 #if HHI_MOVE_SYN_K0052
    1134   if ( pcCU->isSkipped( uiAbsPartIdx ) )
    1135   {
    1136     return;
    1137   }
    1138 #endif
    1139 
    1140 
    1141   if( ( !pcCU->isIntra( uiAbsPartIdx ) && !pcCU->getSlice()->getInterSdcFlag() ) ||
    1142     ( pcCU->isIntra( uiAbsPartIdx ) && !pcCU->getSlice()->getIntraSdcWedgeFlag() ) )
    1143   {
    1144     return;
    1145   }
    1146 
    1147   if( !pcCU->getSlice()->getIsDepth() || pcCU->getPartitionSize( uiAbsPartIdx ) != SIZE_2Nx2N || pcCU->isSkipped( uiAbsPartIdx ) )
    1148   {
    1149     return;
    1150   }
    1151 
    1152   assert( pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N || ( !pcCU->isIntra( uiAbsPartIdx ) && !pcCU->isSkipped( uiAbsPartIdx ) ) );
    1153   m_pcEntropyDecoderIf->parseSDCFlag( pcCU, uiAbsPartIdx, uiDepth );
    1154 }
    1155 #endif
    1156 #if H_3D_DBBP
    1157 Void TDecEntropy::decodeDBBPFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    1158 {
    1159 #if HHI_MOVE_SYN_K0052
    1160   if( pcCU->getSlice()->getDepthBasedBlkPartFlag() && (pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2NxN || pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_Nx2N) && pcCU->getWidth(uiAbsPartIdx) > 8 && pcCU->getSlice()->getDefaultRefViewIdxAvailableFlag() )
    1161   {
    1162 #endif
    1163     m_pcEntropyDecoderIf->parseDBBPFlag( pcCU, uiAbsPartIdx, uiDepth );
    1164 #if HHI_MOVE_SYN_K0052
    1165   }
    1166 #endif
    1167 }
    1168 #endif
    1169596
    1170597//! \}
Note: See TracChangeset for help on using the changeset viewer.