Changeset 950 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComPrediction.cpp
- Timestamp:
- 25 Apr 2014, 12:38:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/Lib/TLibCommon/TComPrediction.cpp
r884 r950 500 500 Pel* pDst = piPred; 501 501 xAssignBiSegDCs( pDst, uiStride, biSegPattern, patternStride, segDC1, segDC2 ); 502 #if HS_DMM_SDC_PREDICTOR_UNIFY_H0108 503 pcCU->setDmmPredictor(segDC1, 0); 504 pcCU->setDmmPredictor(segDC2, 1); 505 #endif 502 506 503 507 #if H_3D_DIM_DMM … … 519 523 Int RefPOCL0 = pcCU->getSlice()->getRefPic(REF_PIC_LIST_0, pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(PartAddr))->getPOC(); 520 524 Int RefPOCL1 = pcCU->getSlice()->getRefPic(REF_PIC_LIST_1, pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx(PartAddr))->getPOC(); 525 #if MTK_ALIGN_SW_WD_BI_PRED_ARP_H0085 526 if(!pcCU->getARPW(PartAddr) && RefPOCL0 == RefPOCL1 && pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr) == pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr)) 527 #else 521 528 if(RefPOCL0 == RefPOCL1 && pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr) == pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr)) 529 #endif 522 530 { 523 531 return true; … … 639 647 640 648 // start mapping process 649 #if !MTK_DBBP_AMP_REM_H0072 641 650 Bool bAMPAvail = uiSize > 8; 642 651 Int matchedPartSum[6][2] = {{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}}; // counter for each part size and boolean option 643 652 PartSize virtualPartSizes[6] = { SIZE_Nx2N, SIZE_2NxN, SIZE_2NxnU, SIZE_2NxnD, SIZE_nLx2N, SIZE_nRx2N }; 653 #else 654 Int matchedPartSum[2][2] = {{0,0},{0,0}}; // counter for each part size and boolean option 655 PartSize virtualPartSizes[2] = { SIZE_Nx2N, SIZE_2NxN}; 656 #endif 644 657 645 658 UInt uiHalfSize = uiSize>>1; 659 #if !MTK_DBBP_AMP_REM_H0072 646 660 UInt uiQuarterSize = uiSize>>2; 661 #endif 647 662 648 663 for (Int y=0; y<uiSize; y+=iSubSample) … … 677 692 } 678 693 694 #if !MTK_DBBP_AMP_REM_H0072 679 695 if( bAMPAvail ) 680 696 { … … 719 735 } 720 736 } 737 #endif 721 738 } 722 739 … … 728 745 729 746 Int iMaxMatchSum = 0; 730 for(Int p=0; p<6; p++) // loop over partition sizes 747 #if !MTK_DBBP_AMP_REM_H0072 748 for(Int p=0; p<6; p++) // loop over partition 749 #else 750 for(Int p=0; p<2; p++) // loop over partition 751 #endif 731 752 { 732 753 for( Int b=0; b<=1; b++ ) // loop over boolean options … … 838 859 839 860 UInt uiMaskStride= MAX_CU_SIZE; 861 #if SEC_DBBP_FILTERING_H0104 862 Pel filSrc = 0; 863 Pel* tmpTar = 0; 864 tmpTar = (Pel *)xMalloc(Pel, uiWidth*uiHeight); 865 #endif 840 866 841 867 // backup pointer … … 851 877 852 878 // filtering 879 #if SEC_DBBP_FILTERING_H0104 880 tmpTar[y*uiWidth+x] = piSrc[ucSegment][x]; 881 #else 853 882 Bool t = (y==0)?pMaskStart[(y+1)*uiMaskStride+x]:pMaskStart[(y-1)*uiMaskStride+x]; 854 883 Bool l = (x==0)?pMaskStart[y*uiMaskStride+x+1]:pMaskStart[y*uiMaskStride+x-1]; … … 858 887 Bool bBlend = !((t&&l&&b&&r) || (!t&&!l&&!b&&!r)); 859 888 piDst[x] = bBlend?((piSrc[0][x]+piSrc[1][x]+1)>>1):piSrc[ucSegment][x]; 889 #endif 860 890 } 861 891 862 892 piSrc[0] += uiSrcStride; 863 893 piSrc[1] += uiSrcStride; 894 #if !SEC_DBBP_FILTERING_H0104 864 895 piDst += uiDstStride; 896 #endif 865 897 pMask += uiMaskStride; 866 898 } 899 900 #if SEC_DBBP_FILTERING_H0104 901 for (Int y=0; y<uiHeight; y++) 902 { 903 for (Int x=0; x<uiWidth; x++) 904 { 905 Bool t = (y==0)?pMaskStart[y*uiMaskStride+x]:pMaskStart[(y-1)*uiMaskStride+x]; 906 Bool l = (x==0)?pMaskStart[y*uiMaskStride+x]:pMaskStart[y*uiMaskStride+x-1]; 907 Bool b = (y==uiHeight-1)?pMaskStart[y*uiMaskStride+x]:pMaskStart[(y+1)*uiMaskStride+x]; 908 Bool r = (x==uiWidth-1)?pMaskStart[y*uiMaskStride+x]:pMaskStart[y*uiMaskStride+x+1]; 909 Bool c =pMaskStart[y*uiMaskStride+x]; 910 911 Pel left, right, top, bottom; 912 left = (x==0) ? tmpTar[y*uiWidth+x] : tmpTar[y*uiWidth+x-1]; 913 right = (x==uiWidth-1) ? tmpTar[y*uiWidth+x] : tmpTar[y*uiWidth+x+1]; 914 top = (y==0) ? tmpTar[y*uiWidth+x] : tmpTar[(y-1)*uiWidth+x]; 915 bottom = (y==uiHeight-1) ? tmpTar[y*uiWidth+x] : tmpTar[(y+1)*uiWidth+x]; 916 917 if(!((l&&r&&c) || (!l&&!r&&!c))) 918 { 919 filSrc = Clip3( Pel( 0 ), Pel( 255 ), Pel(( left + (tmpTar[y*uiWidth+x] << 1) + right ) >> 2 )); 920 } 921 else 922 { 923 filSrc = tmpTar[y*uiWidth+x]; 924 } 925 926 if(!((t&&b&&c) || (!t&&!b&&!c))) 927 { 928 filSrc = Clip3( Pel( 0 ), Pel( 255 ), Pel(( top + (filSrc << 1) + bottom ) >> 2 )); 929 } 930 piDst[x] = filSrc; 931 } 932 piDst += uiDstStride; 933 } 934 if ( tmpTar ) { xFree(tmpTar); tmpTar = NULL; } 935 #endif 867 936 868 937 // now combine chroma … … 875 944 UInt uiWidthC = uiWidth >> 1; 876 945 UInt uiHeightC = uiHeight >> 1; 946 #if SEC_DBBP_FILTERING_H0104 947 Pel filSrcU = 0, filSrcV = 0; 948 Pel* tmpTarU = 0, *tmpTarV = 0; 949 tmpTarU = (Pel *)xMalloc(Pel, uiWidthC*uiHeightC); 950 tmpTarV = (Pel *)xMalloc(Pel, uiWidthC*uiHeightC); 951 #endif 877 952 pMask = pMaskStart; 878 953 … … 885 960 886 961 // filtering 962 #if SEC_DBBP_FILTERING_H0104 963 tmpTarU[y*uiWidthC+x] = piSrcU[ucSegment][x]; 964 tmpTarV[y*uiWidthC+x] = piSrcV[ucSegment][x]; 965 #else 887 966 Bool t = (y==0)?pMaskStart[(y+1)*2*uiMaskStride+x*2]:pMaskStart[(y-1)*2*uiMaskStride+x*2]; 888 967 Bool l = (x==0)?pMaskStart[y*2*uiMaskStride+(x+1)*2]:pMaskStart[y*2*uiMaskStride+(x-1)*2]; … … 894 973 piDstU[x] = bBlend?((piSrcU[0][x]+piSrcU[1][x]+1)>>1):piSrcU[ucSegment][x]; 895 974 piDstV[x] = bBlend?((piSrcV[0][x]+piSrcV[1][x]+1)>>1):piSrcV[ucSegment][x]; 975 #endif 896 976 } 897 977 … … 900 980 piSrcV[0] += uiSrcStrideC; 901 981 piSrcV[1] += uiSrcStrideC; 982 #if !SEC_DBBP_FILTERING_H0104 902 983 piDstU += uiDstStrideC; 903 984 piDstV += uiDstStrideC; 985 #endif 904 986 pMask += 2*uiMaskStride; 905 987 } 988 989 #if SEC_DBBP_FILTERING_H0104 990 for (Int y=0; y<uiHeightC; y++) 991 { 992 for (Int x=0; x<uiWidthC; x++) 993 { 994 Bool t = (y==0)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[(y-1)*2*uiMaskStride+x*2]; 995 Bool l = (x==0)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[y*2*uiMaskStride+(x-1)*2]; 996 Bool b = (y==uiHeightC-1)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[(y+1)*2*uiMaskStride+x*2]; 997 Bool r = (x==uiWidthC-1)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[y*2*uiMaskStride+(x+1)*2]; 998 Bool c =pMaskStart[y*2*uiMaskStride+x*2]; 999 1000 Pel leftU, rightU, topU, bottomU; 1001 leftU = (x==0) ? tmpTarU[y*uiWidthC+x] : tmpTarU[y*uiWidthC+x-1]; 1002 rightU = (x==uiWidthC-1) ? tmpTarU[y*uiWidthC+x] : tmpTarU[y*uiWidthC+x+1]; 1003 topU = (y==0) ? tmpTarU[y*uiWidthC+x] : tmpTarU[(y-1)*uiWidthC+x]; 1004 bottomU = (y==uiHeightC-1) ? tmpTarU[y*uiWidthC+x] : tmpTarU[(y+1)*uiWidthC+x]; 1005 1006 Pel leftV, rightV, topV, bottomV; 1007 leftV = (x==0) ? tmpTarV[y*uiWidthC+x] : tmpTarV[y*uiWidthC+x-1]; 1008 rightV = (x==uiWidthC-1) ? tmpTarV[y*uiWidthC+x] : tmpTarV[y*uiWidthC+x+1]; 1009 topV = (y==0) ? tmpTarV[y*uiWidthC+x] : tmpTarV[(y-1)*uiWidthC+x]; 1010 bottomV = (y==uiHeightC-1) ? tmpTarV[y*uiWidthC+x] : tmpTarV[(y+1)*uiWidthC+x]; 1011 1012 if(!((l&&r&&c) || (!l&&!r&&!c))) 1013 { 1014 filSrcU = Clip3( Pel( 0 ), Pel( 255 ), Pel(( leftU + (tmpTarU[y*uiWidthC+x] << 1) + rightU ) >> 2 )); 1015 filSrcV = Clip3( Pel( 0 ), Pel( 255 ), Pel(( leftV + (tmpTarV[y*uiWidthC+x] << 1) + rightV ) >> 2 )); 1016 } 1017 else 1018 { 1019 filSrcU = tmpTarU[y*uiWidthC+x]; 1020 filSrcV = tmpTarV[y*uiWidthC+x]; 1021 } 1022 1023 if(!((t&&b&&c) || (!t&&!b&&!c))) 1024 { 1025 filSrcU = Clip3( Pel( 0 ), Pel( 255 ), Pel(( topU + (filSrcU << 1) + bottomU ) >> 2 )); 1026 filSrcV = Clip3( Pel( 0 ), Pel( 255 ), Pel(( topV + (filSrcV << 1) + bottomV ) >> 2 )); 1027 } 1028 1029 piDstU[x] = filSrcU; 1030 piDstV[x] = filSrcV; 1031 } 1032 piDstU += uiDstStrideC; 1033 piDstV += uiDstStrideC; 1034 } 1035 if ( tmpTarU ) { xFree(tmpTarU); tmpTarU = NULL; } 1036 if ( tmpTarV ) { xFree(tmpTarV); tmpTarV = NULL; } 1037 #endif 906 1038 } 907 1039 #endif … … 1286 1418 1287 1419 assert ( cDistparity.bDV ); 1288 1420 1421 #if NTT_BUG_FIX_TK54 1422 TComMv cNBDV = cDistparity.m_acNBDV; 1423 pcCU->clipMv( cNBDV ); 1424 1425 pcPicYuvRef = pcPicYuvBaseCol->getPicYuvRec(); 1426 xPredInterLumaBlk ( pcCU, pcPicYuvRef, uiPartAddr, &cNBDV, iWidth, iHeight, pYuvB0, bi, true ); 1427 xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cNBDV, iWidth, iHeight, pYuvB0, bi, true ); 1428 #else 1289 1429 pcPicYuvRef = pcPicYuvBaseCol->getPicYuvRec(); 1290 1430 xPredInterLumaBlk ( pcCU, pcPicYuvRef, uiPartAddr, &cDistparity.m_acNBDV, iWidth, iHeight, pYuvB0, bi, true ); 1291 1431 xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cDistparity.m_acNBDV, iWidth, iHeight, pYuvB0, bi, true ); 1432 #endif 1292 1433 1293 1434 pcPicYuvRef = pcPicYuvBaseRef->getPicYuvRec(); … … 2187 2328 if (orgDC == false) 2188 2329 { 2330 #if !HS_DMM_SDC_PREDICTOR_UNIFY_H0108 2189 2331 if ( getDimType(uiIntraMode) == DMM1_IDX ) 2190 2332 { … … 2232 2374 } 2233 2375 else 2376 #endif 2234 2377 { 2235 2378 Pel* pLeftTop = pOrig;
Note: See TracChangeset for help on using the changeset viewer.