Changeset 1039 in 3DVCSoftware for trunk/source/Lib/TLibDecoder/TDecCu.cpp
- Timestamp:
- 4 Aug 2014, 11:36:05 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibDecoder/TDecCu.cpp
r976 r1039 420 420 Int vspFlag[MRG_MAX_NUM_CANDS_MEM]; 421 421 memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM); 422 #if !FIX_TICKET_79 422 423 InheritedVSPDisInfo inheritedVSPDisInfo[MRG_MAX_NUM_CANDS_MEM]; 424 #endif 423 425 #if H_3D_SPIVMP 424 426 Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM]; … … 432 434 m_ppcCU[uiDepth]->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex ); 433 435 m_ppcCU[uiDepth]->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours 436 #if !FIX_TICKET_79 434 437 , inheritedVSPDisInfo 438 #endif 435 439 #if H_3D_SPIVMP 436 440 , pcMvFieldSP, puhInterDirSP … … 453 457 #endif 454 458 #endif 455 #if H_3D_VSP 459 #if H_3D_VSP && !FIX_TICKET_79 456 460 if(vspFlag[uiMergeIndex]) 457 461 { … … 542 546 return; 543 547 } 544 548 #if MTK_SINGLE_DEPTH_MODE_I0095 549 m_pcEntropyDecoder->decodeSingleDepthMode( pcCU, uiAbsPartIdx, uiDepth ); 550 if(!pcCU->getSingleDepthFlag(uiAbsPartIdx)) 551 { 552 #endif 545 553 m_pcEntropyDecoder->decodePredMode( pcCU, uiAbsPartIdx, uiDepth ); 546 554 m_pcEntropyDecoder->decodePartSize( pcCU, uiAbsPartIdx, uiDepth ); … … 572 580 m_pcEntropyDecoder->decodeCoeff( pcCU, uiAbsPartIdx, uiDepth, uiCurrWidth, uiCurrHeight, bCodeDQP ); 573 581 setdQPFlag( bCodeDQP ); 582 #if MTK_SINGLE_DEPTH_MODE_I0095 583 } 584 #endif 574 585 xFinishDecodeCU( pcCU, uiAbsPartIdx, uiDepth, ruiIsLast ); 575 586 #if H_3D_IV_MERGE … … 671 682 break; 672 683 case MODE_INTRA: 684 #if MTK_SINGLE_DEPTH_MODE_I0095 685 if( m_ppcCU[uiDepth]->getSingleDepthFlag(0) ) 686 xReconIntraSingleDepth( m_ppcCU[uiDepth], 0, uiDepth ); 687 #if H_3D_DIM_SDC 688 else if( m_ppcCU[uiDepth]->getSDCFlag(0) ) 689 xReconIntraSDC( m_ppcCU[uiDepth], 0, uiDepth ); 690 #endif 691 else 692 #else 673 693 #if H_3D_DIM_SDC 674 694 if( m_ppcCU[uiDepth]->getSDCFlag(0) ) 675 695 xReconIntraSDC( m_ppcCU[uiDepth], 0, uiDepth ); 676 696 else 697 #endif 677 698 #endif 678 699 xReconIntraQT( m_ppcCU[uiDepth], uiDepth ); … … 709 730 } 710 731 } 711 732 #if MTK_SINGLE_DEPTH_MODE_I0095 733 Void TDecCu::xReconIntraSingleDepth( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 734 { 735 UInt uiWidth = pcCU->getWidth ( 0 ); 736 UInt uiHeight = pcCU->getHeight ( 0 ); 737 738 TComYuv* pcRecoYuv = m_ppcYuvReco[uiDepth]; 739 740 UInt uiStride = pcRecoYuv->getStride (); 741 Pel* piReco = pcRecoYuv->getLumaAddr( uiAbsPartIdx ); 742 743 744 AOF( uiWidth == uiHeight ); 745 AOF( uiAbsPartIdx == 0 ); 746 747 //construction of depth candidates 748 Pel testDepth; 749 Pel DepthNeighbours[5]; 750 Int index =0; 751 for( Int i = 0; (i < 5) && (index<MTK_SINGLE_DEPTH_MODE_CANDIDATE_LIST_SIZE) ; i++ ) 752 { 753 if(!pcCU->getNeighDepth (0, uiAbsPartIdx, &testDepth, i)) 754 { 755 continue; 756 } 757 DepthNeighbours[index]=testDepth; 758 index++; 759 for(Int j=0;j<index-1;j++) 760 { 761 if( (DepthNeighbours[index-1]==DepthNeighbours[j]) ) 762 { 763 index--; 764 break; 765 } 766 } 767 } 768 769 if(index==0) 770 { 771 DepthNeighbours[index]=1<<(g_bitDepthY-1); 772 index++; 773 } 774 775 if(index==1) 776 { 777 DepthNeighbours[index]=ClipY(DepthNeighbours[0] + 1 ); 778 index++; 779 } 780 781 for( UInt uiY = 0; uiY < uiHeight; uiY++ ) 782 { 783 for( UInt uiX = 0; uiX < uiWidth; uiX++ ) 784 { 785 piReco[ uiX ] =DepthNeighbours[(Int)pcCU->getSingleDepthValue(uiAbsPartIdx)]; 786 } 787 piReco += uiStride; 788 } 789 790 // clear UV 791 UInt uiStrideC = pcRecoYuv->getCStride(); 792 Pel *pRecCb = pcRecoYuv->getCbAddr(); 793 Pel *pRecCr = pcRecoYuv->getCrAddr(); 794 795 for (Int y=0; y<uiHeight/2; y++) 796 { 797 for (Int x=0; x<uiWidth/2; x++) 798 { 799 pRecCb[x] = 1<<(g_bitDepthC-1); 800 pRecCr[x] = 1<<(g_bitDepthC-1); 801 } 802 803 pRecCb += uiStrideC; 804 pRecCr += uiStrideC; 805 } 806 } 807 #endif 712 808 #if H_3D_INTER_SDC 713 809 Void TDecCu::xReconInterSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) … … 832 928 833 929 // reconstruct final prediction signal by combining both segments 930 #if SHARP_DBBP_SIMPLE_FLTER_I0109 931 m_pcPrediction->combineSegmentsWithMask(apSegPredYuv, m_ppcYuvReco[uiDepth], pMask, pcCU->getWidth(0), pcCU->getHeight(0), 0, ePartSize); 932 #else 834 933 m_pcPrediction->combineSegmentsWithMask(apSegPredYuv, m_ppcYuvReco[uiDepth], pMask, pcCU->getWidth(0), pcCU->getHeight(0)); 934 #endif 835 935 836 936 // inter recon … … 1206 1306 { 1207 1307 Int uiTabIdx = pcCU->getDmmWedgeTabIdx(DMM1_IDX, uiAbsPartIdx); 1208 1308 1309 #if SHARP_DMM1_I0110 1310 WedgeList* pacWedgeList = pcCU->isDMM1UpscaleMode(uiWidth) ? &g_dmmWedgeLists[(g_aucConvertToBit[pcCU->getDMM1BasePatternWidth(uiWidth)])] : &g_dmmWedgeLists[(g_aucConvertToBit[uiWidth])]; 1311 #else 1209 1312 WedgeList* pacWedgeList = &g_dmmWedgeLists[(g_aucConvertToBit[uiWidth])]; 1313 #endif 1210 1314 TComWedgelet* pcWedgelet = &(pacWedgeList->at( uiTabIdx )); 1211 1315 1212 1316 uiNumSegments = 2; 1317 1318 #if SHARP_DMM1_I0110 1319 pbMask = pcCU->isDMM1UpscaleMode( uiWidth ) ? pcWedgelet->getScaledPattern(uiWidth) : pcWedgelet->getPattern(); 1320 uiMaskStride = pcCU->isDMM1UpscaleMode( uiWidth ) ? uiWidth : pcWedgelet->getStride(); 1321 #else 1213 1322 pbMask = pcWedgelet->getPattern(); 1214 1323 uiMaskStride = pcWedgelet->getStride(); 1324 #endif 1215 1325 } 1216 1326 if( getDimType( uiLumaPredMode ) == DMM4_IDX )
Note: See TracChangeset for help on using the changeset viewer.