Changeset 779 in 3DVCSoftware
- Timestamp:
- 20 Jan 2014, 04:09:40 (11 years ago)
- Location:
- branches/HTM-9.3-dev1-Qualcomm
- Files:
-
- 2 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-9.3-dev1-Qualcomm/cfg/3D-HEVC/baseCfg_2view+depth.cfg
r735 r779 202 202 IvMvScaling : 1 # Interview motion vector scaling 203 203 SubPULog2Size : 3 # Log2 of sub-PU size for IvMvPred (2...6) 204 204 SubPUMPILog2Size : 3 # Log2 of sub-PU size for MPI (3...6) 205 205 206 206 #========== depth coding tools ========== -
branches/HTM-9.3-dev1-Qualcomm/cfg/3D-HEVC/baseCfg_3view+depth.cfg
r724 r779 232 232 IvMvScaling : 1 # Interview motion vector scaling 233 233 SubPULog2Size : 3 # Log2 of sub-PU size for IvMvPred (2...6) 234 234 SubPUMPILog2Size : 3 # Log2 of sub-PU size for MPI (3...6) 235 235 236 236 #========== depth coding tools ========== -
branches/HTM-9.3-dev1-Qualcomm/source/App/TAppEncoder/TAppEncCfg.cpp
r773 r779 513 513 ("SubPULog2Size", m_iSubPULog2Size, (Int)3, "Sub-PU size index: 2^n") 514 514 #endif 515 515 #if QC_SPIVMP_MPI_G0119 516 ("SubPUMPILog2Size", m_iSubPUMPILog2Size, (Int)3, "Sub-PU MPI size index: 2^n") 517 #endif 516 518 #if H_3D_IC 517 519 ("IlluCompEnable", m_abUseIC, true, "Enable illumination compensation") … … 1516 1518 xConfirmPara( m_iSubPULog2Size > 6, "SubPULog2Size must be 6 or smaller."); 1517 1519 xConfirmPara( (1<<m_iSubPULog2Size) > m_uiMaxCUWidth, "SubPULog2Size must be log2(maxCUSize) or smaller."); 1520 #endif 1521 #if QC_SPIVMP_MPI_G0119 1522 xConfirmPara( m_iSubPUMPILog2Size < 3, "SubPUMPILog2Size must be 3 or greater."); 1523 xConfirmPara( m_iSubPUMPILog2Size > 6, "SubPUMPILog2Size must be 6 or smaller."); 1524 xConfirmPara( ( 1 << m_iSubPUMPILog2Size ) > m_uiMaxCUWidth, "SubPUMPILog2Size must be log2(maxCUSize) or smaller."); 1518 1525 #endif 1519 1526 #if ADAPTIVE_QP_SELECTION … … 2474 2481 #endif 2475 2482 #endif 2483 #if QC_SPIVMP_MPI_G0119 2484 printf(" SubPUMPILog2Size:%d " , m_iSubPUMPILog2Size ); 2485 #endif 2476 2486 #if H_3D_ARP 2477 2487 printf(" ARP:%d ", m_uiUseAdvResPred ); -
branches/HTM-9.3-dev1-Qualcomm/source/App/TAppEncoder/TAppEncCfg.h
r773 r779 130 130 Int m_iSubPULog2Size; 131 131 #endif 132 #endif 133 #if QC_SPIVMP_MPI_G0119 134 Int m_iSubPUMPILog2Size; 132 135 #endif 133 136 #if H_3D_ARP /// < flag and number of weighting factors in ARP -
branches/HTM-9.3-dev1-Qualcomm/source/App/TAppEncoder/TAppEncTop.cpp
r773 r779 184 184 #if H_3D_SPIVMP 185 185 m_cTEncTop.setSubPULog2Size (( isDepth || 0==layerIdInVps ) ? 0 : m_iSubPULog2Size ); 186 #endif 187 #if QC_SPIVMP_MPI_G0119 188 m_cTEncTop.setSubPUMPILog2Size ( !isDepth ? 0 : m_iSubPUMPILog2Size ); 186 189 #endif 187 190 #if H_3D_IC … … 1911 1914 #endif 1912 1915 } 1916 #if QC_SPIVMP_MPI_G0119 1917 vps.setSubPUMPILog2Size( m_iSubPUMPILog2Size ); 1918 #endif 1913 1919 #if H_3D 1914 1920 vps.setIvMvScalingFlag( m_ivMvScalingFlag ); -
branches/HTM-9.3-dev1-Qualcomm/source/Lib/TLibCommon/TComDataCU.cpp
r773 r779 4075 4075 if( bMPIFlag) 4076 4076 { 4077 #if QC_SPIVMP_MPI_G0119 4078 tmpMV[0].setMvField( cZeroMv, NOT_VALID ); 4079 tmpMV[1].setMvField( cZeroMv, NOT_VALID ); 4080 tmpDir = 0; 4081 4082 TComPic * pcTexPic = m_pcSlice->getTexturePic(); 4083 #if H_3D_FCO 4084 if (pcTexturePic->getReconMark()) 4085 { 4086 #endif 4087 TComPicYuv* pcTexRec = pcTexPic->getPicYuvRec (); 4088 UInt uiPartAddr; 4089 Int iWidth, iHeight; 4090 Int iCurrPosX, iCurrPosY; 4091 4092 this->getPartIndexAndSize( uiPUIdx, uiPartAddr, iWidth, iHeight ); 4093 pcTexRec->getTopLeftSamplePos( this->getAddr(), this->getZorderIdxInCU() + uiPartAddr, iCurrPosX, iCurrPosY ); 4094 4095 Int iPUWidth, iPUHeight, iNumPart, iNumPartLine; 4096 this->getSPPara(iWidth, iHeight, iNumPart, iNumPartLine, iPUWidth, iPUHeight); 4097 4098 for (Int i=0; i<iNumPart; i++) 4099 { 4100 puhInterDirSP[i] = 0; 4101 pcMvFieldSP[2*i].getMv().set(0, 0); 4102 pcMvFieldSP[2*i+1].getMv().set(0, 0); 4103 pcMvFieldSP[2*i].setRefIdx(-1); 4104 pcMvFieldSP[2*i+1].setRefIdx(-1); 4105 } 4106 4107 Int iTexCUAddr; 4108 Int iTexAbsPartIdx; 4109 TComDataCU* pcTexCU; 4110 Int iPartition = 0; 4111 Int iInterDirSaved = 0; 4112 TComMvField cMvFieldSaved[2]; 4113 4114 Int iOffsetX = iPUWidth/2;; 4115 Int iOffsetY = iPUHeight/2; 4116 4117 Int iTexPosX, iTexPosY; 4118 const TComMv cMvRounding( 1 << ( 2 - 1 ), 1 << ( 2 - 1 ) ); 4119 for (Int i=iCurrPosY; i < iCurrPosY + iHeight; i += iPUHeight) 4120 { 4121 for (Int j = iCurrPosX; j < iCurrPosX + iWidth; j += iPUWidth) 4122 { 4123 iTexPosX = j + iOffsetX; 4124 iTexPosY = i + iOffsetY; 4125 pcTexRec->getCUAddrAndPartIdx( iTexPosX, iTexPosY, iTexCUAddr, iTexAbsPartIdx ); 4126 pcTexCU = pcTexPic->getCU( iTexCUAddr ); 4127 4128 if( pcTexCU && !pcTexCU->isIntra(iTexAbsPartIdx) ) 4129 { 4130 for( UInt uiCurrRefListId = 0; uiCurrRefListId < 2; uiCurrRefListId++ ) 4131 { 4132 RefPicList eCurrRefPicList = RefPicList( uiCurrRefListId ); 4133 TComMvField cTexMvField; 4134 pcTexCU->getMvField( pcTexCU, iTexAbsPartIdx, eCurrRefPicList, cTexMvField ); 4135 Int iValidDepRef = getPic()->isTextRefValid( eCurrRefPicList, cTexMvField.getRefIdx() ); 4136 if( (cTexMvField.getRefIdx()>=0) && ( iValidDepRef >= 0 ) ) 4137 { 4138 TComMv cMv = cTexMvField.getMv() + cMvRounding; 4139 cMv >>=2; 4140 this->clipMv( cMv ); 4141 pcMvFieldSP[2*iPartition + uiCurrRefListId].setMvField(cMv, iValidDepRef); 4142 } 4143 } 4144 } 4145 puhInterDirSP[iPartition] = (pcMvFieldSP[2*iPartition].getRefIdx()!=-1 ? 1: 0) + (pcMvFieldSP[2*iPartition+1].getRefIdx()!=-1 ? 2: 0); 4146 if (puhInterDirSP[iPartition] == 0) 4147 { 4148 if (iInterDirSaved != 0) 4149 { 4150 puhInterDirSP[iPartition] = iInterDirSaved; 4151 pcMvFieldSP[2*iPartition] = cMvFieldSaved[0]; 4152 pcMvFieldSP[2*iPartition + 1] = cMvFieldSaved[1]; 4153 } 4154 } 4155 else 4156 { 4157 if (iInterDirSaved ==0) 4158 { 4159 pbSPIVMPFlag[iCount] = true; 4160 tmpDir = puhInterDirSP[iPartition]; 4161 tmpMV[0] = pcMvFieldSP[2*iPartition]; 4162 tmpMV[1] = pcMvFieldSP[2*iPartition+1]; 4163 4164 if (iPartition != 0) 4165 { 4166 for (Int iPart = iPartition-1; iPart >= 0; iPart--) 4167 { 4168 puhInterDirSP[iPart] = puhInterDirSP[iPartition]; 4169 pcMvFieldSP[2*iPart] = pcMvFieldSP[2*iPartition]; 4170 pcMvFieldSP[2*iPart + 1] = pcMvFieldSP[2*iPartition + 1]; 4171 } 4172 } 4173 } 4174 iInterDirSaved = puhInterDirSP[iPartition]; 4175 cMvFieldSaved[0] = pcMvFieldSP[2*iPartition]; 4176 cMvFieldSaved[1] = pcMvFieldSP[2*iPartition + 1]; 4177 } 4178 iPartition ++; 4179 } 4180 } 4181 #if H_3D_FCO 4182 } 4183 #endif 4184 #else 4077 4185 UInt uiPartIdxCenter; 4078 4186 xDeriveCenterIdx( uiPUIdx, uiPartIdxCenter ); … … 4131 4239 tmpDir += ((tmpMV[1].getRefIdx()>=0)?2:0); 4132 4240 } 4133 4241 #endif 4134 4242 if( tmpDir != 0 ) 4135 4243 { … … 4190 4298 } 4191 4299 } 4192 4300 #if QC_SPIVMP_MPI_G0119 4301 pcMvFieldNeighbours[iCount<<1].setMvField(tmpMV[0].getMv(), tmpMV[0].getRefIdx()); 4302 pcMvFieldNeighbours[(iCount<<1)+1].setMvField(tmpMV[1].getMv(), tmpMV[1].getRefIdx()); 4303 #else 4193 4304 if( (tmpMV[0].getRefIdx()>=0) && ( tRef[0] >= 0 ) ) 4194 4305 { … … 4202 4313 } 4203 4314 } 4315 #endif 4204 4316 puhInterDirNeighbours[iCount] = tmpDir; 4205 4317 … … 4210 4322 iCount ++; 4211 4323 } 4212 } 4324 #if !QC_SPIVMP_MPI_G0119 4325 } 4326 #endif 4213 4327 } 4214 4328 … … 4339 4453 if (bIvMC) 4340 4454 { 4455 #if QC_SPIVMP_MPI_G0119 4456 if(!m_pcSlice->getIsDepth()) 4457 #endif 4341 4458 pbSPIVMPFlag[iCount] = true; 4342 4459 if( ( ivCandDir[0] & 1 ) == 1 ) … … 6945 7062 { 6946 7063 Int iSubPUSize = 1<<getSlice()->getVPS()->getSubPULog2Size(getSlice()->getLayerId()); 7064 #if QC_SPIVMP_MPI_G0119 7065 if( getSlice()->getIsDepth() ) 7066 { 7067 iSubPUSize = 1 << getSlice()->getVPS()->getSubPUMPILog2Size(); 7068 } 7069 #endif 6947 7070 iNumSPInOneLine = iPUWidth/iSubPUSize; 6948 7071 iNumSPInOneLine = iNumSPInOneLine < 1 ? 1: iNumSPInOneLine; … … 7038 7161 //////////sub-PU IvMC/////////// 7039 7162 //////////////////////////////// 7040 7163 #if QC_SPIVMP_MPI_G0119 7164 if(!m_pcSlice->getIsDepth()) 7165 { 7166 #endif 7041 7167 Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight; 7042 7168 getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight); … … 7158 7284 iCurrPosX += ( iWidth >> 1 ); 7159 7285 iCurrPosY += ( iHeight >> 1 ); 7286 #if QC_SPIVMP_MPI_G0119 7287 } 7288 #endif 7160 7289 #endif 7161 7290 … … 7165 7294 7166 7295 #if H_3D_SPIVMP 7296 #if QC_SPIVMP_MPI_G0119 7297 if(m_pcSlice->getIsDepth()) 7298 { 7299 iCurrPosX += ( iWidth >> 1 ); 7300 iCurrPosY += ( iHeight >> 1 ); 7301 } 7302 for(Int iLoopCan = ( 1 - m_pcSlice->getIsDepth() ); iLoopCan < 2; iLoopCan ++) 7303 #else 7167 7304 for(Int iLoopCan = 1; iLoopCan < 2; iLoopCan ++) 7305 #endif 7168 7306 #else 7169 7307 for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++) … … 7173 7311 // iLoopCan == 1 --> IvMCShift 7174 7312 7175 #if !H_3D_SPIVMP 7313 #if !H_3D_SPIVMP || QC_SPIVMP_MPI_G0119 7176 7314 Int iBaseCUAddr; 7177 7315 Int iBaseAbsPartIdx; … … 7181 7319 Int offsetH = (iLoopCan == 0) ? 0 : ( ((iHeight/2)*4) + 4 ); 7182 7320 7183 #if H_3D_SPIVMP 7321 #if H_3D_SPIVMP && !QC_SPIVMP_MPI_G0119 7184 7322 iBasePosX = Clip3( 0, pcBaseRec->getWidth () - 1, iCurrPosX + ( (cDv.getHor() + offsetW + 2 ) >> 2 ) ); 7185 7323 iBasePosY = Clip3( 0, pcBaseRec->getHeight() - 1, iCurrPosY + ( (cDv.getVer() + offsetH + 2 ) >> 2 ) ); … … 7190 7328 pcBaseRec->getCUAddrAndPartIdx( iBasePosX , iBasePosY , iBaseCUAddr, iBaseAbsPartIdx ); 7191 7329 7192 #if H_3D_SPIVMP 7330 #if H_3D_SPIVMP && !QC_SPIVMP_MPI_G0119 7193 7331 pcBaseCU = pcBasePic->getCU( iBaseCUAddr ); 7194 7332 #else … … 7248 7386 } 7249 7387 #if H_3D_SPIVMP 7388 #if QC_SPIVMP_MPI_G0119 7389 for(Int iLoopCan = ( 1 - m_pcSlice->getIsDepth() ); iLoopCan < 2; iLoopCan ++) 7390 #else 7250 7391 for(Int iLoopCan = 1; iLoopCan < 2; iLoopCan ++) 7392 #endif 7251 7393 #else 7252 7394 for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++) -
branches/HTM-9.3-dev1-Qualcomm/source/Lib/TLibCommon/TComSlice.h
r773 r779 783 783 #endif 784 784 #endif 785 #if QC_SPIVMP_MPI_G0119 786 Int m_iSubPUMPILog2Size; 787 #endif 785 788 #if H_3D_VSP 786 789 Bool m_viewSynthesisPredFlag [ MAX_NUM_LAYERS ]; … … 1057 1060 Void setSubPULog2Size(Int layerIdInVps, Int u) { m_iSubPULog2Size[layerIdInVps] = u;} 1058 1061 #endif 1062 #endif 1063 #if QC_SPIVMP_MPI_G0119 1064 Int getSubPUMPILog2Size( ) { return m_iSubPUMPILog2Size; } 1065 Void setSubPUMPILog2Size( Int u ) { m_iSubPUMPILog2Size = u; } 1059 1066 #endif 1060 1067 #if H_3D_VSP -
branches/HTM-9.3-dev1-Qualcomm/source/Lib/TLibCommon/TypeDef.h
r773 r779 224 224 #if H_3D_ARP 225 225 #define H_3D_ARP_WFNR 3 226 #endif 227 228 #if H_3D_SPIVMP 229 #define QC_SPIVMP_MPI_G0119 1 // Sub-PU level MPI merge candidate 226 230 #endif 227 231 -
branches/HTM-9.3-dev1-Qualcomm/source/Lib/TLibDecoder/TDecCAVLC.cpp
r773 r779 1762 1762 } 1763 1763 } 1764 1764 #if QC_SPIVMP_MPI_G0119 1765 READ_UVLC (uiCode, "log2_sub_PU_MPI_size_minus3"); pcVPS->setSubPUMPILog2Size( uiCode + 3 ); 1766 #endif 1765 1767 READ_FLAG( uiCode, "iv_mv_scaling_flag"); pcVPS->setIvMvScalingFlag( uiCode == 1 ? true : false ); 1766 1768 } -
branches/HTM-9.3-dev1-Qualcomm/source/Lib/TLibEncoder/TEncCavlc.cpp
r773 r779 1555 1555 } 1556 1556 } 1557 #if QC_SPIVMP_MPI_G0119 1558 WRITE_UVLC( pcVPS->getSubPUMPILog2Size( ) - 3, "log2_sub_PU_MPI_size_minus3"); 1559 #endif 1557 1560 #if H_3D_TMVP 1558 1561 WRITE_FLAG( pcVPS->getIvMvScalingFlag( ) ? 1 : 0 , "iv_mv_scaling_flag" ); -
branches/HTM-9.3-dev1-Qualcomm/source/Lib/TLibEncoder/TEncCfg.h
r773 r779 411 411 Int m_iSubPULog2Size; 412 412 #endif 413 #if QC_SPIVMP_MPI_G0119 414 Int m_iSubPUMPILog2Size; 415 #endif 413 416 #if H_3D_IC 414 417 Bool m_bUseIC; … … 515 518 Void setSubPULog2Size (Int u) { m_iSubPULog2Size = u; } 516 519 #endif 517 520 #if QC_SPIVMP_MPI_G0119 521 Int getSubPUMPILog2Size () { return m_iSubPUMPILog2Size;} 522 Void setSubPUMPILog2Size (Int u) { m_iSubPUMPILog2Size = u; } 523 #endif 518 524 #if H_3D_IC 519 525 Void setUseIC ( Bool bVal ) { m_bUseIC = bVal; }
Note: See TracChangeset for help on using the changeset viewer.