Changeset 816 in 3DVCSoftware for branches/HTM-9.3-dev1-RWTH/source/Lib/TLibEncoder/TEncSearch.cpp
- Timestamp:
- 3 Feb 2014, 11:35:43 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-9.3-dev1-RWTH/source/Lib/TLibEncoder/TEncSearch.cpp
r809 r816 3583 3583 pcCU->getPartIndexAndSize( iPUIdx, uiAbsPartIdx, iWidth, iHeight ); 3584 3584 UInt uiDepth = pcCU->getDepth( uiAbsPartIdx ); 3585 3586 #if H_3D_DBBP 3587 DBBPTmpData* pDBBPTmpData = pcCU->getDBBPTmpData(); 3588 if( pcCU->getDBBPFlag(0) ) 3589 { 3590 AOF( uiAbsPartIdx == 0 ); 3591 AOF( iPUIdx == 0 ); 3592 AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N ); 3593 AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE ); 3594 3595 // temporary change of partition size for candidate derivation 3596 pcCU->setPartSizeSubParts( pDBBPTmpData->eVirtualPartSize, 0, pcCU->getDepth(0)); 3597 iPUIdx = pcCU->getDBBPTmpData()->uiVirtualPartIndex; 3598 3599 // if this is handling the second segment, make sure that motion info of first segment is available 3600 if( iPUIdx == 1 ) 3601 { 3602 pcCU->setInterDirSubParts(pDBBPTmpData->auhInterDir[0], 0, 0, pcCU->getDepth(0)); // interprets depth relative to LCU level 3603 3604 pcCU->setVSPFlagSubParts(pDBBPTmpData->ahVSPFlag[0], 0, 0, pcCU->getDepth(0)); 3605 pcCU->setDvInfoSubParts(pDBBPTmpData->acDvInfo[0], 0, 0, pcCU->getDepth(0)); 3606 3607 for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ ) 3608 { 3609 RefPicList eRefList = (RefPicList)uiRefListIdx; 3610 3611 #if NTT_STORE_SPDV_VSP_G0148 3612 if( pcCU->getVSPFlag( 0 ) != 0 ) 3613 { 3614 if ( pcCU->getInterDir(0) & (1<<uiRefListIdx) ) 3615 { 3616 UInt dummy; 3617 Int vspSize; 3618 Int width, height; 3619 pcCU->getPartIndexAndSize( 0, dummy, width, height, 0, pcCU->getTotalNumPart()==256 ); 3620 AOF( dummy == 0 ); 3621 pcCU->setMvFieldPUForVSP( pcCU, 0, width, height, eRefList, pDBBPTmpData->acMvField[0][eRefList].getRefIdx(), vspSize ); 3622 pcCU->setVSPFlag( 0, vspSize ); 3623 } 3624 } 3625 else 3626 #endif 3627 pcCU->getCUMvField( eRefList )->setAllMvField( pDBBPTmpData->acMvField[0][eRefList], pDBBPTmpData->eVirtualPartSize, 0, 0, 0 ); // interprets depth relative to rpcTempCU level 3628 } 3629 } 3630 3631 // update these values to virtual partition size 3632 pcCU->getPartIndexAndSize( iPUIdx, uiAbsPartIdx, iWidth, iHeight ); 3633 } 3634 #endif 3635 3585 3636 PartSize partSize = pcCU->getPartitionSize( 0 ); 3637 #if H_3D_DBBP 3638 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && partSize != SIZE_2Nx2N && pcCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(0) == false ) 3639 #else 3586 3640 if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && partSize != SIZE_2Nx2N && pcCU->getWidth( 0 ) <= 8 ) 3641 #endif 3587 3642 { 3588 3643 pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth ); … … 3634 3689 #endif 3635 3690 3691 #if H_3D_DBBP 3692 if( pcCU->getDBBPFlag(0) ) 3693 { 3694 // reset to 2Nx2N for actual motion search 3695 iPUIdx = 0; 3696 AOF( pcCU->getPartitionSize(0) == pDBBPTmpData->eVirtualPartSize ); 3697 pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, pcCU->getDepth(0)); 3698 3699 // restore values for 2Nx2N partition size 3700 pcCU->getPartIndexAndSize( iPUIdx, uiAbsPartIdx, iWidth, iHeight ); 3701 3702 AOF( uiAbsPartIdx == 0 ); 3703 AOF( iWidth == iHeight ); 3704 } 3705 #endif 3636 3706 3637 3707 ruiCost = MAX_UINT; … … 4346 4416 #endif 4347 4417 4418 #if H_3D_DBBP 4419 // test merge mode for DBBP (2Nx2N) 4420 if ( pcCU->getPartitionSize( uiPartAddr ) != SIZE_2Nx2N || pcCU->getDBBPFlag(0) ) 4421 #else 4348 4422 if ( pcCU->getPartitionSize( uiPartAddr ) != SIZE_2Nx2N ) 4423 #endif 4349 4424 { 4350 4425 UInt uiMRGInterDir = 0; … … 4564 4639 if (!bFilled) 4565 4640 { 4641 #if H_3D_DBBP 4642 DBBPTmpData* pDBBPTmpData = pcCU->getDBBPTmpData(); 4643 if( pcCU->getDBBPFlag(0) ) 4644 { 4645 AOF( uiPartAddr == 0 ); 4646 AOF( uiPartIdx == 0 ); 4647 AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N ); 4648 AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE ); 4649 AOF( iRoiWidth == iRoiHeight ); 4650 4651 // temporary change of partition size for candidate derivation 4652 pcCU->setPartSizeSubParts( pDBBPTmpData->eVirtualPartSize, 0, pcCU->getDepth(0)); 4653 uiPartIdx = pcCU->getDBBPTmpData()->uiVirtualPartIndex; 4654 4655 // if this is handling the second segment, make sure that motion info of first segment is set to first segment 4656 if( uiPartIdx == 1 ) 4657 { 4658 pcCU->setInterDirSubParts(pDBBPTmpData->auhInterDir[0], 0, 0, pcCU->getDepth(0)); // interprets depth relative to LCU level 4659 4660 for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ ) 4661 { 4662 RefPicList eRefList = (RefPicList)uiRefListIdx; 4663 pcCU->getCUMvField( eRefList )->setAllMvField( pDBBPTmpData->acMvField[0][eRefList], pDBBPTmpData->eVirtualPartSize, 0, 0, 0 ); // interprets depth relative to rpcTempCU level 4664 } 4665 } 4666 4667 // update these values to virtual partition size 4668 pcCU->getPartIndexAndSize( uiPartIdx, uiPartAddr, iRoiWidth, iRoiHeight ); 4669 } 4670 #endif 4671 4566 4672 pcCU->fillMvpCand( uiPartIdx, uiPartAddr, eRefPicList, iRefIdx, pcAMVPInfo ); 4673 4674 #if H_3D_DBBP 4675 if( pcCU->getDBBPFlag(0) ) 4676 { 4677 // reset to 2Nx2N for motion search 4678 uiPartIdx = 0; 4679 AOF( pcCU->getPartitionSize(0) == pDBBPTmpData->eVirtualPartSize ); 4680 pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, pcCU->getDepth(0)); 4681 4682 // restore values for 2Nx2N partition size 4683 pcCU->getPartIndexAndSize( uiPartIdx, uiPartAddr, iRoiWidth, iRoiHeight ); 4684 AOF(uiPartAddr==0); 4685 } 4686 #endif 4567 4687 } 4568 4688
Note: See TracChangeset for help on using the changeset viewer.