Changeset 1191 in 3DVCSoftware for branches/HTM-14.0-MV-draft-3/source/Lib/TLibDecoder/TDecEntropy.cpp
- Timestamp:
- 15 Apr 2015, 11:36:33 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.0-MV-draft-3/source/Lib/TLibDecoder/TDecEntropy.cpp
r1179 r1191 53 53 } 54 54 55 #if SEC_DEPTH_INTRA_SKIP_MODE_K003356 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 #else66 #if H_3D_SINGLE_DEPTH67 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 #endif77 #endif78 55 79 56 Void TDecEntropy::decodeCUTransquantBypassFlag(TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) … … 111 88 } 112 89 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 149 91 150 92 Void TDecEntropy::decodeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) … … 161 103 { 162 104 m_pcEntropyDecoderIf->parsePartSize( pcCU, uiAbsPartIdx, uiDepth ); 163 #if !HHI_MOVE_SYN_K0052164 #if H_3D_DBBP165 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 #endif170 #endif171 105 } 172 106 … … 176 110 { 177 111 decodeIntraDirModeLuma ( pcCU, uiAbsPartIdx, uiDepth ); 178 #if HHI_MOVE_SYN_K0052179 decodeSDCFlag ( pcCU, uiAbsPartIdx, uiDepth );180 #endif181 #if H_3D_DIM_SDC182 #if H_3D_DISABLE_CHROMA183 #if !HHI_MOVE_SYN_K0052184 if(!pcCU->getSDCFlag(uiAbsPartIdx) && !pcCU->getSlice()->getIsDepth() )185 #else186 if(!pcCU->getSDCFlag(uiAbsPartIdx) && pcCU->getSlice()->getSPS()->getChromaFormatIdc() != 0 )187 #endif188 #else189 if(!pcCU->getSDCFlag(uiAbsPartIdx))190 #endif191 #endif192 112 decodeIntraDirModeChroma( pcCU, uiAbsPartIdx, uiDepth ); 193 113 } … … 239 159 UInt uiPUOffset = ( g_auiPUOffset[UInt( ePartSize )] << ( ( pcCU->getSlice()->getSPS()->getMaxCUDepth() - uiDepth ) << 1 ) ) >> 4; 240 160 241 #if H_3D_IV_MERGE242 TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS_MEM << 1]; // double length for mv of both lists243 UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM];244 #else245 161 TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS << 1]; // double length for mv of both lists 246 162 UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS]; 247 #endif248 #if H_3D_SPIVMP249 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 #endif255 163 for ( UInt ui = 0; ui < pcCU->getSlice()->getMaxNumMergeCand(); ui++ ) 256 164 { … … 262 170 pcSubCU->copyInterPredInfoFrom( pcCU, uiAbsPartIdx, REF_PIC_LIST_0 ); 263 171 pcSubCU->copyInterPredInfoFrom( pcCU, uiAbsPartIdx, REF_PIC_LIST_1 ); 264 #if H_3D_IV_MERGE265 pcSubCU->copyDVInfoFrom( pcCU, uiAbsPartIdx);266 #endif267 #if HHI_MOVE_SYN_K0052268 172 for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset ) 269 173 { … … 274 178 //DTRACE_PU("x1", uiTPelY) 275 179 #endif 276 277 ////// Parse PUs syntax278 180 decodeMergeFlag( pcCU, uiSubPartIdx, uiDepth, uiPartIdx ); 279 181 if ( pcCU->getMergeFlag( uiSubPartIdx ) ) 280 182 { 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 } 282 213 } 283 214 else … … 294 225 } 295 226 } 296 }297 298 ////// Parse CUs extension syntax299 decodeDBBPFlag( pcCU, uiAbsPartIdx, uiDepth );300 decodeSDCFlag ( pcCU, uiAbsPartIdx, uiDepth );301 302 #if H_3D_ARP303 decodeARPW ( pcCU, uiAbsPartIdx, uiDepth );304 #endif305 #if H_3D_IC306 decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );307 #endif308 309 ////// Decode motion vectors310 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_DBBP316 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(uiAbsPartIdx) == false )317 #else318 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 )319 #endif320 {321 pcSubCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth );322 if ( !isMerged )323 {324 #if H_3D_VSP325 Int vspFlag[MRG_MAX_NUM_CANDS_MEM];326 memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);327 #if H_3D_SPIVMP328 memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);329 #endif330 pcSubCU->initAvailableFlags();331 pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);332 pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours333 #if H_3D_SPIVMP334 , pcMvFieldSP, puhInterDirSP335 #endif336 , numValidMergeCand );337 pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag338 #if H_3D_SPIVMP339 , bSPIVMPFlag340 #endif341 , numValidMergeCand );342 pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );343 344 #else345 #if H_3D346 pcSubCU->initAvailableFlags();347 pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);348 pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );349 350 #else351 pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );352 #endif353 #endif354 isMerged = true;355 }356 pcSubCU->setPartSizeSubParts( ePartSize, 0, uiDepth );357 }358 else359 {360 uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);361 #if H_3D_VSP362 Int vspFlag[MRG_MAX_NUM_CANDS_MEM];363 memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);364 #if H_3D_SPIVMP365 memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);366 #endif367 pcSubCU->initAvailableFlags();368 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );369 pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours370 #if H_3D_SPIVMP371 , pcMvFieldSP, puhInterDirSP372 #endif373 ,numValidMergeCand, uiMergeIndex );374 pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag375 #if H_3D_SPIVMP376 , bSPIVMPFlag377 #endif378 ,numValidMergeCand );379 pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );380 #else381 #if H_3D382 pcSubCU->initAvailableFlags();383 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );384 pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );385 #else386 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );387 #endif388 #endif389 }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_VSP402 #if H_3D_DBBP403 if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 && !pcCU->getDBBPFlag( uiAbsPartIdx ) )404 #else405 if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 )406 #endif407 {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 #endif419 }420 }421 #if H_3D_SPIVMP422 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 #endif444 }445 else446 {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 456 227 if ( (pcCU->getInterDir(uiSubPartIdx) == 3) && pcSubCU->isBipredRestriction(uiPartIdx) ) 457 228 { … … 461 232 } 462 233 } 463 #else464 for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset )465 {466 #if H_MV_ENC_DEC_TRAC467 DTRACE_PU_S("=========== prediction_unit ===========\n")468 // ToDo:469 //DTRACE_PU("x0", uiLPelX)470 //DTRACE_PU("x1", uiTPelY)471 #endif472 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_ARP478 decodeARPW ( pcCU, uiAbsPartIdx, uiDepth );479 #endif480 #if H_3D_IC481 decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );482 #endif483 #if H_3D_DBBP484 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(uiAbsPartIdx) == false )485 #else486 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 )487 #endif488 {489 pcSubCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth );490 if ( !isMerged )491 {492 #if H_3D_VSP493 Int vspFlag[MRG_MAX_NUM_CANDS_MEM];494 memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);495 #if H_3D_SPIVMP496 memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);497 #endif498 pcSubCU->initAvailableFlags();499 pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);500 pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours501 #if H_3D_SPIVMP502 , pcMvFieldSP, puhInterDirSP503 #endif504 , numValidMergeCand );505 pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag506 #if H_3D_SPIVMP507 , bSPIVMPFlag508 #endif509 , numValidMergeCand );510 pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );511 512 #else513 #if H_3D514 pcSubCU->initAvailableFlags();515 pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);516 pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );517 518 #else519 pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );520 #endif521 #endif522 isMerged = true;523 }524 pcSubCU->setPartSizeSubParts( ePartSize, 0, uiDepth );525 }526 else527 {528 uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);529 #if H_3D_VSP530 Int vspFlag[MRG_MAX_NUM_CANDS_MEM];531 memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);532 #if H_3D_SPIVMP533 memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);534 #endif535 pcSubCU->initAvailableFlags();536 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );537 pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours538 #if H_3D_SPIVMP539 , pcMvFieldSP, puhInterDirSP540 #endif541 ,numValidMergeCand, uiMergeIndex );542 pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag543 #if H_3D_SPIVMP544 , bSPIVMPFlag545 #endif546 ,numValidMergeCand );547 pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );548 #else549 #if H_3D550 pcSubCU->initAvailableFlags();551 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );552 pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );553 #else554 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );555 #endif556 #endif557 }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_VSP570 #if H_3D_DBBP571 if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 && !pcCU->getDBBPFlag( uiAbsPartIdx ) )572 #else573 if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 )574 #endif575 {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 #endif587 }588 }589 #if H_3D_SPIVMP590 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 #endif612 }613 else614 {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_ARP626 decodeARPW ( pcCU, uiAbsPartIdx, uiDepth );627 #endif628 #if H_3D_IC629 decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );630 #endif631 }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 #endif640 #if H_3D_SPIVMP641 delete[] pcMvFieldSP;642 delete[] puhInterDirSP;643 #endif644 234 return; 645 235 } … … 706 296 } 707 297 708 #if HHI_MOVE_SYN_K0052709 298 Void TDecEntropy::decodeMVPIdxPU( TComDataCU* pcSubCU, UInt uiPartAddr, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList ) 710 299 { 711 300 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; 712 311 713 312 if ( (pcSubCU->getInterDir(uiPartAddr) & ( 1 << eRefList )) ) … … 727 326 #endif 728 327 } 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 #else757 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_TRAC775 #if ENC_DEC_TRACE776 if ( eRefList == REF_PIC_LIST_0 )777 {778 DTRACE_PU("mvp_l0_flag", iMVPIdx)779 }780 else781 {782 DTRACE_PU("mvp_l1_flag", iMVPIdx)783 }784 #endif785 #endif786 }787 328 pcSubCU->fillMvpCand(uiPartIdx, uiPartAddr, eRefList, iRefIdx, pAMVPInfo); 788 329 pcSubCU->setMVPNumSubParts(pAMVPInfo->iN, eRefList, uiPartAddr, uiPartIdx, uiDepth); … … 797 338 pcSubCU->getCUMvField( eRefList )->setAllMv(cMv, ePartSize, uiPartAddr, 0, uiPartIdx); 798 339 } 799 #endif800 340 Void TDecEntropy::xDecodeTransform( TComDataCU* pcCU, UInt offsetLuma, UInt offsetChroma, UInt uiAbsPartIdx, UInt uiDepth, UInt width, UInt height, UInt uiTrIdx, Bool& bCodeDQP, Int quadtreeTULog2MinSizeInCU) 801 341 { … … 866 406 if( bFirstCbfOfCU || uiLog2TrafoSize > 2 ) 867 407 { 868 #if H_3D_DISABLE_CHROMA869 if (pcCU->getSlice()->getSPS()->getChromaFormatIdc() != 0 )870 {871 408 if( bFirstCbfOfCU || pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrDepth - 1 ) ) 872 409 { … … 877 414 m_pcEntropyDecoderIf->parseQtCbf( pcCU, uiAbsPartIdx, TEXT_CHROMA_V, uiTrDepth, uiDepth ); 878 415 } 879 }880 else881 {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 #else892 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 #endif901 416 } 902 417 else … … 1054 569 UInt uiLumaOffset = uiMinCoeffSize*uiAbsPartIdx; 1055 570 UInt uiChromaOffset = uiLumaOffset>>2; 1056 #if H_3D_DIM_SDC1057 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_CHROMA1063 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 #else1069 assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_U) == 1 );1070 assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 );1071 #endif1072 }1073 1074 #if H_3D_INTER_SDC1075 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 #endif1082 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 else1098 {1099 m_pcEntropyDecoderIf->parseDeltaDC( pcCU, uiAbsPartIdx, uiDepth );1100 return;1101 }1102 }1103 #endif1104 571 1105 572 if( pcCU->isIntra(uiAbsPartIdx) ) … … 1127 594 } 1128 595 1129 #if H_3D_INTER_SDC1130 Void TDecEntropy::decodeSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )1131 {1132 pcCU->setSDCFlagSubParts( false, uiAbsPartIdx, uiDepth );1133 #if HHI_MOVE_SYN_K00521134 if ( pcCU->isSkipped( uiAbsPartIdx ) )1135 {1136 return;1137 }1138 #endif1139 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 #endif1156 #if H_3D_DBBP1157 Void TDecEntropy::decodeDBBPFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )1158 {1159 #if HHI_MOVE_SYN_K00521160 if( pcCU->getSlice()->getDepthBasedBlkPartFlag() && (pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2NxN || pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_Nx2N) && pcCU->getWidth(uiAbsPartIdx) > 8 && pcCU->getSlice()->getDefaultRefViewIdxAvailableFlag() )1161 {1162 #endif1163 m_pcEntropyDecoderIf->parseDBBPFlag( pcCU, uiAbsPartIdx, uiDepth );1164 #if HHI_MOVE_SYN_K00521165 }1166 #endif1167 }1168 #endif1169 596 1170 597 //! \}
Note: See TracChangeset for help on using the changeset viewer.