Changeset 884 in 3DVCSoftware for trunk/source/Lib/TLibDecoder/TDecCu.cpp
- Timestamp:
- 29 Mar 2014, 18:55:16 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibDecoder/TDecCu.cpp
r872 r884 293 293 294 294 295 #if MTK_DDD_G0063295 #if H_3D_DDD 296 296 pcCU->setUseDDD( false, uiAbsPartIdx, uiDepth ); 297 297 #endif … … 339 339 if( pcCU->getSlice()->getIsDepth()) 340 340 { 341 #if SEC_DEPTH_DV_DERIVAITON_G0074342 341 DvInfo.bDV = m_ppcCU[uiDepth]->getDispforDepth(0, 0, &DvInfo); 343 #else344 DvInfo.bDV = m_ppcCU[uiDepth]->getDispNeighBlocks(0, 0, &DvInfo);345 #endif346 342 } 347 343 else … … 414 410 m_pcEntropyDecoder->decodeMergeIndex( pcCU, 0, uiAbsPartIdx, uiDepth ); 415 411 UInt uiMergeIndex = pcCU->getMergeIndex(uiAbsPartIdx); 416 417 #if !SEC_IC_ARP_SIG_G0072 412 #if H_3D_ARP 413 m_pcEntropyDecoder->decodeARPW( pcCU , uiAbsPartIdx , uiDepth ); 414 #endif 418 415 #if H_3D_IC 419 416 m_pcEntropyDecoder->decodeICFlag( pcCU, uiAbsPartIdx, uiDepth ); 420 #endif421 #endif422 #if H_3D_ARP423 m_pcEntropyDecoder->decodeARPW( pcCU , uiAbsPartIdx , uiDepth );424 #endif425 #if SEC_IC_ARP_SIG_G0072426 #if H_3D_IC427 m_pcEntropyDecoder->decodeICFlag( pcCU, uiAbsPartIdx, uiDepth );428 #endif429 417 #endif 430 418 … … 466 454 pcCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeIndex], uiAbsPartIdx, 0, uiDepth ); 467 455 468 #if MTK_DDD_G0063456 #if H_3D_DDD 469 457 if( uiMergeIndex == m_ppcCU[uiDepth]->getUseDDDCandIdx() ) 470 458 { … … 484 472 pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, SIZE_2Nx2N, uiAbsPartIdx, uiDepth ); 485 473 pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], SIZE_2Nx2N, uiAbsPartIdx, uiDepth ); 486 #if NTT_STORE_SPDV_VSP_G0148474 #if H_3D_VSP 487 475 if( pcCU->getVSPFlag( uiAbsPartIdx ) != 0 ) 488 476 { … … 551 539 m_pcEntropyDecoder->decodePartSize( pcCU, uiAbsPartIdx, uiDepth ); 552 540 553 #if QC_SDC_UNIFY_G0130541 #if H_3D_DIM_SDC 554 542 m_pcEntropyDecoder->decodeSDCFlag( pcCU, uiAbsPartIdx, uiDepth ); 555 543 #endif … … 573 561 // prediction mode ( Intra : direction mode, Inter : Mv, reference idx ) 574 562 m_pcEntropyDecoder->decodePredInfo( pcCU, uiAbsPartIdx, uiDepth, m_ppcCU[uiDepth]); 575 #if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130576 m_pcEntropyDecoder->decodeInterSDCFlag( pcCU, uiAbsPartIdx, uiDepth );577 #endif578 563 // Coefficient decoding 579 564 Bool bCodeDQP = getdQPFlag(); … … 663 648 #endif 664 649 #if H_3D_INTER_SDC 665 #if QC_SDC_UNIFY_G0130666 650 if( m_ppcCU[uiDepth]->getSDCFlag( 0 ) ) 667 #else668 if( m_ppcCU[uiDepth]->getInterSDCFlag( 0 ) )669 #endif670 651 { 671 652 xReconInterSDC( m_ppcCU[uiDepth], uiAbsPartIdx, uiDepth ); … … 730 711 UInt uiWidth = pcCU->getWidth ( 0 ); 731 712 UInt uiHeight = pcCU->getHeight( 0 ); 732 #if !SEC_INTER_SDC_G0101733 UChar* pMask = pcCU->getInterSDCMask();734 735 memset( pMask, 0, uiWidth*uiHeight );736 pcCU->xSetInterSDCCUMask( pcCU, pMask );737 #endif738 713 739 714 Pel *pResi; … … 746 721 for( uiPelX = 0; uiPelX < uiWidth; uiPelX++ ) 747 722 { 748 #if SEC_INTER_SDC_G0101749 723 pResi[ uiPelX ] = pcCU->getSDCSegmentDCOffset( 0, 0 ); 750 #else751 UChar uiSeg = pMask[ uiPelX + uiPelY*uiWidth ];752 #if QC_SDC_UNIFY_G0130753 pResi[ uiPelX ] = pcCU->getSDCSegmentDCOffset( uiSeg, 0 );754 #else755 pResi[ uiPelX ] = pcCU->getInterSDCSegmentDCOffset( uiSeg, 0 );756 #endif757 #endif758 724 } 759 725 pResi += uiResiStride; … … 929 895 #endif 930 896 931 #if H_3D && UPDATE_HM13897 #if H_3D 932 898 Bool useDltFlag = (isDimMode( uiLumaPredMode ) || uiLumaPredMode == HOR_IDX || uiLumaPredMode == VER_IDX || uiLumaPredMode == DC_IDX) && pcCU->getSlice()->getIsDepth() && pcCU->getSlice()->getPPS()->getDLT()->getUseDLTFlag(pcCU->getSlice()->getLayerIdInVps()); 933 899 … … 955 921 { 956 922 #if H_3D 957 #if UPDATE_HM13958 923 if ( useDltFlag ) 959 #else960 if( (isDimMode( uiLumaPredMode ) || uiLumaPredMode == HOR_IDX || uiLumaPredMode == VER_IDX || uiLumaPredMode == DC_IDX) && pcCU->getSlice()->getIsDepth() && pcCU->getSlice()->getPPS()->getDLT()->getUseDLTFlag(pcCU->getSlice()->getLayerIdInVps()) )961 #endif962 924 { 963 925 pReco [ uiX ] = pcCU->getSlice()->getPPS()->getDLT()->idx2DepthValue( pcCU->getSlice()->getLayerIdInVps(), Clip3( 0, pcCU->getSlice()->getPPS()->getDLT()->getNumDepthValues( pcCU->getSlice()->getLayerIdInVps() ) - 1, pcCU->getSlice()->getPPS()->getDLT()->depthValue2idx( pcCU->getSlice()->getLayerIdInVps(), pPred[ uiX ] ) + pResi[ uiX ] ) ); … … 1151 1113 UInt uiWidth = pcCU->getWidth ( 0 ); 1152 1114 UInt uiHeight = pcCU->getHeight ( 0 ); 1153 #if QC_PKU_SDC_SPLIT_G01231154 #if HS_TSINGHUA_SDC_SPLIT_G01111155 #if QC_GENERIC_SDC_G01221156 1115 TComWedgelet* dmm4SegmentationOrg = new TComWedgelet( uiWidth, uiHeight ); 1157 #endif1158 #else1159 #if QC_GENERIC_SDC_G01221160 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight );1161 #endif1162 #endif1163 #endif1164 #if QC_PKU_SDC_SPLIT_G01231165 1116 UInt numParts = 1; 1166 UInt i = 0;1167 1117 UInt sdcDepth = 0; 1168 1118 TComYuv* pcRecoYuv = m_ppcYuvReco[uiDepth]; … … 1181 1131 UInt uiLumaPredMode = 0; 1182 1132 1183 #if HS_TSINGHUA_SDC_SPLIT_G01111184 1133 if ((uiWidth >> pcCU->getSlice()->getSPS()->getQuadtreeTULog2MaxSize()) > 1) 1185 1134 { … … 1188 1137 uiWidth = uiHeight = (1 << pcCU->getSlice()->getSPS()->getQuadtreeTULog2MaxSize()); 1189 1138 } 1190 #else 1191 if (uiWidth == 64) 1192 { 1193 numParts = 4; 1194 sdcDepth = 1; 1195 uiWidth = uiHeight = 32; 1196 } 1197 #endif 1198 1199 for ( i = 0; i < numParts; i++ ) 1139 1140 for ( Int i = 0; i < numParts; i++ ) 1200 1141 { 1201 1142 uiStride = pcRecoYuv->getStride (); … … 1203 1144 piPred = pcPredYuv->getLumaAddr( uiAbsPartIdx ); 1204 1145 piResi = pcResiYuv->getLumaAddr( uiAbsPartIdx ); 1205 1146 1206 1147 uiZOrder = pcCU->getZorderIdxInCU() + uiAbsPartIdx; 1207 1148 piRecIPred = pcCU->getPic()->getPicYuvRec()->getLumaAddr( pcCU->getAddr(), uiZOrder ); … … 1211 1152 1212 1153 AOF( uiWidth == uiHeight ); 1213 #else 1214 TComYuv* pcRecoYuv = m_ppcYuvReco[uiDepth]; 1215 TComYuv* pcPredYuv = m_ppcYuvReco[uiDepth]; 1216 TComYuv* pcResiYuv = m_ppcYuvResi[uiDepth]; 1217 1218 UInt uiStride = pcRecoYuv->getStride (); 1219 Pel* piReco = pcRecoYuv->getLumaAddr( uiAbsPartIdx ); 1220 Pel* piPred = pcPredYuv->getLumaAddr( uiAbsPartIdx ); 1221 Pel* piResi = pcResiYuv->getLumaAddr( uiAbsPartIdx ); 1222 1223 UInt uiZOrder = pcCU->getZorderIdxInCU() + uiAbsPartIdx; 1224 Pel* piRecIPred = pcCU->getPic()->getPicYuvRec()->getLumaAddr( pcCU->getAddr(), uiZOrder ); 1225 UInt uiRecIPredStride = pcCU->getPic()->getPicYuvRec()->getStride (); 1226 1227 UInt uiLumaPredMode = pcCU->getLumaIntraDir ( uiAbsPartIdx ); 1228 1229 AOF( uiWidth == uiHeight ); 1230 AOF( uiAbsPartIdx == 0 ); 1231 AOF( pcCU->getSDCAvailable(uiAbsPartIdx) ); 1232 AOF( pcCU->getSDCFlag(uiAbsPartIdx) ); 1233 #endif 1234 1235 //===== init availability pattern ===== 1236 Bool bAboveAvail = false; 1237 Bool bLeftAvail = false; 1238 #if QC_PKU_SDC_SPLIT_G0123 1239 pcCU->getPattern()->initPattern ( pcCU, sdcDepth, uiAbsPartIdx ); 1240 pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, sdcDepth, m_pcPrediction->getPredicBuf(), m_pcPrediction->getPredicBufWidth(), m_pcPrediction->getPredicBufHeight(), bAboveAvail, bLeftAvail ); 1241 #else 1242 pcCU->getPattern()->initPattern ( pcCU, 0, uiAbsPartIdx ); 1243 pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, 0, m_pcPrediction->getPredicBuf(), m_pcPrediction->getPredicBufWidth(), m_pcPrediction->getPredicBufHeight(), bAboveAvail, bLeftAvail ); 1244 #endif 1245 #if !QC_PKU_SDC_SPLIT_G0123 1246 #if QC_GENERIC_SDC_G0122 1247 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight ); 1248 #endif 1249 #endif 1250 #if HS_TSINGHUA_SDC_SPLIT_G0111 1251 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight ); 1252 #endif 1253 //===== get prediction signal ===== 1254 #if H_3D_DIM 1255 if( isDimMode( uiLumaPredMode ) ) 1256 { 1257 m_pcPrediction->predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight 1258 #if QC_GENERIC_SDC_G0122 1259 , false, dmm4Segmentation 1260 #endif 1261 ); 1262 #if HS_TSINGHUA_SDC_SPLIT_G0111 1263 Bool* dmm4PatternSplit = dmm4Segmentation->getPattern(); 1264 Bool* dmm4PatternOrg = dmm4SegmentationOrg->getPattern(); 1265 for( UInt k = 0; k < (uiWidth*uiHeight); k++ ) 1266 { 1267 dmm4PatternOrg[k+(uiAbsPartIdx<<4)] = dmm4PatternSplit[k]; 1268 } 1269 #endif 1270 } 1271 else 1272 { 1273 #endif 1274 m_pcPrediction->predIntraLumaAng( pcCU->getPattern(), uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, bAboveAvail, bLeftAvail ); 1275 #if H_3D_DIM 1276 } 1277 #endif 1278 #if QC_PKU_SDC_SPLIT_G0123 1154 1155 //===== init availability pattern ===== 1156 Bool bAboveAvail = false; 1157 Bool bLeftAvail = false; 1158 1159 pcCU->getPattern()->initPattern ( pcCU, sdcDepth, uiAbsPartIdx ); 1160 pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, sdcDepth, m_pcPrediction->getPredicBuf(), m_pcPrediction->getPredicBufWidth(), m_pcPrediction->getPredicBufHeight(), bAboveAvail, bLeftAvail ); 1161 1162 TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight ); 1163 //===== get prediction signal ===== 1164 if( isDimMode( uiLumaPredMode ) ) 1165 { 1166 m_pcPrediction->predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, false, dmm4Segmentation ); 1167 Bool* dmm4PatternSplit = dmm4Segmentation->getPattern(); 1168 Bool* dmm4PatternOrg = dmm4SegmentationOrg->getPattern(); 1169 for( UInt k = 0; k < (uiWidth*uiHeight); k++ ) 1170 { 1171 dmm4PatternOrg[k+(uiAbsPartIdx<<4)] = dmm4PatternSplit[k]; 1172 } 1173 } 1174 else 1175 { 1176 m_pcPrediction->predIntraLumaAng( pcCU->getPattern(), uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, bAboveAvail, bLeftAvail ); 1177 } 1178 1279 1179 if ( numParts > 1 ) 1280 1180 { … … 1292 1192 } 1293 1193 uiAbsPartIdx += ( (uiWidth * uiWidth) >> 4 ); 1294 #if HS_TSINGHUA_SDC_SPLIT_G01111295 1194 dmm4Segmentation->destroy(); delete dmm4Segmentation; 1296 #endif1297 1195 } 1298 1196 uiAbsPartIdx = 0; … … 1309 1207 piRecIPred = pcCU->getPic()->getPicYuvRec()->getLumaAddr( pcCU->getAddr(), uiZOrder ); 1310 1208 uiRecIPredStride = pcCU->getPic()->getPicYuvRec()->getStride (); 1311 #endif1312 1209 // number of segments depends on prediction mode 1313 1210 UInt uiNumSegments = 1; … … 1326 1223 uiMaskStride = pcWedgelet->getStride(); 1327 1224 } 1328 #if QC_GENERIC_SDC_G01221329 1225 if( getDimType( uiLumaPredMode ) == DMM4_IDX ) 1330 1226 { 1331 1227 uiNumSegments = 2; 1332 #if HS_TSINGHUA_SDC_SPLIT_G01111333 1228 pbMask = dmm4SegmentationOrg->getPattern(); 1334 1229 uiMaskStride = dmm4SegmentationOrg->getStride(); 1335 #else 1336 pbMask = dmm4Segmentation->getPattern(); 1337 uiMaskStride = dmm4Segmentation->getStride(); 1338 #endif 1339 } 1340 #endif 1230 } 1341 1231 // get DC prediction for each segment 1342 1232 Pel apDCPredValues[2]; … … 1400 1290 pRecCr += uiStrideC; 1401 1291 } 1402 #if QC_GENERIC_SDC_G01221403 #if HS_TSINGHUA_SDC_SPLIT_G01111404 1292 dmm4SegmentationOrg->destroy(); delete dmm4SegmentationOrg; 1405 #else1406 dmm4Segmentation->destroy(); delete dmm4Segmentation;1407 #endif1408 #endif1409 1293 } 1410 1294 #endif
Note: See TracChangeset for help on using the changeset viewer.