Changeset 809 in 3DVCSoftware
- Timestamp:
- 29 Jan 2014, 03:07:07 (11 years ago)
- Location:
- branches/HTM-9.3-dev1-NTT
- Files:
-
- 3 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-9.3-dev1-NTT/source/Lib/TLibCommon/TComDataCU.cpp
r801 r809 3539 3539 for ( Int currListPos = (ivCandDir[0] ? 1 : 0); currListPos < iCount; currListPos++ ) 3540 3540 { 3541 #if NTT_STORE_SPDV_VSP_G0148 3542 if ( ( currListPos == posIvDC ) || ( vspFlag[ currListPos ] != 0 ) ) 3543 #else 3541 3544 if ( ( currListPos == posIvDC ) || ( vspFlag[ currListPos ] == 1 ) ) 3545 #endif 3542 3546 { 3543 3547 continue; … … 4052 4056 iPosLeftAbove[0] = numA1B1B0; 4053 4057 #if H_3D_VSP 4058 #if NTT_STORE_SPDV_VSP_G0148 4059 if (pcCULeft->getVSPFlag(uiLeftPartIdx) != 0 4060 #else 4054 4061 if (pcCULeft->getVSPFlag(uiLeftPartIdx) == 1 4062 #endif 4055 4063 #if H_3D_IC 4056 4064 && !bICFlag … … 4075 4083 iPosLeftAbove[1] = numA1B1B0; 4076 4084 #if H_3D_VSP 4085 #if NTT_STORE_SPDV_VSP_G0148 4086 if ( ( ( getAddr() - pcCUAbove->getAddr() ) == 0) && (pcCUAbove->getVSPFlag(uiAbovePartIdx) != 0) 4087 #else 4077 4088 if ( ( ( getAddr() - pcCUAbove->getAddr() ) == 0) && (pcCUAbove->getVSPFlag(uiAbovePartIdx) == 1) 4089 #endif 4078 4090 #if H_3D_IC 4079 4091 && !bICFlag … … 4098 4110 { 4099 4111 #if H_3D_VSP 4112 #if NTT_STORE_SPDV_VSP_G0148 4113 if ( ( ( getAddr() - pcCUAboveRight->getAddr() ) == 0) && (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) != 0) 4114 #else 4100 4115 if ( ( ( getAddr() - pcCUAboveRight->getAddr() ) == 0) && (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) == 1) 4116 #endif 4101 4117 #if H_3D_IC 4102 4118 && !bICFlag … … 4119 4135 { 4120 4136 #if H_3D_VSP 4137 #if NTT_STORE_SPDV_VSP_G0148 4138 if (pcCULeftBottom->getVSPFlag(uiLeftBottomPartIdx) != 0 4139 #else 4121 4140 if (pcCULeftBottom->getVSPFlag(uiLeftBottomPartIdx) == 1 4141 #endif 4122 4142 #if H_3D_IC 4123 4143 && !bICFlag … … 4142 4162 { 4143 4163 #if H_3D_VSP 4164 #if NTT_STORE_SPDV_VSP_G0148 4165 if ( ( ( getAddr() - pcCUAboveLeft->getAddr() ) == 0) && (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) != 0) 4166 #else 4144 4167 if ( ( ( getAddr() - pcCUAboveLeft->getAddr() ) == 0) && (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) == 1) 4168 #endif 4145 4169 #if H_3D_IC 4146 4170 && !bICFlag … … 7869 7893 #endif 7870 7894 7895 #if NTT_STORE_SPDV_VSP_G0148 7896 Void TComDataCU::setMvFieldPUForVSP( TComDataCU* pcCU, UInt partAddr, Int width, Int height, RefPicList eRefPicList, Int iRefIdx, Int &vspSize ) 7897 { 7898 // Get depth reference 7899 Int depthRefViewIdx = pcCU->getDvInfo(partAddr).m_aVIdxCan; 7900 7901 #if H_3D_FCO_VSP_DONBDV_E0163 7902 TComPic* pRefPicBaseDepth = 0; 7903 Bool bIsCurrDepthCoded = false; 7904 pRefPicBaseDepth = pcCU->getSlice()->getIvPic( true, pcCU->getSlice()->getViewIndex() ); 7905 if ( pRefPicBaseDepth->getPicYuvRec() != NULL ) 7906 { 7907 bIsCurrDepthCoded = true; 7908 } 7909 else 7910 { 7911 pRefPicBaseDepth = pcCU->getSlice()->getIvPic (true, depthRefViewIdx ); 7912 } 7913 #else 7914 TComPic* pRefPicBaseDepth = pcCU->getSlice()->getIvPic (true, depthRefViewIdx ); 7915 #endif 7916 assert(pRefPicBaseDepth != NULL); 7917 TComPicYuv* pcBaseViewDepthPicYuv = pRefPicBaseDepth->getPicYuvRec(); 7918 assert(pcBaseViewDepthPicYuv != NULL); 7919 pcBaseViewDepthPicYuv->extendPicBorder(); 7920 7921 // Get texture reference 7922 assert(iRefIdx >= 0); 7923 TComPic* pRefPicBaseTxt = pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx ); 7924 TComPicYuv* pcBaseViewTxtPicYuv = pRefPicBaseTxt->getPicYuvRec(); 7925 assert(pcBaseViewTxtPicYuv != NULL); 7926 7927 // Initialize LUT according to the reference viewIdx 7928 Int txtRefViewIdx = pRefPicBaseTxt->getViewIndex(); 7929 Int* pShiftLUT = pcCU->getSlice()->getDepthToDisparityB( txtRefViewIdx ); 7930 assert( txtRefViewIdx < pcCU->getSlice()->getViewIndex() ); 7931 7932 // prepare Dv to access depth map or reference view 7933 TComMv cDv = pcCU->getDvInfo(partAddr).m_acNBDV; 7934 pcCU->clipMv(cDv); 7935 7936 #if H_3D_FCO_VSP_DONBDV_E0163 7937 if ( bIsCurrDepthCoded ) 7938 { 7939 cDv.setZero(); 7940 } 7941 #endif 7942 7943 // fetch virtual depth map & convert depth to motion vector, which are stored in the motion memory 7944 xSetMvFieldForVSP( pcCU, pcBaseViewDepthPicYuv, &cDv, partAddr, width, height, pShiftLUT, eRefPicList, iRefIdx, pcCU->getSlice()->getIsDepth(), vspSize ); 7945 } 7946 7947 Void TComDataCU::xSetMvFieldForVSP( TComDataCU *cu, TComPicYuv *picRefDepth, TComMv *dv, UInt partAddr, Int width, Int height, Int *shiftLUT, RefPicList refPicList, Int refIdx, Bool isDepth, Int &vspSize ) 7948 { 7949 TComCUMvField *cuMvField = cu->getCUMvField( refPicList ); 7950 Int partAddrRasterSubPULine = g_auiZscanToRaster[ partAddr ]; 7951 Int numPartsLine = cu->getPic()->getNumPartInWidth(); 7952 7953 Int nTxtPerMvInfoX = 4; // cu->getPic()->getMinCUWidth(); 7954 Int nTxtPerMvInfoY = 4; // cu->getPic()->getMinCUHeight(); 7955 7956 Int refDepStride = picRefDepth->getStride(); 7957 7958 TComMv tmpMv(0, 0); 7959 tmpMv.setIDVFlag(false); 7960 7961 Int refDepOffset = ( (dv->getHor()+2) >> 2 ) + ( (dv->getVer()+2) >> 2 ) * refDepStride; 7962 Pel *refDepth = picRefDepth->getLumaAddr( cu->getAddr(), cu->getZorderIdxInCU() + partAddr ) + refDepOffset; 7963 7964 if ((height % 8)) 7965 { 7966 vspSize = 1; // 8x4 7967 } 7968 else if ((width % 8)) 7969 { 7970 vspSize = 0; // 4x8 7971 } 7972 else 7973 { 7974 Bool ULvsBR, URvsBL; 7975 ULvsBR = refDepth[0] < refDepth[refDepStride * (height-1) + width-1]; 7976 URvsBL = refDepth[width-1] < refDepth[refDepStride * (height-1)]; 7977 vspSize = ( ULvsBR ^ URvsBL ) ? 0 : 1; 7978 } 7979 7980 Int subBlockW, subBlockH; 7981 if (vspSize) 7982 { 7983 subBlockW = 8; 7984 subBlockH = 4; 7985 } 7986 else 7987 { 7988 subBlockW = 4; 7989 subBlockH = 8; 7990 } 7991 7992 Int numPartsInSubPUW = subBlockW / nTxtPerMvInfoX; 7993 Int numPartsInSubPUH = subBlockH / nTxtPerMvInfoY * numPartsLine; 7994 7995 for( Int y=0; y<height; y+=subBlockH, partAddrRasterSubPULine+=numPartsInSubPUH ) 7996 { 7997 Pel *refDepthTmp[4]; 7998 refDepthTmp[0] = refDepth + refDepStride * y; 7999 refDepthTmp[1] = refDepthTmp[0] + subBlockW - 1; 8000 refDepthTmp[2] = refDepthTmp[0] + refDepStride * (subBlockH - 1); 8001 refDepthTmp[3] = refDepthTmp[2] + subBlockW - 1; 8002 8003 Int partAddrRasterSubPU = partAddrRasterSubPULine; 8004 for( Int x=0; x<width; x+=subBlockW, partAddrRasterSubPU+=numPartsInSubPUW ) 8005 { 8006 Pel maxDepthVal; 8007 maxDepthVal = refDepthTmp[0][x]; 8008 maxDepthVal = std::max( maxDepthVal, refDepthTmp[1][x]); 8009 maxDepthVal = std::max( maxDepthVal, refDepthTmp[2][x]); 8010 maxDepthVal = std::max( maxDepthVal, refDepthTmp[3][x]); 8011 tmpMv.setHor( (Short) shiftLUT[ maxDepthVal ] ); 8012 8013 Int partAddrRasterPartLine = partAddrRasterSubPU; 8014 for( Int sY=0; sY<numPartsInSubPUH; sY+=numPartsLine, partAddrRasterPartLine += numPartsLine ) 8015 { 8016 Int partAddrRasterPart = partAddrRasterPartLine; 8017 for( Int sX=0; sX<numPartsInSubPUW; sX+=1, partAddrRasterPart++ ) 8018 { 8019 cuMvField->setMv ( g_auiRasterToZscan[ partAddrRasterPart ], tmpMv ); 8020 cuMvField->setRefIdx( g_auiRasterToZscan[ partAddrRasterPart ], refIdx ); 8021 } 8022 } 8023 } 8024 } 8025 8026 vspSize = (vspSize<<2)+1; 8027 8028 } 8029 #endif // NTT_STORE_SPDV_VSP_G0148 7871 8030 7872 8031 //! \} -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibCommon/TComDataCU.h
r795 r809 291 291 Void xDeriveCenterIdx( UInt uiPartIdx, UInt& ruiPartIdxCenter ); 292 292 293 #if NTT_STORE_SPDV_VSP_G0148 294 Void xSetMvFieldForVSP ( TComDataCU *cu, TComPicYuv *picRefDepth, TComMv *dv, UInt partAddr, Int width, Int height, Int *shiftLUT, RefPicList refPicList, Int refIdx, Bool isDepth, Int &vspSize ); 295 #endif 296 293 297 public: 294 298 TComDataCU(); … … 702 706 Void setVSPFlag ( UInt uiIdx, Int n ) { m_piVSPFlag[uiIdx] = n; } 703 707 Void setVSPFlagSubParts( Char iVSPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth ); 708 #if NTT_STORE_SPDV_VSP_G0148 709 Void setMvFieldPUForVSP ( TComDataCU* cu, UInt partAddr, Int width, Int height, RefPicList refPicList, Int refIdx, Int &vspSize ); 710 #endif 704 711 #endif 705 712 Void deriveLeftRightTopIdxGeneral ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ); -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibCommon/TComMotionInfo.h
r773 r809 176 176 Void setMvFieldSP ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComMvField cMvField, Int iWidth, Int iHeight ); 177 177 #endif 178 #if NTT_STORE_SPDV_VSP_G0148 179 Void setMv ( Int iIdx, TComMv const & rcMv ) { m_pcMv[iIdx] = rcMv; } 180 Void setRefIdx ( Int iIdx, Int iRefIdx ) { m_piRefIdx[iIdx] = iRefIdx; } 181 #endif 178 182 179 183 Void setNumPartition( Int iNumPart ) -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibCommon/TComPrediction.cpp
r795 r809 863 863 Void TComPrediction::xPredInterUniVSP( TComDataCU* pcCU, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi ) 864 864 { 865 #if NTT_STORE_SPDV_VSP_G0148 866 Int vspSize = pcCU->getVSPFlag( uiPartAddr ) >> 1; 867 868 Int widthSubPU, heightSubPU; 869 if (vspSize) 870 { 871 widthSubPU = 8; 872 heightSubPU = 4; 873 } 874 else 875 { 876 widthSubPU = 4; 877 heightSubPU = 8; 878 } 879 xPredInterUniSubPU( pcCU, uiPartAddr, iWidth, iHeight, eRefPicList, rpcYuvPred, bi, widthSubPU, heightSubPU ); 880 881 #else // NTT_STORE_SPDV_VSP_G0148 865 882 // Get depth reference 866 883 Int depthRefViewIdx = pcCU->getDvInfo(uiPartAddr).m_aVIdxCan; … … 914 931 xPredInterLumaBlkFromDM ( pcCU, pcBaseViewTxtPicYuv, &m_cYuvDepthOnVsp, pShiftLUT, &cDv, uiPartAddr, iWidth, iHeight, pcCU->getSlice()->getIsDepth(), rpcYuvPred, bi, vspSize); 915 932 xPredInterChromaBlkFromDM ( pcCU, pcBaseViewTxtPicYuv, &m_cYuvDepthOnVsp, pShiftLUT, &cDv, uiPartAddr, iWidth, iHeight, pcCU->getSlice()->getIsDepth(), rpcYuvPred, bi, vspSize); 916 } 933 #endif // NTT_STORE_SPDV_VSP_G0148 934 } 935 936 #if NTT_STORE_SPDV_VSP_G0148 937 Void TComPrediction::xPredInterUniSubPU( TComDataCU* pcCU, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi, Int widthSubPU, Int heightSubPU ) 938 { 939 UInt numPartsInLine = pcCU->getPic()->getNumPartInWidth(); 940 UInt horiNumPartsInSubPU = widthSubPU >> 2; 941 UInt vertNumPartsInSubPU = (heightSubPU >> 2) * numPartsInLine; 942 943 UInt partAddrRasterLine = g_auiZscanToRaster[ uiPartAddr ]; 944 945 for( Int posY=0; posY<iHeight; posY+=heightSubPU, partAddrRasterLine+=vertNumPartsInSubPU ) 946 { 947 UInt partAddrRasterSubPU = partAddrRasterLine; 948 for( Int posX=0; posX<iWidth; posX+=widthSubPU, partAddrRasterSubPU+=horiNumPartsInSubPU ) 949 { 950 UInt partAddrSubPU = g_auiRasterToZscan[ partAddrRasterSubPU ]; 951 Int refIdx = pcCU->getCUMvField( eRefPicList )->getRefIdx( partAddrSubPU ); assert (refIdx >= 0); 952 TComMv cMv = pcCU->getCUMvField( eRefPicList )->getMv( partAddrSubPU ); 953 pcCU->clipMv(cMv); 954 955 xPredInterLumaBlk ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, refIdx )->getPicYuvRec(), partAddrSubPU, &cMv, widthSubPU, heightSubPU, rpcYuvPred, bi ); 956 xPredInterChromaBlk( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, refIdx )->getPicYuvRec(), partAddrSubPU, &cMv, widthSubPU, heightSubPU, rpcYuvPred, bi ); 957 958 } 959 } 960 } 961 #endif // NTT_STORE_SPDV_VSP_G0148 962 917 963 #endif 918 964 … … 1769 1815 1770 1816 #if H_3D_VSP 1817 #if !(NTT_STORE_SPDV_VSP_G0148) 1771 1818 // not fully support iRatioTxtPerDepth* != 1 1772 1819 Void TComPrediction::xGetVirtualDepth( TComDataCU *cu, TComPicYuv *picRefDepth, TComMv *mv, UInt partAddr, Int width, Int height, TComYuv *yuvDepth, Int &vspSize, Int ratioTxtPerDepthX, Int ratioTxtPerDepthY ) … … 2081 2128 } 2082 2129 } 2083 2130 #endif 2084 2131 2085 2132 #if H_3D_VSP_CONSTRAINED -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibCommon/TComPrediction.h
r773 r809 121 121 122 122 #if H_3D_VSP 123 #if NTT_STORE_SPDV_VSP_G0148 124 Void xPredInterUniSubPU ( TComDataCU *cu, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi, Int widthSubPU=4, Int heightSubPU=4 ); 125 #else 123 126 Void xGetVirtualDepth ( TComDataCU *cu, TComPicYuv *picRefDepth, TComMv *dv, UInt partAddr, Int width, Int height, TComYuv *yuvDepth, Int &vspSize, Int txtPerDepthX=1, Int txtPerDepthY=1 ); 124 127 Void xPredInterLumaBlkFromDM ( TComDataCU *cu, TComPicYuv *picRef, TComYuv *yuvDepth, Int* shiftLUT, TComMv *mv, UInt partAddr, Int width, Int height, Bool isDepth, TComYuv *&pcYuvDst, Bool isBi, Int vspSize); 125 128 Void xPredInterChromaBlkFromDM ( TComDataCU *cu, TComPicYuv *picRef, TComYuv *yuvDepth, Int* shiftLUT, TComMv *mv, UInt partAddr, Int width, Int height, Bool isDepth, TComYuv *&pcYuvDst, Bool isBi, Int vspSize); 129 #endif 126 130 #endif 127 131 -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibCommon/TypeDef.h
r800 r809 259 259 #endif 260 260 #define MTK_RBIP_VSP_G0069 1 // Restricted bi-prediction for VSP 261 #define NTT_STORE_SPDV_VSP_G0148 1 // Storing Sub-PU based DV for VSP 261 262 #endif 262 263 -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibDecoder/TDecCu.cpp
r795 r809 462 462 pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, SIZE_2Nx2N, uiAbsPartIdx, uiDepth ); 463 463 pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], SIZE_2Nx2N, uiAbsPartIdx, uiDepth ); 464 #if NTT_STORE_SPDV_VSP_G0148 465 if( pcCU->getVSPFlag( uiAbsPartIdx ) != 0 ) 466 { 467 if ( uhInterDirNeighbours[ uiMergeIndex ] & (1<<uiRefListIdx) ) 468 { 469 UInt dummy; 470 Int vspSize; 471 Int width, height; 472 m_ppcCU[uiDepth]->getPartIndexAndSize( uiAbsPartIdx, dummy, width, height ); 473 m_ppcCU[uiDepth]->setMvFieldPUForVSP( pcCU, uiAbsPartIdx, width, height, RefPicList( uiRefListIdx ), cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getRefIdx(), vspSize ); 474 pcCU->setVSPFlag( uiAbsPartIdx, vspSize ); 475 } 476 } 477 #endif 464 478 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC 465 479 if ( g_decTraceMvFromMerge ) -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibDecoder/TDecEntropy.cpp
r795 r809 342 342 pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, ePartSize, uiSubPartIdx, uiDepth, uiPartIdx ); 343 343 pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], ePartSize, uiSubPartIdx, uiDepth, uiPartIdx ); 344 #if NTT_STORE_SPDV_VSP_G0148 345 if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 ) 346 { 347 if ( uhInterDirNeighbours[ uiMergeIndex ] & (1<<uiRefListIdx) ) 348 { 349 UInt dummy; 350 Int vspSize; 351 Int width, height; 352 pcCU->getPartIndexAndSize( uiPartIdx, dummy, width, height, uiSubPartIdx, pcCU->getTotalNumPart()==256 ); 353 pcCU->setMvFieldPUForVSP( pcCU, uiSubPartIdx, width, height, RefPicList( uiRefListIdx ), cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getRefIdx(), vspSize ); 354 pcCU->setVSPFlag( uiSubPartIdx, vspSize ); 355 } 356 } 357 #endif 344 358 } 345 359 } … … 388 402 } 389 403 #if H_3D_VSP 404 #if NTT_STORE_SPDV_VSP_G0148 405 if ( (pcCU->getInterDir(uiSubPartIdx) == 3) && pcSubCU->isBipredRestriction(uiPartIdx) && (pcCU->getVSPFlag(uiSubPartIdx) == 0)) 406 #else 390 407 if ( (pcCU->getInterDir(uiSubPartIdx) == 3) && pcSubCU->isBipredRestriction(uiPartIdx) && (pcCU->getVSPFlag(uiSubPartIdx) == false)) 408 #endif 391 409 #else 392 410 if ( (pcCU->getInterDir(uiSubPartIdx) == 3) && pcSubCU->isBipredRestriction(uiPartIdx) ) -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibEncoder/TEncCu.cpp
r795 r809 1955 1955 } 1956 1956 else 1957 #endif 1958 #if NTT_STORE_SPDV_VSP_G0148 1959 if ( vspFlag[uiMergeCand] ) 1957 1960 { 1958 #endif 1961 UInt partAddr; 1962 Int vspSize; 1963 Int width, height; 1964 rpcTempCU->getPartIndexAndSize( 0, partAddr, width, height ); 1965 1966 if( uhInterDirNeighbours[ uiMergeCand ] & 0x01 ) 1967 { 1968 rpcTempCU->setMvFieldPUForVSP( rpcTempCU, partAddr, width, height, REF_PIC_LIST_0, cMvFieldNeighbours[ 2*uiMergeCand + 0 ].getRefIdx(), vspSize ); 1969 rpcTempCU->setVSPFlag( partAddr, vspSize ); 1970 } 1971 else 1972 { 1973 rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level 1974 } 1975 if( uhInterDirNeighbours[ uiMergeCand ] & 0x02 ) 1976 { 1977 rpcTempCU->setMvFieldPUForVSP( rpcTempCU, partAddr, width, height, REF_PIC_LIST_1 , cMvFieldNeighbours[ 2*uiMergeCand + 1 ].getRefIdx(), vspSize ); 1978 rpcTempCU->setVSPFlag( partAddr, vspSize ); 1979 } 1980 else 1981 { 1982 rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level 1983 } 1984 1985 rpcTempCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeCand], 0, 0, uhDepth ); // interprets depth relative to LCU level 1986 } 1987 else 1988 #endif 1989 { 1959 1990 rpcTempCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeCand], 0, 0, uhDepth ); // interprets depth relative to LCU level 1960 1991 rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level 1961 1992 rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level 1962 #if H_3D_SPIVMP1963 1993 } 1964 #endif1965 1994 // do MC 1966 1995 m_pcPredSearch->motionCompensation ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] ); … … 1992 2021 1993 2022 rpcTempCU->setSkipFlagSubParts( rpcTempCU->getQtRootCbf(0) == 0, 0, uhDepth ); 2023 #if NTT_STORE_SPDV_VSP_G0148 // possible bug fix 2024 if( rpcTempCU->getSkipFlag(0) ) 2025 { 2026 rpcTempCU->setTrIdxSubParts(0, 0, uhDepth); 2027 } 2028 #endif 1994 2029 #if H_3D_INTER_SDC 1995 2030 TComDataCU *rpcTempCUPre = rpcTempCU; … … 2214 2249 2215 2250 m_pcPredSearch->encodeResAndCalcRdInterCU( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcResiYuvBest[uhDepth], m_ppcRecoYuvTemp[uhDepth], false ); 2216 2251 2252 #if NTT_STORE_SPDV_VSP_G0148 // possible bug fix 2253 if( rpcTempCU->getQtRootCbf(0)==0 ) 2254 { 2255 rpcTempCU->setTrIdxSubParts(0, 0, uhDepth); 2256 } 2257 #endif 2217 2258 2218 2259 #if H_3D_VSO // M4 -
branches/HTM-9.3-dev1-NTT/source/Lib/TLibEncoder/TEncSearch.cpp
r795 r809 3643 3643 3644 3644 PartSize ePartSize = pcCU->getPartitionSize( 0 ); 3645 3646 #if H_3D_VSP && NTT_STORE_SPDV_VSP_G0148 3647 pcCU->setVSPFlagSubParts( vspFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3648 pcCU->setDvInfoSubParts(inheritedVSPDisInfo[uiMergeCand].m_acDvInfo, uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3649 #endif 3645 3650 3646 3651 #if H_3D_SPIVMP … … 3662 3667 } 3663 3668 else 3664 { 3665 #endif 3669 #endif 3670 #if NTT_STORE_SPDV_VSP_G0148 3671 if ( vspFlag[uiMergeCand] ) 3672 { 3673 UInt partAddr; 3674 Int vspSize; 3675 Int width, height; 3676 pcCU->getPartIndexAndSize( iPUIdx, partAddr, width, height ); 3677 3678 if( uhInterDirNeighbours[ uiMergeCand ] & 0x01 ) 3679 { 3680 pcCU->setMvFieldPUForVSP( pcCU, partAddr, width, height, REF_PIC_LIST_0, cMvFieldNeighbours[ 2*uiMergeCand + 0 ].getRefIdx(), vspSize ); 3681 pcCU->setVSPFlag( partAddr, vspSize ); 3682 } 3683 else 3684 { 3685 pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 3686 } 3687 if( uhInterDirNeighbours[ uiMergeCand ] & 0x02 ) 3688 { 3689 pcCU->setMvFieldPUForVSP( pcCU, partAddr, width, height, REF_PIC_LIST_1, cMvFieldNeighbours[ 2*uiMergeCand + 1 ].getRefIdx(), vspSize ); 3690 pcCU->setVSPFlag( partAddr, vspSize ); 3691 } 3692 else 3693 { 3694 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 3695 } 3696 } 3697 else 3698 #endif 3699 { 3666 3700 pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 3667 3701 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx ); 3668 #if H_3D_SPIVMP 3669 } 3670 #endif 3671 3672 #if H_3D_VSP 3702 } 3703 3704 #if H_3D_VSP && !NTT_STORE_SPDV_VSP_G0148 3673 3705 pcCU->setVSPFlagSubParts( vspFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); 3674 3706 pcCU->setDvInfoSubParts(inheritedVSPDisInfo[uiMergeCand].m_acDvInfo, uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) ); … … 4426 4458 } 4427 4459 else 4428 { 4429 #endif 4460 #endif 4461 #if NTT_STORE_SPDV_VSP_G0148 4462 if ( vspFlag[uiMRGIndex] ) 4463 { 4464 UInt partAddrTemp; 4465 Int vspSize; 4466 Int width, height; 4467 pcCU->getPartIndexAndSize( iPartIdx, partAddrTemp, width, height ); // true or pcCU->getTotalNumPart()==256 4468 4469 if( uiMRGInterDir & 0x01 ) 4470 { 4471 pcCU->setMvFieldPUForVSP( pcCU, partAddrTemp, width, height, REF_PIC_LIST_0, cMRGMvField[0].getRefIdx(), vspSize ); 4472 pcCU->setVSPFlag( partAddrTemp, vspSize ); 4473 } 4474 else 4475 { 4476 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx ); 4477 } 4478 if( uiMRGInterDir & 0x02 ) 4479 { 4480 pcCU->setMvFieldPUForVSP( pcCU, partAddrTemp, width, height, REF_PIC_LIST_1, cMRGMvField[1].getRefIdx(), vspSize ); 4481 pcCU->setVSPFlag( partAddrTemp, vspSize ); 4482 } 4483 else 4484 { 4485 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4486 } 4487 pcCU->setInterDirSubParts ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4488 } 4489 else 4490 #endif 4491 { 4430 4492 pcCU->setInterDirSubParts ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 4431 4493 { … … 4433 4495 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx ); 4434 4496 } 4435 #if H_3D_SPIVMP 4436 } 4437 #endif 4497 } 4438 4498 4439 4499 pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvd ( cMvZero, ePartSize, uiPartAddr, 0, iPartIdx );
Note: See TracChangeset for help on using the changeset viewer.