Changeset 12 in 3DVCSoftware
- Timestamp:
- 6 Feb 2012, 00:52:17 (13 years ago)
- Location:
- branches/0.2-poznan-univ
- Files:
-
- 62 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/0.2-poznan-univ/build/HM_vc8.sln
r11 r12 9 9 {5280C25A-D316-4BE7-AE50-29D72108624F} = {5280C25A-D316-4BE7-AE50-29D72108624F} 10 10 {8783AD3A-A5CA-42B7-AAC4-A07EB845A684} = {8783AD3A-A5CA-42B7-AAC4-A07EB845A684} 11 <<<<<<< .mine 12 {5E87AD84-AC4F-4336-B4EE-549CA210EE4A} = {5E87AD84-AC4F-4336-B4EE-549CA210EE4A} 13 {78018D78-F890-47E3-A0B7-09D273F0B11D} = {78018D78-F890-47E3-A0B7-09D273F0B11D} 14 {F8B77A48-AF6C-4746-A89F-B706ABA6AD94} = {F8B77A48-AF6C-4746-A89F-B706ABA6AD94} 15 {5280C25A-D316-4BE7-AE50-29D72108624F} = {5280C25A-D316-4BE7-AE50-29D72108624F} 16 ======= 17 >>>>>>> .r11 11 18 EndProjectSection 12 19 EndProject -
branches/0.2-poznan-univ/build/HM_vc9.sln
r11 r12 7 7 {78018D78-F890-47E3-A0B7-09D273F0B11D} = {78018D78-F890-47E3-A0B7-09D273F0B11D} 8 8 {F8B77A48-AF6C-4746-A89F-B706ABA6AD94} = {F8B77A48-AF6C-4746-A89F-B706ABA6AD94} 9 {ABF5855A-69D4-4579-AC8E-7109DEEFA7F0} = {ABF5855A-69D4-4579-AC8E-7109DEEFA7F0} 9 10 {5280C25A-D316-4BE7-AE50-29D72108624F} = {5280C25A-D316-4BE7-AE50-29D72108624F} 10 11 {8783AD3A-A5CA-42B7-AAC4-A07EB845A684} = {8783AD3A-A5CA-42B7-AAC4-A07EB845A684} 12 {457993C6-AE2C-4B9B-B5F9-71033279A0B9} = {457993C6-AE2C-4B9B-B5F9-71033279A0B9} 11 13 EndProjectSection 12 14 EndProject -
branches/0.2-poznan-univ/build/vc8/TAppDecoder_vc8.vcproj
r2 r12 44 44 Name="VCCLCompilerTool" 45 45 Optimization="0" 46 AdditionalIncludeDirectories=""..\..\compat\msvc"" 46 47 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS" 47 AdditionalIncludeDirectories=""..\..\compat\msvc""48 48 MinimalRebuild="true" 49 49 BasicRuntimeChecks="3" … … 119 119 Name="VCCLCompilerTool" 120 120 Optimization="0" 121 AdditionalIncludeDirectories=""..\..\compat\msvc"" 121 122 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS" 122 AdditionalIncludeDirectories=""..\..\compat\msvc""123 123 MinimalRebuild="true" 124 124 BasicRuntimeChecks="3" … … 197 197 EnableIntrinsicFunctions="false" 198 198 FavorSizeOrSpeed="1" 199 AdditionalIncludeDirectories=""..\..\compat\msvc"" 199 200 PreprocessorDefinitions="WIN32;_CONSOLE;_CRT_SECURE_NO_WARNINGS" 200 AdditionalIncludeDirectories=""..\..\compat\msvc""201 201 StringPooling="true" 202 202 RuntimeLibrary="0" … … 275 275 EnableIntrinsicFunctions="false" 276 276 FavorSizeOrSpeed="1" 277 AdditionalIncludeDirectories=""..\..\compat\msvc"" 277 278 PreprocessorDefinitions="WIN32;_CONSOLE;_CRT_SECURE_NO_WARNINGS" 278 AdditionalIncludeDirectories=""..\..\compat\msvc""279 279 StringPooling="true" 280 280 RuntimeLibrary="0" -
branches/0.2-poznan-univ/source/App/TAppCommon/TAppComCamPara.cpp
r11 r12 76 76 77 77 radLUT [ uiSourceView ][ uiTargetView ] = new Double*[ 2 ]; 78 radLUT [ uiSourceView ][ uiTargetView ][ 0 ] = new Double [ 257];79 radLUT [ uiSourceView ][ uiTargetView ][ 1 ] = new Double [ 257];78 radLUT [ uiSourceView ][ uiTargetView ][ 0 ] = new Double [ SizeOfLUT+1 ]; 79 radLUT [ uiSourceView ][ uiTargetView ][ 1 ] = new Double [ SizeOfLUT+1 ]; 80 80 81 81 raiLUT [ uiSourceView ][ uiTargetView ] = new Int* [ 2 ]; 82 raiLUT [ uiSourceView ][ uiTargetView ][ 0 ] = new Int [ 257];83 raiLUT [ uiSourceView ][ uiTargetView ][ 1 ] = new Int [ 257];82 raiLUT [ uiSourceView ][ uiTargetView ][ 0 ] = new Int [ SizeOfLUT+1 ]; 83 raiLUT [ uiSourceView ][ uiTargetView ][ 1 ] = new Int [ SizeOfLUT+1 ]; 84 84 } 85 85 } … … 877 877 radShiftParams[ uiSourceView][ uiTargetView ][ 1 ] = dOffset; 878 878 879 for( UInt uiDepthValue = 0; uiDepthValue < 256; uiDepthValue++ ) 880 { 879 #if POZNAN_NONLINEAR_DEPTH 880 TComPowerConverter power(m_fDepthPower, (POZNAN_LUT_INCREASED_PRECISION) ? g_uiBitIncrement : 0, (POZNAN_LUT_INCREASED_PRECISION) ? g_uiBitIncrement : 0); 881 #endif 882 883 for( UInt uiDepthValue = 0; uiDepthValue < SizeOfLUT; uiDepthValue++ ) 884 { 885 Double dDepthValue = (Double)uiDepthValue; 886 Int64 iDepthValue = (Int64)uiDepthValue; 887 #if POZNAN_NONLINEAR_DEPTH 888 dDepthValue = power(dDepthValue); 889 iDepthValue = (Int64)(dDepthValue+0.5); 890 #endif 891 #if POZNAN_LUT_INCREASED_PRECISION 892 dDepthValue /= (1<<g_uiBitIncrement); 893 #endif 881 894 // real-valued look-up tables 882 Double dShiftLuma = ( (Double)uiDepthValue * dScale + dOffset ) * Double( 1 << m_iLog2Precision ); 895 896 Double dShiftLuma = ( dDepthValue * dScale + dOffset ) * Double( 1 << m_iLog2Precision ); 883 897 Double dShiftChroma = dShiftLuma / 2; 884 898 radLUT[ uiSourceView ][ uiTargetView ][ 0 ][ uiDepthValue ] = dShiftLuma; … … 886 900 887 901 // integer-valued look-up tables 888 Int64 iTempScale = (Int64)uiDepthValue * iScale; 902 //Int64 iDepthValue = (Int64)uiDepthValue; 903 Int64 iTempScale = iDepthValue * iScale; 904 #if POZNAN_LUT_INCREASED_PRECISION 905 iTempScale >>= g_uiBitIncrement; 906 #endif 889 907 Int64 iTestScale = ( iTempScale + iOffset ); // for checking accuracy of camera parameters 890 908 Int64 iShiftLuma = ( iTempScale + iOffsetLuma ) >> iLog2DivLuma; … … 899 917 } 900 918 901 radLUT[ uiSourceView ][ uiTargetView ][ 0 ][ 256 ] = radLUT[ uiSourceView ][ uiTargetView ][ 0 ][ 255];902 radLUT[ uiSourceView ][ uiTargetView ][ 1 ][ 256 ] = radLUT[ uiSourceView ][ uiTargetView ][ 1 ][ 255];903 raiLUT[ uiSourceView ][ uiTargetView ][ 0 ][ 256 ] = raiLUT[ uiSourceView ][ uiTargetView ][ 0 ][ 255];904 raiLUT[ uiSourceView ][ uiTargetView ][ 1 ][ 256 ] = raiLUT[ uiSourceView ][ uiTargetView ][ 1 ][ 255];919 radLUT[ uiSourceView ][ uiTargetView ][ 0 ][ SizeOfLUT ] = radLUT[ uiSourceView ][ uiTargetView ][ 0 ][ SizeOfLUT-1 ]; 920 radLUT[ uiSourceView ][ uiTargetView ][ 1 ][ SizeOfLUT ] = radLUT[ uiSourceView ][ uiTargetView ][ 1 ][ SizeOfLUT-1 ]; 921 raiLUT[ uiSourceView ][ uiTargetView ][ 0 ][ SizeOfLUT ] = raiLUT[ uiSourceView ][ uiTargetView ][ 0 ][ SizeOfLUT-1 ]; 922 raiLUT[ uiSourceView ][ uiTargetView ][ 1 ][ SizeOfLUT ] = raiLUT[ uiSourceView ][ uiTargetView ][ 1 ][ SizeOfLUT-1 ]; 905 923 } 906 924 } … … 1232 1250 Char* pchSynthViewNumbers, 1233 1251 std::vector<Int>* paiSynthViewNumbers, 1234 Int iLog2Precision ) 1252 Int iLog2Precision 1253 #if POZNAN_NONLINEAR_DEPTH 1254 ,Float fDepthPower 1255 #endif 1256 ) 1235 1257 { 1236 1258 //===== set miscellaneous variables ===== … … 1240 1262 m_uiCamParsCodedPrecision = uiCodedCamParsPrecision; 1241 1263 m_iLog2Precision = iLog2Precision; 1264 1265 #if POZNAN_NONLINEAR_DEPTH 1266 m_fDepthPower = fDepthPower; 1267 #endif 1242 1268 1243 1269 xReadCameraParameterFile( pchCfgFileName ); … … 1339 1365 } 1340 1366 1367 xReadCameraParameterFile( pchCfgFileName ); 1368 1369 m_bSetupFromCoded = ( m_aadCameraParameters[ 0 ].size() == 2 ); 1370 1371 if ( m_bSetupFromCoded ) 1372 { 1373 std::cout << "Detected decoded camera parameter file. Overwriting base view settings from cfg file. " << std::endl; 1374 xSetupBaseViewsFromCoded(); 1375 } 1376 else 1377 { 1378 xSetupBaseViews( pchBaseViewNumbers, uiNumBaseViews ); 1379 } 1380 1381 //===== set derived parameters ===== 1382 xGetViewOrderIndices( m_aiBaseId2SortedId, m_aiViewOrderIndex ); 1383 m_bCamParsVaryOverTime = xGetCamParsChangeFlag(); 1384 1385 1386 //===== create arrays ===== 1387 xCreateLUTs ( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews, m_adBaseViewShiftLUT, m_aiBaseViewShiftLUT, m_adBaseViewShiftParameter, m_aiBaseViewShiftParameter ); 1388 xCreateLUTs ( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfSynthViews, m_adSynthViewShiftLUT, m_aiSynthViewShiftLUT, m_adSynthViewShiftParameter, m_aiSynthViewShiftParameter ); 1389 xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews, m_aaiCodedScale ); 1390 xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews, m_aaiCodedOffset ); 1391 xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews, m_aaiScaleAndOffsetSet ); 1392 xInit2dArray ( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews, m_aaiScaleAndOffsetSet, 0 ); 1393 1394 xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews, m_aaiPdmScaleNomDelta ); 1395 xCreate2dArray( (UInt)m_iNumberOfBaseViews, (UInt)m_iNumberOfBaseViews, m_aaiPdmOffset ); 1396 1397 //===== init disparity to virtual depth conversion parameters ===== 1398 xSetPdmConversionParams(); 1399 1400 //===== init arrays for first frame ===== 1401 xSetShiftParametersAndLUT( m_uiFirstFrameId ); 1402 } 1403 #endif//*/ 1404 1341 1405 Void 1342 1406 TAppComCamPara::check( Bool bCheckViewRange, Bool bCheckFrameRange ) … … 1456 1520 } 1457 1521 1458 #if POZNAN_ SYNTH1522 #if POZNAN_CU_SYNTH||POZNAN_CU_SKIP 1459 1523 Bool 1460 1524 TAppComCamPara::getNearestBaseView( Int iSynthViewIdx, Int &riNearestViewIdx, Int &riRelDistToLeft, Bool& rbRenderFromLeft) -
branches/0.2-poznan-univ/source/App/TAppCommon/TAppComCamPara.h
r11 r12 104 104 Int**** m_aiSynthViewShiftLUT; ///< Disparity LUT 105 105 106 #if POZNAN_NONLINEAR_DEPTH 107 Float m_fDepthPower; 108 #endif 106 109 107 110 protected: … … 161 164 Char* pchSynthViewNumbers, 162 165 std::vector<Int>* paiSynthViewNumbers, 163 Int iLog2Precision ); 166 Int iLog2Precision 167 #if POZNAN_NONLINEAR_DEPTH 168 ,Float fDepthPower 169 #endif 170 ); 164 171 165 172 Void init ( UInt uiInputBitDepth, … … 170 177 std::vector<Int>* paiSynthViewNumbers, 171 178 Int iLog2Precision 179 #if POZNAN_NONLINEAR_DEPTH 180 ,Float fDepthPower 181 #endif 172 182 ); 173 183 … … 182 192 Int synthRelNum2Idx ( Int iRelNum ); 183 193 Bool getLeftRightBaseView( Int iSynthViewIdx, Int &riLeftViewIdx, Int &riRightViewIdx, Int &riRelDistToLeft, Bool& rbIsBaseView ); 184 #if POZNAN_ SYNTH194 #if POZNAN_CU_SYNTH||POZNAN_CU_SKIP 185 195 Bool getNearestBaseView( Int iSynthViewIdx, Int &riNearestViewIdx, Int &riRelDistToLeft, Bool& rbRenderFromLeft); 186 196 #endif … … 189 199 UInt getCurFrameId () { return m_iCurrentFrameId; } 190 200 static Void convertNumberString ( Char* pchViewNumberString, std::vector<Int>& raiViewNumbers, Double dViewNumPrec ); 201 202 #if POZNAN_MP 203 Bool isLeftView( Int iSynthViewIdx, Int iNearestViewIdx); 204 #endif 191 205 192 206 // function for getting parameters and parameter arrays -
branches/0.2-poznan-univ/source/App/TAppDecoder/TAppDecTop.cpp
r11 r12 64 64 // m_iPOCLastDisplay = -1; 65 65 m_pScaleOffsetFile = 0; 66 67 #if POZNAN_MP 68 m_pcMP = NULL; 69 #endif 66 70 } 67 71 … … 71 75 72 76 m_apcBitstream->create( BITS_BUF_SIZE ); 77 78 #if POZNAN_MP 79 m_pcMP = new TComMP(); 80 #endif 73 81 } 74 82 … … 89 97 free(m_pchReconFile); 90 98 } 99 100 #if POZNAN_MP 101 if(m_pcMP) { delete m_pcMP; m_pcMP = NULL; }; 102 #endif 91 103 } 92 104 … … 163 175 if( eNalUnitType == NAL_UNIT_SPS ) 164 176 { 165 #if POZNAN_ SYNTH177 #if POZNAN_CU_SKIP||POZNAN_CU_SYNTH 166 178 if(cComSPS.getViewId()==0 && !cComSPS.isDepth()) // it should be called at first view at the begining of the stream 167 179 initRenderer(cComSPS); … … 416 428 if ( m_pchReconFile ) 417 429 { 430 431 #if POZNAN_NONLINEAR_DEPTH 432 TComSPS* pcSPS = pcPic->getSlice(0)->getSPS(); 433 TComPicYuv cPicPower; 434 435 //pcPic->getPicYuvRec() 436 cPicPower.create(pcSPS->getWidth(), pcSPS->getHeight(), pcSPS->getMaxCUWidth(), pcSPS->getMaxCUHeight(), pcSPS->getMaxCUDepth() ); 437 438 pcPic->getPicYuvRec()->power(&cPicPower, 1.0f/pcSPS->getDepthPower()); 439 440 m_acTVideoIOYuvDepthReconFileList[iViewIdx]->write(&cPicPower, pcSPS->getPad()); 441 cPicPower.destroy(); 442 #else 418 443 m_acTVideoIOYuvDepthReconFileList[iViewIdx]->write( pcPic->getPicYuvRec(), pcPic->getSlice(0)->getSPS()->getPad() ); 444 #endif 419 445 } 420 446 … … 544 570 } 545 571 546 #if POZNAN_ SYNTH572 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP 547 573 Void TAppDecTop::initRenderer(TComSPS &cComSPS) 548 574 { … … 566 592 iNearestViewIdx = 0; 567 593 bRenderFromLeft = iCoddedViewOrderIdx>0?true:false; 568 //m_cCamParsCollector.getNearestBaseView(iCoddedViewIdx, iNearestViewIdx, iRelDistToLeft, bRenderFromLeft);569 594 570 595 m_cAvailabilityRenderer.setShiftLUTs( … … 592 617 pcPicYuvAvailView = pcPic->getPicYuvAvail(); 593 618 } 619 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 620 TComPicYuv* pcPicYuvSynthDepthView = pcPic->getPicYuvSynthDepth(); 621 if(!pcPicYuvSynthDepthView) 622 { 623 pcPic->addSynthesisDepthBuffer(); 624 pcPicYuvSynthDepthView = pcPic->getPicYuvSynthDepth(); 625 } 626 m_cAvailabilityRenderer.extrapolateAvailabilityView( getPicFromView( iNearestViewIdx, iCurPoc, true )->getPicYuvRec(), getPicFromView( iNearestViewIdx, iCurPoc, true )->getPicYuvRec(), pcPicYuvSynthDepthView, pcPicYuvAvailView, bRenderFromLeft ); 627 628 #if POZNAN_OUTPUT_SYNTH 629 Char acFilenameBaseD[1024]; 630 ::sprintf( acFilenameBaseD, "SynthDepth_%s_V%d.yuv", ( true ? "Dec" : "Enc" ),iCoddedViewIdx ); 631 pcPicYuvSynthDepthView->dump(acFilenameBaseD, iCurPoc!=0); 632 #endif 633 #endif 594 634 595 635 //m_cAvailabilityRenderer.extrapolateAvailabilityView( xGetPicFromView( iNearestViewIdx, iCurPoc, false )->getPicYuvRec(), xGetPicFromView( iNearestViewIdx, iCurPoc, true )->getPicYuvRec(), pcPicYuvERView, pcPicYuvAvailView, bRenderFromLeft ); 596 636 m_cAvailabilityRenderer.extrapolateAvailabilityView( getPicFromView( iNearestViewIdx, iCurPoc, false )->getPicYuvRec(), getPicFromView( iNearestViewIdx, iCurPoc, true )->getPicYuvRec(), pcPicYuvSynthView, pcPicYuvAvailView, bRenderFromLeft ); 597 637 598 638 pcPicYuvAvailView->setBorderExtension( false );//Needed?? 599 639 pcPicYuvAvailView->extendPicBorder();//Needed?? … … 613 653 } 614 654 #endif 615 616 } 617 #endif 655 656 }//*/ 657 #endif -
branches/0.2-poznan-univ/source/App/TAppDecoder/TAppDecTop.h
r11 r12 52 52 #include "../../Lib/TLibCommon/TComDepthMapGenerator.h" 53 53 #include "../../Lib/TLibDecoder/TDecTop.h" 54 #if POZNAN_ SYNTH54 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH 55 55 #include "../../Lib/TLibRenderer/TRenTop.h" 56 56 #endif 57 57 #include "TAppDecCfg.h" 58 59 #if POZNAN_MP 60 #include "../../Lib/TLibCommon/TComMP.h" 61 #endif 58 62 59 63 // ==================================================================================================================== … … 90 94 #endif 91 95 92 #if POZNAN_ SYNTH96 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH 93 97 TRenTop m_cAvailabilityRenderer; 94 98 #endif 95 99 100 #if POZNAN_MP 101 TComMP* m_pcMP; 102 #endif 96 103 97 104 public: … … 105 112 Void startUsingDepth() ; 106 113 107 #if POZNAN_ SYNTH114 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH 108 115 Void initRenderer(TComSPS &cComSPS); 109 116 Void storeSynthPicsInBuffer(Int iCoddedViewIdx,Int iCoddedViewOrderIdx,Int iCurPoc,Bool bDepth); … … 120 127 #endif 121 128 129 #if POZNAN_MP 130 TComMP* getMP() { return m_pcMP; } 131 #endif 132 122 133 protected: 123 134 Void xCreateDecLib (); ///< create internal classes -
branches/0.2-poznan-univ/source/App/TAppEncoder/TAppEncCfg.cpp
r5 r12 127 127 #endif 128 128 129 #if POZNAN_STAT_JK 130 for(Int i = 0; i< m_pchStatFileList.size(); i++ ) 131 { 132 if ( m_pchStatFileList[i] != NULL ) 133 free (m_pchStatFileList[i]); 134 } 135 136 for(Int i = 0; i< m_pchDepthStatFileList.size(); i++ ) 137 { 138 if ( m_pchDepthStatFileList[i] != NULL ) 139 free (m_pchDepthStatFileList[i]); 140 } 141 #endif 142 129 143 } 130 144 … … 346 360 #endif 347 361 #endif 362 #if POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 363 ("textureCuDeltaQpOffset", m_dTextureCuDeltaQpOffset, (Double)(-2.6), "texture block QP changing tool based on coresponding depth block values - offset parameter" ) 364 ("textureCuDeltaQpMul", m_dTextureCuDeltaQpMul, (Double)(1), "texture block QP changing tool based on coresponding depth block values - multiplicative parameter" ) 365 ("textureCuDeltaQpOffsetTopBottomRow", m_iTextureCuDeltaQpTopBottomRow, (Int)2, "texture block QP changing tool - top and bottom CU rows delta QP parameter" ) 366 #endif 367 #if POZNAN_NONLINEAR_DEPTH 368 ("DepthPower,-dpow", m_fDepthPower, 1.0, "Depth power value (for non-linear processing)") 369 #endif 370 348 371 349 372 /* Compatability with old style -1 FOO or -0 FOO options. */ 350 373 ("1", doOldStyleCmdlineOn, "turn option <name> on") 351 374 ("0", doOldStyleCmdlineOff, "turn option <name> off") 375 376 #if POZNAN_STAT_JK 377 ("StatFile_%d,sf_%d", m_pchStatFileList, (char *) 0 , MAX_INPUT_VIEW_NUM , "Mode selection staticstics file name for view %d") 378 ("DepthStatFile_%d,sf_%d", m_pchDepthStatFileList, (char *) 0 , MAX_INPUT_VIEW_NUM , "Mode selection staticstics file name for depth view %d") 379 #endif 352 380 ; 353 381 … … 396 424 // GT FIX END 397 425 426 #if POZNAN_STAT_JK 427 if ( m_bUsingDepthMaps ) 428 { 429 for(Int i = 0; i < m_pchDepthStatFileList.size() ; i++) 430 { 431 if ((m_pchDepthInputFileList[i] != NULL) && (m_pchStatFileList[i] != NULL) && (i < m_iNumberOfViews) ) 432 { 433 if (m_pchDepthStatFileList[i] == NULL ) 434 { 435 xAppendToFileNameEnd( m_pchStatFileList[i], "_depth", m_pchDepthStatFileList[i] ); 436 } 437 } 438 else 439 { 440 m_pchDepthStatFileList[i] = NULL; 441 } 442 }; 443 } 444 #endif 445 398 446 if (m_iRateGOPSize == -1) 399 447 { … … 431 479 #if HHI_VSO 432 480 m_bUseVSO = m_bUseVSO && m_bUsingDepthMaps && (m_uiVSOMode != 0); 481 #endif 482 483 #if POZNAN_NONLINEAR_DEPTH 484 if (m_fDepthPower<=0) 485 { 486 Float fDepthQP = m_adQP[ m_adQP.size() < 2 ? 0 : 1]; 487 m_fDepthPower = (fDepthQP-30) *0.25/20.0 + 1.25; 488 if (m_fDepthPower<=1.0) m_fDepthPower = 1.0; 489 // QP = 30 = 1.25 490 // QP = 50 = 1.5 491 if (m_fDepthPower>=1.66) m_fDepthPower = 1.66; 492 }; 493 494 #if POZNAN_NONLINEAR_DEPTH_SEND_AS_BYTE 495 m_fDepthPower = dequantizeDepthPower(quantizeDepthPower((Float)m_fDepthPower)); 496 #endif 497 433 498 #endif 434 499 … … 498 563 NULL, 499 564 m_cRenModStrParser.getSynthViews(), 500 LOG2_DISP_PREC_LUT ); 565 LOG2_DISP_PREC_LUT 566 #if POZNAN_NONLINEAR_DEPTH 567 ,m_fDepthPower 568 #endif 569 ); 501 570 } 502 571 else if ( m_bUseVSO && m_uiVSOMode != 4 ) … … 511 580 m_pchVSOConfig, 512 581 NULL, 513 LOG2_DISP_PREC_LUT ); 582 LOG2_DISP_PREC_LUT 583 #if POZNAN_NONLINEAR_DEPTH 584 ,m_fDepthPower 585 #endif 586 ); 514 587 } 515 588 else … … 524 597 NULL, 525 598 NULL, 526 LOG2_DISP_PREC_LUT ); 599 LOG2_DISP_PREC_LUT 600 #if POZNAN_NONLINEAR_DEPTH 601 ,m_fDepthPower 602 #endif 603 ); 527 604 } 528 605 #else … … 536 613 NULL, 537 614 NULL, 538 LOG2_DISP_PREC_LUT ); 615 LOG2_DISP_PREC_LUT 616 #if POZNAN_NONLINEAR_DEPTH 617 ,m_fDepthPower 618 #endif 619 ); 539 620 #endif 540 621 … … 668 749 } 669 750 #endif 751 #if POZNAN_NONLINEAR_DEPTH 752 printf("Depth map power : %f\n", m_fDepthPower ); 753 #endif 670 754 } 671 755 … … 820 904 printf("Reconstruction Depth File %i : %s\n", iCounter, m_pchDepthReconFileList[iCounter]); 821 905 } 906 #if POZNAN_STAT_JK 907 for( Int iCounter = 0; iCounter<m_iNumberOfViews; iCounter++) 908 { 909 printf("Statistics File %i : %s\n", iCounter, m_pchStatFileList[iCounter]); 910 } 911 for( Int iCounter = 0; iCounter<m_iNumberOfViews; iCounter++) 912 { 913 printf("Statistics Depth File %i : %s\n", iCounter, m_pchDepthStatFileList[iCounter]); 914 } 915 #endif 822 916 printf("Real Format : %dx%d %dHz\n", m_iSourceWidth - m_aiPad[0], m_iSourceHeight-m_aiPad[1], m_iFrameRate ); 823 917 printf("Internal Format : %dx%d %dHz\n", m_iSourceWidth, m_iSourceHeight, m_iFrameRate ); … … 912 1006 #if MTK_SAO 913 1007 #endif 1008 1009 #if POZNAN_MP 1010 printf("POZNAN_MP(1){ "); 1011 1012 #if POZNAN_MP_USE_DEPTH_MAP_GENERATION 1013 printf("dmg=1 "); 1014 #else 1015 printf("dmg=0 "); 1016 #endif 1017 1018 #if POZNAN_MP_FILL 1019 printf("fill=%d ",POZNAN_MP_FILL_TYPE); 1020 #else 1021 printf("fill=- "); 1022 #endif 1023 1024 #if POZNAN_EIVD 1025 printf("EIVD(1): "); 1026 printf("cand=%d ",POZNAN_EIVD_MERGE_POS); 1027 #if POZNAN_EIVD_CALC_PRED_DATA 1028 printf("pr=1 "); 1029 #else 1030 printf("pr=0 "); 1031 #endif 1032 #if POZNAN_EIVD_COMPRESS_ME_DATA 1033 printf("comp=1 "); 1034 #else 1035 printf("comp=0 "); 1036 #endif 1037 #if POZNAN_EIVD_USE_IN_NONANCHOR_PIC_ONLY 1038 printf("na=1 "); 1039 #else 1040 printf("na=0 "); 1041 #endif 1042 #else 1043 printf("EIVD(0) "); 1044 #endif 1045 printf("}"); 1046 #else 1047 printf("POZNAN_MP(0) "); 1048 #endif 1049 914 1050 printf("\n"); 915 1051 printf("TOOL CFG VIDEO : "); … … 933 1069 #endif 934 1070 printf("\n"); 1071 1072 1073 printf("POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH("); 1074 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 1075 printf("1), "); 1076 #else 1077 printf("0), "); 1078 #endif 935 1079 936 1080 fflush(stdout); -
branches/0.2-poznan-univ/source/App/TAppEncoder/TAppEncCfg.h
r5 r12 271 271 TRenModSetupStrParser m_cRenModStrParser; 272 272 #endif 273 274 #if POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 275 Double m_dTextureCuDeltaQpOffset; 276 Double m_dTextureCuDeltaQpMul; 277 Int m_iTextureCuDeltaQpTopBottomRow; 278 #endif 279 280 #if POZNAN_NONLINEAR_DEPTH 281 Double m_fDepthPower; ///< Depth power value 282 #endif 283 284 #if POZNAN_STAT_JK 285 std::vector<char*> m_pchStatFileList; ///< texure statistics file names 286 std::vector<char*> m_pchDepthStatFileList; ///< depth statistics file names 287 #endif 288 273 289 public: 274 290 -
branches/0.2-poznan-univ/source/App/TAppEncoder/TAppEncTop.cpp
r11 r12 141 141 m_acTEncTopList[iViewIdx]->setUseFastEnc ( m_bUseFastEnc ); 142 142 143 #if POZNAN_NONLINEAR_DEPTH 144 m_acTEncTopList[iViewIdx]->setDepthPower ( (Float)m_fDepthPower ); 145 #endif 146 143 147 #if HHI_VSO 144 148 m_acTEncTopList[iViewIdx]->setUseVSO ( false ); //GT: might be enabled later for VSO Mode 4 … … 222 226 m_acTEncTopList[iViewIdx]->setQpChangeOffsetVideo( m_iQpChangeOffsetVideo ); 223 227 m_acTEncTopList[iViewIdx]->setQpChangeOffsetDepth( m_iQpChangeOffsetDepth ); 228 229 230 #if POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 231 m_acTEncTopList[iViewIdx]->setTextureCuDeltaQpOffset( m_dTextureCuDeltaQpOffset ); 232 m_acTEncTopList[iViewIdx]->setTextureCuDeltaQpMul( m_dTextureCuDeltaQpMul ); 233 m_acTEncTopList[iViewIdx]->setTextureCuDeltaQpTopBottomRow( m_iTextureCuDeltaQpTopBottomRow ); 234 #endif 224 235 } 225 236 if( m_bUsingDepthMaps ) … … 382 393 m_acTEncDepthTopList[iViewIdx]->setUseMVI( m_bUseMVI ); 383 394 #endif 395 #if POZNAN_NONLINEAR_DEPTH 396 m_acTEncDepthTopList[iViewIdx]->setDepthPower ( (Float)m_fDepthPower ); 397 #endif 384 398 385 399 m_acTEncDepthTopList[iViewIdx]->setPictureDigestEnabled(m_pictureDigestEnabled); … … 435 449 #endif 436 450 437 #if POZNAN_ SYNTH451 #if POZNAN_CU_SYNTH||POZNAN_CU_SKIP 438 452 //m_cAvailabilityRenderer.init(m_iSourceWidth, m_iSourceHeight,true,0,0,true, 0,0,0,0,0,0,0,1,0,0 ); //GT: simplest configuration 439 453 m_cAvailabilityRenderer.init(m_iSourceWidth, m_iSourceHeight,true,0,LOG2_DISP_PREC_LUT,true, 0,0,0,0,0,6,4,1,0,6 ); //GT: simplest configuration … … 443 457 m_cUsedPelsRenderer.init(m_iSourceWidth, m_iSourceHeight, true, 0, LOG2_DISP_PREC_LUT, true, 0, 0, 0, 0, 0, 6, 4, 1, 0, 6 ); 444 458 #endif 459 460 #if POZNAN_MP 461 #if POZNAN_MP_USE_DEPTH_MAP_GENERATION 462 m_pcMP = new TComMP(m_iSourceHeight, m_iSourceWidth); 463 #else 464 //m_pcMP = new TComMP(m_iSourceHeight, m_iSourceWidth, &m_cCameraData); 465 m_pcMP = new TComMP(m_iSourceHeight, m_iSourceWidth, m_cCameraData.getBaseViewShiftLUTI()); 466 #endif 467 #endif 468 445 469 } 446 470 … … 484 508 } 485 509 #endif 510 511 #if POZNAN_STAT_JK 512 for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++) 513 { 514 if(m_pchStatFileList[iViewIdx] != NULL) m_cStatFileList.push_back(fopen(m_pchStatFileList[iViewIdx],"w")); 515 else m_cStatFileList.push_back(NULL); 516 517 if ( m_bUsingDepthMaps && m_pchDepthStatFileList[iViewIdx] != NULL) m_cDepthStatFileList.push_back(fopen(m_pchDepthStatFileList[iViewIdx],"w")); 518 else m_cDepthStatFileList.push_back(NULL); 519 } 520 #endif 521 486 522 } 487 523 … … 490 526 491 527 m_cTVideoIOBitsFile.closeBits(); 528 529 #if POZNAN_MP 530 if (m_pcMP) { delete m_pcMP; m_pcMP=NULL; }; 531 #endif 532 533 #if POZNAN_STAT_JK 534 for ( Int iViewIdx = 0; iViewIdx < m_iNumberOfExternalRefs; iViewIdx++ ) 535 { 536 if(m_cStatFileList[iViewIdx]) {fclose(m_cStatFileList[iViewIdx]); m_cStatFileList[iViewIdx]=NULL;} 537 if(m_cDepthStatFileList[iViewIdx]) {fclose(m_cDepthStatFileList[iViewIdx]); m_cDepthStatFileList[iViewIdx]=NULL;} 538 } 539 #endif 492 540 493 541 #if HHI_VSO … … 545 593 m_acTEncTopList[iViewIdx]->setTEncTopList( &m_acTEncTopList ); 546 594 } 595 #if POZNAN_STAT_JK 596 for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++) 597 { 598 m_acTEncTopList[iViewIdx]->setStatFile(m_cStatFileList[iViewIdx]);//JK 599 } 600 #endif 547 601 if ( m_bUsingDepthMaps ) 548 602 { … … 555 609 m_acTEncDepthTopList[iViewIdx]->setTEncTopList( &m_acTEncDepthTopList ); 556 610 } 611 #if POZNAN_STAT_JK 612 for(Int iViewIdx=0; iViewIdx<m_iNumberOfViews; iViewIdx++) 613 { 614 m_acTEncDepthTopList[iViewIdx]->setStatFile(m_cDepthStatFileList[iViewIdx]);//JK 615 } 616 #endif 557 617 } 558 618 } … … 645 705 { 646 706 m_acTVideoIOYuvDepthInputFileList[iViewIdx]->read( pcPdmDepthOrg, m_aiPad, m_bUsingDepthMaps ); 707 #if POZNAN_NONLINEAR_DEPTH 708 pcPdmDepthOrg->power(pcPdmDepthOrg, m_fDepthPower); 709 #endif 647 710 } 648 711 #endif … … 666 729 // read input YUV file 667 730 m_acTVideoIOYuvDepthInputFileList[iViewIdx]->read( pcDepthPicYuvOrg, m_aiPad ) ; 731 #if POZNAN_NONLINEAR_DEPTH 732 pcDepthPicYuvOrg->power(pcDepthPicYuvOrg, m_fDepthPower); 733 #endif 668 734 bDepthEos[iViewIdx] = ( m_acTVideoIOYuvDepthInputFileList[iViewIdx]->isEof() == 1 ? true : false ); 669 735 bDepthEos[iViewIdx] = ( m_iDepthFrameRcvdVector[iViewIdx] == (m_iFrameToBeEncoded - 1) ? true : bDepthEos[iViewIdx] ); … … 697 763 for(Int iViewIdx=0; iViewIdx < m_iNumberOfViews; iViewIdx++ ) // Start encoding 698 764 { 699 #if POZNAN_ SYNTH765 #if POZNAN_CU_SYNTH||POZNAN_CU_SKIP 700 766 xStoreSynthPicsInBuffer(iViewIdx,false); 701 767 #endif … … 716 782 if( m_bUsingDepthMaps ) 717 783 { 718 #if POZNAN_ SYNTH784 #if POZNAN_CU_SYNTH||POZNAN_CU_SKIP 719 785 xStoreSynthPicsInBuffer(iViewIdx,true); 720 786 #endif … … 939 1005 { 940 1006 riNextPocToDump++; 1007 #if POZNAN_NONLINEAR_DEPTH 1008 if(isDepth) 1009 { 1010 TComPicYuv *pcPicOrg = i->second; 1011 TComPicYuv *pcPicPow = new TComPicYuv; 1012 //pcPicYuvRec->createCompatibleAs(*iterPicYuvRec); 1013 pcPicPow->create( pcPicOrg->getWidth(), pcPicOrg->getHeight(), pcPicOrg->getMaxCuWidth(), pcPicOrg->getMaxCuHeight(), pcPicOrg->getMaxCuDepth() ); 1014 //cPicPower.create(pcSPS->getWidth(), pcSPS->getHeight(), pcSPS->getMaxCUWidth(), pcSPS->getMaxCUHeight(), pcSPS->getMaxCUDepth() ); 1015 pcPicOrg->power(pcPicPow, (Float)(1.0/m_fDepthPower)); 1016 rpcTVideoIOYuvReconFile->write( pcPicPow, m_aiPad ); 1017 } else 1018 #endif 941 1019 rpcTVideoIOYuvReconFile->write( i->second, m_aiPad ); 942 1020 rcMap.erase( i ); … … 1188 1266 #endif 1189 1267 1190 #if POZNAN_ SYNTH1191 Void TAppEncTop::xStoreSynthPicsInBuffer(Int iCoddedViewIdx, Bool bDepth)1268 #if POZNAN_CU_SYNTH||POZNAN_CU_SKIP 1269 Void TAppEncTop::xStoreSynthPicsInBuffer(Int iCoddedViewIdx, Bool bDepth) 1192 1270 { 1193 1271 Int iCurPoc; … … 1200 1278 { 1201 1279 iCurPoc = m_acTEncTopList[ iCoddedViewIdx ]->getNextFrameId(); 1202 if (!(m_acTEncTopList[ iCoddedViewIdx ]->currentPocWillBeCoded())) return; 1203 } 1204 1280 if (!(m_acTEncTopList[ iCoddedViewIdx ]->currentPocWillBeCoded())) return; 1281 1205 1282 Int iNumberOfReferenceViews = 0; 1206 1283 UInt iSynthViewIdx; … … 1221 1298 1222 1299 m_cAvailabilityRenderer.setShiftLUTs( 1223 m_cCameraData.getBaseViewShiftLUTD()[iNearestViewIdx][iCoddedViewIdx], 1224 m_cCameraData.getBaseViewShiftLUTI()[iNearestViewIdx][iCoddedViewIdx], 1225 m_cCameraData.getBaseViewShiftLUTI()[iNearestViewIdx][iCoddedViewIdx], 1226 m_cCameraData.getBaseViewShiftLUTD()[iNearestViewIdx][iCoddedViewIdx],//right 1227 m_cCameraData.getBaseViewShiftLUTI()[iNearestViewIdx][iCoddedViewIdx], 1228 m_cCameraData.getBaseViewShiftLUTI()[iNearestViewIdx][iCoddedViewIdx], 1229 iRelDistToLeft 1230 ); 1231 1300 m_cCameraData.getBaseViewShiftLUTD()[iNearestViewIdx][iCoddedViewIdx], 1301 m_cCameraData.getBaseViewShiftLUTI()[iNearestViewIdx][iCoddedViewIdx], 1302 m_cCameraData.getBaseViewShiftLUTI()[iNearestViewIdx][iCoddedViewIdx], 1303 m_cCameraData.getBaseViewShiftLUTD()[iNearestViewIdx][iCoddedViewIdx],//right 1304 m_cCameraData.getBaseViewShiftLUTI()[iNearestViewIdx][iCoddedViewIdx], 1305 m_cCameraData.getBaseViewShiftLUTI()[iNearestViewIdx][iCoddedViewIdx], 1306 iRelDistToLeft 1307 ); 1232 1308 1233 1309 TComPicYuv* pcPicYuvERView = new TComPicYuv; 1234 1310 pcPicYuvERView->create( m_iSourceWidth, m_iSourceHeight, m_uiMaxCUWidth, m_uiMaxCUHeight, m_uiMaxCUDepth ); 1235 1236 1311 TComPic* pcPic = xGetPicFromView( iCoddedViewIdx, iCurPoc, bDepth ); 1237 1312 pcPic->addSynthesisBuffer(); 1238 1313 pcPic->addAvailabilityBuffer(); 1314 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 1315 pcPic->addSynthesisDepthBuffer(); 1316 TComPicYuv* pcPicYuvSynthDepthView = pcPic->getPicYuvSynthDepth(); 1317 m_cAvailabilityRenderer.extrapolateAvailabilityView( xGetPicFromView( iNearestViewIdx, iCurPoc, true )->getPicYuvRec(), xGetPicFromView( iNearestViewIdx, iCurPoc, true )->getPicYuvRec(), pcPicYuvSynthDepthView, pcPic->getPicYuvAvail(), bRenderFromLeft ); 1318 #if POZNAN_OUTPUT_SYNTH 1319 Char acFilenameBaseD[1024]; 1320 ::sprintf( acFilenameBaseD, "SynthDepth_%s_V%d.yuv", ( false ? "Dec" : "Enc" ),iCoddedViewIdx ); 1321 pcPicYuvSynthDepthView->dump(acFilenameBaseD, iCurPoc!=0); 1322 #endif 1323 #endif 1239 1324 TComPicYuv* pcPicYuvSynthView = pcPic->getPicYuvSynth(); 1240 1325 TComPicYuv* pcPicYuvAvailView = pcPic->getPicYuvAvail(); 1241 1242 1326 //m_cAvailabilityRenderer.extrapolateAvailabilityView( xGetPicFromView( iNearestViewIdx, iCurPoc, false )->getPicYuvRec(), xGetPicFromView( iNearestViewIdx, iCurPoc, true )->getPicYuvRec(), pcPicYuvERView, pcPicYuvAvailView, bRenderFromLeft ); 1243 1327 m_cAvailabilityRenderer.extrapolateAvailabilityView( xGetPicFromView( iNearestViewIdx, iCurPoc, bDepth )->getPicYuvRec(), xGetPicFromView( iNearestViewIdx, iCurPoc, true )->getPicYuvRec(), pcPicYuvSynthView, pcPicYuvAvailView, bRenderFromLeft ); … … 1256 1340 #if POZNAN_OUTPUT_AVAILABLE_MAP 1257 1341 { 1258 Char acFilenameBase[1024];1259 ::sprintf( acFilenameBase, "Available_%s_%s_V%d.yuv", (bDepth?"Depth":"Tex"),( false ? "Dec" : "Enc" ),iCoddedViewIdx );1260 pcPicYuvAvailView->dump(acFilenameBase, iCurPoc!=0);1342 Char acFilenameBase[1024]; 1343 ::sprintf( acFilenameBase, "Available_%s_%s_V%d.yuv", (bDepth?"Depth":"Tex"),( false ? "Dec" : "Enc" ),iCoddedViewIdx ); 1344 pcPicYuvAvailView->dump(acFilenameBase, iCurPoc!=0); 1261 1345 } 1262 1346 #endif … … 1268 1352 } 1269 1353 #endif 1270 1271 //Usun pcPicYuvERView i inne bufforki1272 1354 } 1273 1355 #endif -
branches/0.2-poznan-univ/source/App/TAppEncoder/TAppEncTop.h
r11 r12 51 51 //GT VSO end 52 52 53 #if POZNAN_MP 54 #include "../../Lib/TLibCommon/TComMP.h" 55 #endif 56 53 57 // ==================================================================================================================== 54 58 // Class definition … … 92 96 #endif 93 97 94 #if POZNAN_ SYNTH98 #if POZNAN_CU_SKIP||POZNAN_CU_SYNTH 95 99 TRenTop m_cAvailabilityRenderer; 100 #endif 101 102 #if POZNAN_MP 103 TComMP* m_pcMP; 104 #endif 105 106 #if POZNAN_STAT_JK 107 std::vector<FILE*> m_cStatFileList; ///< texure statistics file handles 108 std::vector<FILE*> m_cDepthStatFileList; ///< depth statistics file handles 96 109 #endif 97 110 … … 149 162 #endif 150 163 164 #if POZNAN_MP 165 TComMP* getMP() {return m_pcMP;} 166 #endif 167 151 168 #if HHI_VSO 152 169 private: … … 160 177 161 178 162 #if POZNAN_ SYNTH179 #if POZNAN_CU_SYNTH 163 180 private: 164 181 Void xStoreSynthPicsInBuffer(Int iCoddedViewIdx, Bool bDepth); -
branches/0.2-poznan-univ/source/App/TAppRenderer/TAppRendererCfg.cpp
r5 r12 186 186 { 187 187 m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered, 188 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, NULL, NULL, m_iLog2SamplingFactor+m_iShiftPrecision ); 188 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, NULL, NULL, m_iLog2SamplingFactor+m_iShiftPrecision 189 #if POZNAN_NONLINEAR_DEPTH 190 ,1.0f 191 #endif 192 ); 189 193 m_iNumberOfInputViews = (Int) m_cCameraData.getBaseViewNumbers() .size(); 190 194 m_iNumberOfOutputViews = m_iNumberOfInputViews - 1; … … 205 209 206 210 m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered, 207 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, NULL, piaTempViews, m_iLog2SamplingFactor+m_iShiftPrecision ); 211 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, NULL, piaTempViews, m_iLog2SamplingFactor+m_iShiftPrecision 212 #if POZNAN_NONLINEAR_DEPTH 213 , 1.0f 214 #endif 215 ); 208 216 } 209 217 else 210 218 { 211 219 m_cCameraData.init( MAX_INPUT_VIEW_NUM, uiInputBitDepth, uiCamParPrecision, (UInt)m_iFrameSkip, (UInt)m_iFramesToBeRendered, 212 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, m_pchSynthViewCameraNumbers, NULL, m_iLog2SamplingFactor+m_iShiftPrecision ); 220 m_pchCameraParameterFile, m_pchBaseViewCameraNumbers, m_pchSynthViewCameraNumbers, NULL, m_iLog2SamplingFactor+m_iShiftPrecision 221 #if POZNAN_NONLINEAR_DEPTH 222 ,1.0f 223 #endif 224 ); 213 225 m_iNumberOfOutputViews = (Int) m_cCameraData.getSynthViewNumbers().size(); 214 226 m_iNumberOfInputViews = (Int) m_cCameraData.getBaseViewNumbers() .size(); -
branches/0.2-poznan-univ/source/Lib/TLibCommon/CommonDef.h
r11 r12 137 137 #define LOG2_DISP_PREC_LUT 2 ///< log2 of disparity precision used in integer disparity LUTs 138 138 139 #if ( HHI_INTER_VIEW_MOTION_PRED || HHI_INTER_VIEW_RESIDUAL_PRED )139 #if ( HHI_INTER_VIEW_MOTION_PRED || HHI_INTER_VIEW_RESIDUAL_PRED || POZNAN_MP_USE_DEPTH_MAP_GENERATION) 140 140 #define DEPTH_MAP_GENERATION 1 141 141 #else … … 178 178 #define POZNAN_OUTPUT_SYNTH 0 // output synthesised view (for debugging) 179 179 180 #if POZNAN_NONLINEAR_DEPTH 181 #define POZNAN_LUT_INCREASED_PRECISION 0 // 1 182 #else 183 #define POZNAN_LUT_INCREASED_PRECISION 0 184 #endif 185 186 #if POZNAN_NONLINEAR_DEPTH 187 inline UChar quantizeDepthPower(Float fDepthPower) 188 { 189 Int r = (Int) ( (fDepthPower-1.0f)*128.0f + 0.5f); 190 if (r<=0) return 0; 191 if (r>255) r=255; 192 return r; 193 }; 194 195 inline Float dequantizeDepthPower(Int iDepthQuant) 196 { 197 return iDepthQuant/128.0f + 1.0f; 198 }; 199 #endif 200 201 #if POZNAN_EIVD 202 #define POZNAN_EIVD_MERGE_POS 0 // position of EIVD candidate in merge list for coding (0..6) - overwrites PDM_MERGE_POS settings, is overwritten by HHI_MPI_MERGE_POS settings!!! 203 #endif 204 180 205 // ==================================================================================================================== 181 206 // Macro functions … … 187 212 #define Clip(x) ( Min(g_uiIBDI_MAX, Max( 0, (x)) ) ) ///< clip with bit-depth range 188 213 #define Clip3( MinVal, MaxVal, a) ( ((a)<(MinVal)) ? (MinVal) : (((a)>(MaxVal)) ? (MaxVal) :(a)) ) ///< general min/max clip 189 #define RemoveBitIncrement(x) ( (x + ( (1 << g_uiBitIncrement) >> 1 )) >> g_uiBitIncrement ) ///< Remove Bit increment 214 #define RemoveBitIncrement(x) ( ((x) + ( (1 << g_uiBitIncrement) >> 1 )) >> g_uiBitIncrement ) ///< Remove Bit increment 215 216 #if POZNAN_LUT_INCREASED_PRECISION 217 #define RemoveBitIncrementLUT(x) (x) ///< Remove Bit increment 218 #define SizeOfLUT (256 << g_uiBitIncrement) 219 #else 220 #define SizeOfLUT 256 221 #define RemoveBitIncrementLUT(x) ( ((x) + ( (1 << g_uiBitIncrement) >> 1 )) >> g_uiBitIncrement ) ///< Remove Bit increment 222 #endif 190 223 191 224 #define DATA_ALIGN 1 ///< use 32-bit aligned malloc/free … … 217 250 #define AMVP_MAX_NUM_CANDS 6 ///< max number of final candidates 218 251 // MERGE 252 #if POZNAN_EIVD 253 #define MRG_MAX_NUM_CANDS 7 254 #define POZNAN_EIVD_MRG_CAND MRG_MAX_NUM_CANDS-1 // position of EIVD candidate in merge list (0..6) 255 #else 219 256 #define MRG_MAX_NUM_CANDS 6 257 #endif 220 258 221 259 // Reference memory management -
branches/0.2-poznan-univ/source/Lib/TLibCommon/ContextTables.h
r5 r12 53 53 #define NUM_MERGE_FLAG_EXT_CTX 3 ///< number of context models for merge flag of merge extended 54 54 #define NUM_MERGE_IDX_EXT_CTX 4 ///< number of context models for merge index of merge extended 55 #define NUM_MV_MERGE_IDX_EXT_CTX 5///< number of context models for merge index of merge extended55 #define NUM_MV_MERGE_IDX_EXT_CTX 6 ///< number of context models for merge index of merge extended 56 56 #define NUM_RES_PRED_FLAG_CTX 3 ///< number of context for residual prediction flag 57 57 -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComDataCU.cpp
r11 r12 187 187 m_acCUMvField[1].create( uiNumPartition ); 188 188 189 #if POZNAN_EIVD_CALC_PRED_DATA 190 m_acCUMvField2nd[0].create( uiNumPartition ); 191 m_acCUMvField2nd[1].create( uiNumPartition ); 192 #endif 193 189 194 #if HHI_DMM_WEDGE_INTRA 190 195 m_puiWedgeFullTabIdx = (UInt*)xMalloc(UInt, uiNumPartition); … … 210 215 m_acCUMvField[0].setNumPartition(uiNumPartition ); 211 216 m_acCUMvField[1].setNumPartition(uiNumPartition ); 217 218 #if POZNAN_EIVD_CALC_PRED_DATA 219 m_acCUMvField2nd[0].setNumPartition(uiNumPartition ); 220 m_acCUMvField2nd[1].setNumPartition(uiNumPartition ); 221 #endif 212 222 } 213 223 … … 296 306 if ( m_piContourPredTexDeltaDC2 ) { xFree(m_piContourPredTexDeltaDC2); m_piContourPredTexDeltaDC2 = NULL; } 297 307 #endif 308 309 #if POZNAN_EIVD_CALC_PRED_DATA 310 m_acCUMvField2nd[0].destroy(); 311 m_acCUMvField2nd[1].destroy(); 312 #endif 313 298 314 } 299 315 … … 388 404 m_acCUMvField[0].clearMvField(); 389 405 m_acCUMvField[1].clearMvField(); 406 407 #if POZNAN_EIVD_CALC_PRED_DATA 408 m_acCUMvField2nd[0].clearMvField(); 409 m_acCUMvField2nd[1].clearMvField(); 410 #endif 390 411 391 412 UInt uiTmp = m_puhWidth[0]*m_puhHeight[0]; … … 508 529 m_acCUMvField[1].clearMvField(); 509 530 531 #if POZNAN_EIVD_CALC_PRED_DATA 532 m_acCUMvField2nd[0].clearMvField(); 533 m_acCUMvField2nd[1].clearMvField(); 534 #endif 535 510 536 #if HHI_DMM_WEDGE_INTRA 511 537 memset( m_puiWedgeFullTabIdx, 0, iSizeInUInt ); … … 617 643 m_uiEntropySliceStartCU = pcCU->getEntropySliceStartCU(); 618 644 645 #if POZNAN_EIVD_CALC_PRED_DATA 646 m_acCUMvField2nd[0].clearMvField(); 647 m_acCUMvField2nd[1].clearMvField(); 648 #endif 649 619 650 #if HHI_DMM_WEDGE_INTRA 620 651 memset( m_puiWedgeFullTabIdx, 0, iSizeInUInt ); … … 719 750 m_acCUMvField[1].setMvdPtr(pcCU->getCUMvField(REF_PIC_LIST_1)->getMvd() + uiPart); 720 751 m_acCUMvField[1].setRefIdxPtr(pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx() + uiPart); 752 753 #if POZNAN_EIVD_CALC_PRED_DATA 754 m_acCUMvField2nd[0].setMvPtr(pcCU->getCUMvField2nd(REF_PIC_LIST_0)->getMv() + uiPart); 755 m_acCUMvField2nd[0].setMvdPtr(pcCU->getCUMvField2nd(REF_PIC_LIST_0)->getMvd() + uiPart); 756 m_acCUMvField2nd[0].setRefIdxPtr(pcCU->getCUMvField2nd(REF_PIC_LIST_0)->getRefIdx() + uiPart); 757 m_acCUMvField2nd[1].setMvPtr(pcCU->getCUMvField2nd(REF_PIC_LIST_1)->getMv() + uiPart); 758 m_acCUMvField2nd[1].setMvdPtr(pcCU->getCUMvField2nd(REF_PIC_LIST_1)->getMvd() + uiPart); 759 m_acCUMvField2nd[1].setRefIdxPtr(pcCU->getCUMvField2nd(REF_PIC_LIST_1)->getRefIdx() + uiPart); 760 #endif 761 721 762 m_uiSliceStartCU = pcCU->getSliceStartCU(); 722 763 m_uiEntropySliceStartCU = pcCU->getEntropySliceStartCU(); … … 787 828 m_acCUMvField[eRefPicList].setMvdPtr(pcCU->getCUMvField(eRefPicList)->getMvd() + uiAbsPartIdx); 788 829 m_acCUMvField[eRefPicList].setRefIdxPtr(pcCU->getCUMvField(eRefPicList)->getRefIdx() + uiAbsPartIdx); 830 831 #if POZNAN_EIVD_CALC_PRED_DATA 832 m_acCUMvField2nd[eRefPicList].setMvPtr(pcCU->getCUMvField2nd(eRefPicList)->getMv() + uiAbsPartIdx); 833 m_acCUMvField2nd[eRefPicList].setMvdPtr(pcCU->getCUMvField2nd(eRefPicList)->getMvd() + uiAbsPartIdx); 834 m_acCUMvField2nd[eRefPicList].setRefIdxPtr(pcCU->getCUMvField2nd(eRefPicList)->getRefIdx() + uiAbsPartIdx); 835 #endif 836 789 837 #if HHI_MPI 790 838 m_piTextureModeDepth = pcCU->getTextureModeDepth() + uiAbsPartIdx; … … 857 905 m_acCUMvField[1].copyFrom( pcCU->getCUMvField( REF_PIC_LIST_1 ), pcCU->getTotalNumPart(), uiOffset ); 858 906 907 #if POZNAN_EIVD_CALC_PRED_DATA 908 m_acCUMvField2nd[0].copyFrom( pcCU->getCUMvField2nd( REF_PIC_LIST_0 ), pcCU->getTotalNumPart(), uiOffset ); 909 m_acCUMvField2nd[1].copyFrom( pcCU->getCUMvField2nd( REF_PIC_LIST_1 ), pcCU->getTotalNumPart(), uiOffset ); 910 #endif 911 859 912 UInt uiTmp = g_uiMaxCUWidth*g_uiMaxCUHeight >> (uiDepth<<1); 860 913 UInt uiTmp2 = uiPartUnitIdx*uiTmp; … … 943 996 m_acCUMvField[0].copyTo( rpcCU->getCUMvField( REF_PIC_LIST_0 ), m_uiAbsIdxInLCU ); 944 997 m_acCUMvField[1].copyTo( rpcCU->getCUMvField( REF_PIC_LIST_1 ), m_uiAbsIdxInLCU ); 998 999 #if POZNAN_EIVD_CALC_PRED_DATA 1000 m_acCUMvField2nd[0].copyTo( rpcCU->getCUMvField2nd( REF_PIC_LIST_0 ), m_uiAbsIdxInLCU ); 1001 m_acCUMvField2nd[1].copyTo( rpcCU->getCUMvField2nd( REF_PIC_LIST_1 ), m_uiAbsIdxInLCU ); 1002 #endif 945 1003 946 1004 UInt uiTmp = (g_uiMaxCUWidth*g_uiMaxCUHeight)>>(uhDepth<<1); … … 1030 1088 m_acCUMvField[0].copyTo( rpcCU->getCUMvField( REF_PIC_LIST_0 ), m_uiAbsIdxInLCU, uiPartStart, uiQNumPart ); 1031 1089 m_acCUMvField[1].copyTo( rpcCU->getCUMvField( REF_PIC_LIST_1 ), m_uiAbsIdxInLCU, uiPartStart, uiQNumPart ); 1090 1091 #if POZNAN_EIVD_CALC_PRED_DATA 1092 m_acCUMvField2nd[0].copyTo( rpcCU->getCUMvField2nd( REF_PIC_LIST_0 ), m_uiAbsIdxInLCU, uiPartStart, uiQNumPart ); 1093 m_acCUMvField2nd[1].copyTo( rpcCU->getCUMvField2nd( REF_PIC_LIST_1 ), m_uiAbsIdxInLCU, uiPartStart, uiQNumPart ); 1094 #endif 1032 1095 1033 1096 UInt uiTmp = (g_uiMaxCUWidth*g_uiMaxCUHeight)>>((uhDepth+uiPartDepth)<<1); … … 2697 2760 #endif 2698 2761 2762 #if POZNAN_EIVD 2763 Bool bEIVDMerge = getSlice()->getMP()->isEIVDEnabled(); 2764 UInt uiEIVDAddr = POZNAN_EIVD_MRG_CAND; 2765 #endif 2766 2699 2767 bool abCandIsInter[ MRG_MAX_NUM_CANDS ]; 2700 2768 for( UInt ui = 0; ui < MRG_MAX_NUM_CANDS; ++ui ) … … 2712 2780 } 2713 2781 if( pcCULeft && !pcCULeft->isIntra( uiLeftPartIdx ) 2714 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU2782 #if POZNAN_CU_SKIP 2715 2783 && !pcCULeft->isCUSkiped( uiLeftPartIdx ) 2716 2784 #endif … … 2742 2810 } 2743 2811 if ( pcCUAbove && !pcCUAbove->isIntra( uiAbovePartIdx ) 2744 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU2812 #if POZNAN_CU_SKIP 2745 2813 && !pcCUAbove->isCUSkiped( uiAbovePartIdx ) 2746 2814 #endif … … 3191 3259 #endif 3192 3260 3261 #if POZNAN_EIVD 3262 //===== add point-to-point merge with depth maps ===== 3263 if ( bEIVDMerge ) 3264 { 3265 //prediction of motion data for points with disocclusion: 3266 UInt uiRefArrayAddr = uiEIVDAddr; 3267 for(UInt ui=0; ui<MRG_MAX_NUM_CANDS; ui++) if ( ui!=uiEIVDAddr && abCandIsInter[ui] ) {uiRefArrayAddr = ui; break;} 3268 if(uiRefArrayAddr != uiEIVDAddr) 3269 { 3270 puhInterDirNeighbours[uiEIVDAddr] = puhInterDirNeighbours[uiRefArrayAddr]; 3271 pcMvFieldNeighbours[uiEIVDAddr << 1].setMvField(pcMvFieldNeighbours[uiRefArrayAddr << 1].getMv(),pcMvFieldNeighbours[uiRefArrayAddr << 1].getRefIdx()); 3272 pcMvFieldNeighbours[(uiEIVDAddr << 1)+1].setMvField(pcMvFieldNeighbours[(uiRefArrayAddr << 1)+1].getMv(),pcMvFieldNeighbours[(uiRefArrayAddr << 1)+1].getRefIdx()); 3273 } 3274 else 3275 { 3276 TComMv cMVzero; cMVzero.setZero(); 3277 if( getSlice()->isInterB() ) 3278 { 3279 puhInterDirNeighbours[uiEIVDAddr] = 3; 3280 pcMvFieldNeighbours[uiEIVDAddr << 1].setMvField(cMVzero,0); 3281 pcMvFieldNeighbours[(uiEIVDAddr << 1)+1].setMvField(cMVzero,0); 3282 } 3283 else 3284 { 3285 if(getSlice()->getNumRefIdx(REF_PIC_LIST_0)>0) 3286 { 3287 puhInterDirNeighbours[uiEIVDAddr] = 1; 3288 pcMvFieldNeighbours[uiEIVDAddr << 1].setMvField(cMVzero,0); 3289 } 3290 else if(getSlice()->getNumRefIdx(REF_PIC_LIST_1)>0) 3291 { 3292 puhInterDirNeighbours[uiEIVDAddr] = 2; 3293 pcMvFieldNeighbours[(uiEIVDAddr << 1)+1].setMvField(cMVzero,0); 3294 } 3295 else puhInterDirNeighbours[uiEIVDAddr] = 0; 3296 } 3297 } 3298 if(puhInterDirNeighbours[uiEIVDAddr]) 3299 { 3300 abCandIsInter[uiEIVDAddr] = true; 3301 puiNeighbourCandIdx[uiEIVDAddr] = uiEIVDAddr + 1; 3302 } 3303 } 3304 #endif 3305 3193 3306 3194 3307 //===== remove duplicates ===== 3195 3308 for( UInt uiOuter = 0; uiOuter < MRG_MAX_NUM_CANDS; uiOuter++ ) 3196 3309 { 3310 #if POZNAN_EIVD 3311 if(uiOuter==POZNAN_EIVD_MRG_CAND) continue; 3312 #endif 3197 3313 if( abCandIsInter[ uiOuter ] && ( puiNeighbourCandIdx[uiOuter] == uiOuter + 1 ) ) 3198 3314 { 3199 3315 for( UInt uiIter = uiOuter + 1; uiIter < MRG_MAX_NUM_CANDS; uiIter++ ) 3200 3316 { 3317 #if POZNAN_EIVD 3318 if(uiIter==POZNAN_EIVD_MRG_CAND) continue; 3319 #endif 3201 3320 if( abCandIsInter[ uiIter ] ) 3202 3321 { … … 3280 3399 { 3281 3400 if( pcCorner && !pcCorner->isIntra( uiCornerPUIdx ) 3282 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU3401 #if POZNAN_CU_SKIP 3283 3402 && !pcCorner->isCUSkiped( uiCornerPUIdx ) 3284 3403 #endif … … 3319 3438 { 3320 3439 if( pcCorner && !pcCorner->isIntra( uiCornerPUIdx ) 3321 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU3440 #if POZNAN_CU_SKIP 3322 3441 && !pcCorner->isCUSkiped( uiCornerPUIdx ) 3323 3442 #endif … … 4441 4560 if (pColCU->isIntra(uiPartIdxCenter)) 4442 4561 return false; 4443 4444 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU4562 4563 #if POZNAN_CU_SKIP 4445 4564 if (pColCU->isSkipped(uiPartIdxCenter)) 4446 4565 return false; … … 4804 4923 } 4805 4924 #endif 4925 4926 #if POZNAN_EIVD_CALC_PRED_DATA 4927 pcCU->getCUMvField2nd( REF_PIC_LIST_0 )->copyTo( &m_acCUMvField2nd[0], -Int(uiAbsPartIdxSrc) + uiAbsPartIdxDst, uiAbsPartIdxSrc, uiNumPartition ); 4928 pcCU->getCUMvField2nd( REF_PIC_LIST_1 )->copyTo( &m_acCUMvField2nd[1], -Int(uiAbsPartIdxSrc) + uiAbsPartIdxDst, uiAbsPartIdxSrc, uiNumPartition ); 4929 #if HHI_FULL_PEL_DEPTH_MAP_MV_ACC 4930 for( UInt ui = 0; ui < uiNumPartition; ui++ ) 4931 { 4932 m_acCUMvField2nd[0].getMv( uiAbsPartIdxDst + ui ) += TComMv( 2, 2 ); 4933 m_acCUMvField2nd[0].getMv( uiAbsPartIdxDst + ui ) >>= 2; 4934 4935 m_acCUMvField2nd[1].getMv( uiAbsPartIdxDst + ui ) += TComMv( 2, 2 ); 4936 m_acCUMvField2nd[1].getMv( uiAbsPartIdxDst + ui ) >>= 2; 4937 4938 m_acCUMvField2nd[0].getMvd( uiAbsPartIdxDst + ui ) += TComMv( 2, 2 ); 4939 m_acCUMvField2nd[0].getMvd( uiAbsPartIdxDst + ui ) >>= 2; 4940 4941 m_acCUMvField2nd[1].getMvd( uiAbsPartIdxDst + ui ) += TComMv( 2, 2 ); 4942 m_acCUMvField2nd[1].getMvd( uiAbsPartIdxDst + ui ) >>= 2; 4943 } 4944 #endif 4945 #endif 4806 4946 } 4807 4947 #endif … … 4812 4952 riPosY = g_auiRasterToPelY[g_auiZscanToRaster[uiAbsPartIndex]] + getCUPelY(); 4813 4953 } 4954 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 4955 Int TComDataCU::CuQpIncrementFunction(Pel uiBlockMax) 4956 { 4957 if((uiBlockMax >> g_uiBitIncrement) >= 256 || (uiBlockMax >> g_uiBitIncrement) <0) 4958 { 4959 fprintf(stderr, "Bitincrement = %d, uiBlockMax = %d\n", g_uiBitIncrement, uiBlockMax); 4960 exit(333); 4961 } 4962 Float fVal = (Float)((255 - (uiBlockMax >> g_uiBitIncrement)) >> 4); 4963 fVal = (fVal * fVal); 4964 #if POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 4965 fVal = (Float)( fVal + getPic()->getTextureCuDeltaQpOffset() * 32); // add offset, if offset is negative than objects in front will have smaller QP than originaly - quality in front will be increased and in bacground will be decreased 4966 fVal = (Float)( fVal * getPic()->getTextureCuDeltaQpMul()); // 4967 #else 4968 fVal = (Float)( fVal + POZNAN_TEXTURE_TU_DELTA_QP_OFFSET * 32); // add offset, if offset is negative objects in front will have smaller QP than in original approach - quality in front will be increased and in bacground will be decreased 4969 fVal = (Float)( fVal * POZNAN_TEXTURE_TU_DELTA_QP_MUL); // 4970 #endif 4971 return (Int)fVal >> 5; 4972 } 4973 Int TComDataCU::getQpOffsetForTextCU(UInt uiPartIdx, Bool bIsIntra) 4974 { 4975 //if(!isTexture(getSlice()->getViewId())) 4976 if(this->getPic()->getSlice(0)->getSPS()->isDepth()) 4977 { 4978 return 0; 4979 } 4980 #if POZNAN_TEXTURE_TU_DELTA_QP_NOT_IN_BASE_VIEW 4981 //if(!getPic()->getIsSideView()) 4982 if(this->getPic()->getViewIdx() == 0)//KUBA czy indeksy na pewno s¹ od zera? 4983 { 4984 return 0; 4985 } 4986 #endif 4987 UInt iCuAddr = getAddr(); 4988 //TComPic * pcDepthPic = getPic()->getDepthPic(); 4989 TComPicYuv * pcDepthPicYUV = getPic()->getPicYuvSynthDepth(); 4990 if(pcDepthPicYUV /*pcDepthPic*/ == NULL) 4991 { 4992 char errortext[200]; 4993 sprintf(errortext, "depth map expected"); 4994 fprintf(stderr, "%s\n", errortext); 4995 exit(123); 4996 } 4997 //TComDataCU* rpcCUDepth = pcDepthPic->getCU(iCuAddr); 4998 Pel uiDepthLumaTransformBlockMax; 4999 if(bIsIntra) 5000 { 5001 // in intra block CU each TU block has QP chosen separatly so dQP is calculated for TU 5002 uiDepthLumaTransformBlockMax = getDepthLumaTransformBlockMax( pcDepthPicYUV /*rpcCUDepth*/, iCuAddr, uiPartIdx ); 5003 } 5004 else 5005 { 5006 // in inter block CU all TU block has the same QP so dQP is calculated for CU 5007 uiDepthLumaTransformBlockMax = getDepthLumaCodingBlockMax( pcDepthPicYUV /*rpcCUDepth*/, iCuAddr, uiPartIdx ); 5008 } 5009 #if POZNAN_NONLINEAR_DEPTH 5010 //Pel liczby_w[256]; 5011 //Pel liczby_t[256]; 5012 //Pel liczby_o[256]; 5013 //Float p = 1.9; 5014 //TComPowerConverter powconv_t(p, g_uiBitIncrement, g_uiBitIncrement); 5015 //TComPowerConverter powconv_o(1.0f/p, g_uiBitIncrement, g_uiBitIncrement); 5016 //for(UInt i = 0; i <256; i++) 5017 //{ 5018 // liczby_w[i] = i<<2; 5019 // liczby_t[i] = (Pel)( powconv_t(liczby_w[i]) + 0.5); 5020 // liczby_o[i] = (Pel)( powconv_o(liczby_t[i]) + 0.5)>>2; 5021 //} 5022 //printf("\n"); 5023 //if(bIsIntra)printf("intra "); 5024 //else printf("inter "); 5025 //printf("in:%d, ", uiDepthLumaTransformBlockMax); 5026 Float p = 1.0f / getSlice()->getSPS()->getDepthPower(); 5027 //printf("p:%f, ", p); 5028 TComPowerConverter powconv(p, g_uiBitIncrement, g_uiBitIncrement); 5029 uiDepthLumaTransformBlockMax = (Pel)( powconv(uiDepthLumaTransformBlockMax) + 0.5); 5030 //printf("out:%d, ", uiDepthLumaTransformBlockMax); 5031 #endif 5032 Int iDeltaQP = CuQpIncrementFunction(uiDepthLumaTransformBlockMax); 5033 //printf("dQP:%d ", iDeltaQP); 5034 #if POZNAN_TEXTURE_TU_DELTA_QP_TOP_BOTTOM_CU_ROW 5035 Int iMaxCUHeight = this->getPic()->getPicSym()->getMaxCUHeight(); 5036 Int iPicHeight = this->getPic()->getPicSym()->getPicHeight(); 5037 Int iLastPelYInFirstCURow = 0 + iMaxCUHeight; 5038 Int iFirstPelYInLastCURow = iPicHeight - iMaxCUHeight; 5039 Int iCUStartPelY = getCUPelY(); 5040 if((iCUStartPelY <= iLastPelYInFirstCURow) || (iCUStartPelY >= iFirstPelYInLastCURow)) 5041 { 5042 #if POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 5043 iDeltaQP += getPic()->getTextureCuDeltaQpTopBottomRow();// POZNAN_TEXTURE_TU_DELTA_QP_TOP_BOTTOM_CU_ROW; 5044 #else 5045 iDeltaQP += POZNAN_TEXTURE_TU_DELTA_QP_TOP_BOTTOM_ROW_VAL;// POZNAN_TEXTURE_TU_DELTA_QP_TOP_BOTTOM_CU_ROW; 5046 #endif 5047 } 5048 #endif 5049 return iDeltaQP; 5050 } 5051 5052 Int cmpProc(const Void *arg1, const Void *arg2) 5053 { 5054 return *((Pel*)arg2) - *((Pel*)arg1); 5055 } 5056 5057 // Function gets median value of depth block that has the same size and position as texture block that calls this function 5058 Pel TComDataCU::getDepthLumaCodingBlockMedian( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ) 5059 { 5060 static Pel pSortTable [64 * 64]; 5061 Int CUWidth, CUHeight; 5062 sortDepthLumaCodingBlock( pcDepthPicYUV /*rpcCUDepth*/, iCuAddr, uiPartIdx, pSortTable, CUWidth, CUHeight ); 5063 return pSortTable[(CUHeight * CUWidth) / 2]; 5064 } 5065 5066 // Function gets maximal value of depth block that has the same size and position as texture block that calls this function 5067 Pel TComDataCU::getDepthLumaCodingBlockMax( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ) 5068 { 5069 return maxDepthLumaCodingBlock( pcDepthPicYUV /*rpcCUDepth*/, iCuAddr, uiPartIdx); 5070 } 5071 Void TComDataCU::sortDepthLumaCodingBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx, Pel * pSortTable, Int& CUWidth, Int& CUHeight ) 5072 { 5073 Int x, y; 5074 UInt uiAbsZorderIdx = getZorderIdxInCU() + uiPartIdx; 5075 // CU size: 5076 CUHeight = getHeight(uiPartIdx); // Size is based on coded texture block size not on depth picture size 5077 CUWidth = getWidth(uiPartIdx); 5078 // uiAbsZorderIdx is z order idx of one particular base block (4x4 pix) in block that we process 5079 // What we need is z-order idx of first Base block (4x4 pix) in this block 5080 Int iNumBase4x4InBlock = (CUWidth >> 2) * (CUHeight >> 2); 5081 5082 UInt uiAbsZorderIdxBlockStart = (uiAbsZorderIdx / iNumBase4x4InBlock) * iNumBase4x4InBlock; 5083 // Address of block 5084 Pel* pPel = pcDepthPicYUV/*rpcCUDepth->getPic()->getPicYuvRec()*/->getLumaAddr ( iCuAddr, uiAbsZorderIdxBlockStart ); 5085 5086 Int p =0; 5087 Int iStride = getPic()->getPicYuvRec()->getStride(); 5088 for ( y = CUHeight - 1; y >= 0; y-- ) 5089 { 5090 for ( x = CUWidth - 1; x >= 0; x-- ) 5091 { 5092 pSortTable[p] = pPel[x]; ++p; 5093 } 5094 pPel += iStride; 5095 } 5096 // sort elements 5097 qsort(pSortTable, CUHeight * CUWidth, sizeof(Pel), cmpProc); 5098 } 5099 5100 Pel TComDataCU::maxDepthLumaCodingBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx) 5101 { 5102 Int x, y; 5103 UInt uiAbsZorderIdx = getZorderIdxInCU() + uiPartIdx; 5104 // CU size: 5105 Int CUHeight = getHeight(uiPartIdx); // Size is based on coded texture block size not on depth picture size 5106 Int CUWidth = getWidth(uiPartIdx); 5107 // uiAbsZorderIdx is z order idx of one particular base block (4x4 pix) in block that we process 5108 // What we need is z-order idx of first Base block (4x4 pix) in this block 5109 Int iNumBase4x4InBlock = (CUWidth >> 2) * (CUHeight >> 2); 5110 5111 UInt uiAbsZorderIdxBlockStart = (uiAbsZorderIdx / iNumBase4x4InBlock) * iNumBase4x4InBlock; 5112 // Address of block 5113 Pel* pPel = pcDepthPicYUV/*rpcCUDepth->getPic()->getPicYuvRec()*/->getLumaAddr ( iCuAddr, uiAbsZorderIdxBlockStart ); 5114 5115 Pel pValue = 0; 5116 Int iStride = getPic()->getPicYuvRec()->getStride(); 5117 for ( y = CUHeight - 1; y >= 0; y-- ) 5118 { 5119 for ( x = CUWidth - 1; x >= 0; x-- ) 5120 { 5121 if (pPel[x]>pValue) pValue = pPel[x]; 5122 } 5123 pPel += iStride; 5124 } 5125 return pValue; 5126 } 5127 5128 // Function gets median value of depth block that has the same size and position as texture block that calls this function 5129 Pel TComDataCU::getDepthLumaTransformBlockMedian( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ) 5130 { 5131 static Pel pSortTable [64 * 64]; 5132 Int TUWidth, TUHeight; 5133 sortDepthLumaTransformBlock( pcDepthPicYUV/*rpcCUDepth*/, iCuAddr, uiPartIdx, pSortTable, TUWidth, TUHeight ); 5134 return pSortTable[(TUHeight * TUWidth) / 2]; 5135 } 5136 5137 // Function gets maximal value of depth block that has the same size and position as texture block that calls this function 5138 Pel TComDataCU::getDepthLumaTransformBlockMax( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ) 5139 { 5140 return maxDepthLumaTransformBlock( pcDepthPicYUV/*rpcCUDepth*/, iCuAddr, uiPartIdx ); 5141 } 5142 Void TComDataCU::sortDepthLumaTransformBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx, Pel * pSortTable, Int& TUWidth, Int& TUHeight ) 5143 { 5144 Int x, y; 5145 UInt uiAbsZorderIdx = getZorderIdxInCU() + uiPartIdx; 5146 // CU size: 5147 TUHeight = getHeight(uiPartIdx); // Size is based on coded texture block size not on depth picture size 5148 TUWidth = getWidth(uiPartIdx); 5149 // correct CU size to trnsform size: 5150 if( getTransformIdx(uiPartIdx) ) 5151 { 5152 TUWidth = TUWidth >> 1; 5153 TUHeight = TUHeight >> 1; 5154 } 5155 // uiAbsZorderIdx is z order idx of one particular base block (4x4 pix) in block that we process 5156 // What we need is z-order idx of first Base block (4x4 pix) in this block 5157 Int iNumBase4x4InBlock = (TUWidth >> 2) * (TUHeight >> 2); 5158 5159 UInt uiAbsZorderIdxBlockStart = (uiAbsZorderIdx / iNumBase4x4InBlock) * iNumBase4x4InBlock; 5160 // Address of block 5161 Pel* pPel = pcDepthPicYUV/*rpcCUDepth->getPic()->getPicYuvRec()*/->getLumaAddr ( iCuAddr, uiAbsZorderIdxBlockStart ); 5162 5163 int p = 0; 5164 Int iStride = getPic()->getPicYuvRec()->getStride(); 5165 for ( y = TUHeight - 1; y >= 0; y-- ) 5166 { 5167 for ( x = TUWidth - 1; x >= 0; x-- ) 5168 { 5169 pSortTable[p] = pPel[x]; 5170 } 5171 pPel += iStride; 5172 } 5173 // sort elements 5174 qsort(pSortTable, TUHeight * TUWidth, sizeof(Pel), cmpProc); 5175 } 5176 Pel TComDataCU::maxDepthLumaTransformBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx) 5177 { 5178 Int x, y; 5179 UInt uiAbsZorderIdx = getZorderIdxInCU() + uiPartIdx; 5180 // CU size: 5181 Int TUHeight = getHeight(uiPartIdx); // Size is based on coded texture block size not on depth picture size 5182 Int TUWidth = getWidth(uiPartIdx); 5183 // correct CU size to trnsform size: 5184 if( getTransformIdx(uiPartIdx) ) 5185 { 5186 TUWidth = TUWidth >> 1; 5187 TUHeight = TUHeight >> 1; 5188 } 5189 // uiAbsZorderIdx is z order idx of one particular base block (4x4 pix) in block that we process 5190 // What we need is z-order idx of first Base block (4x4 pix) in this block 5191 Int iNumBase4x4InBlock = (TUWidth >> 2) * (TUHeight >> 2); 5192 5193 UInt uiAbsZorderIdxBlockStart = (uiAbsZorderIdx / iNumBase4x4InBlock) * iNumBase4x4InBlock; 5194 // Address of block 5195 Pel* pPel = pcDepthPicYUV/*rpcCUDepth->getPic()->getPicYuvRec()*/->getLumaAddr ( iCuAddr, uiAbsZorderIdxBlockStart ); 5196 5197 Pel pValue = 0; 5198 Int iStride = getPic()->getPicYuvRec()->getStride(); 5199 for ( y = TUHeight - 1; y >= 0; y-- ) 5200 { 5201 for ( x = TUWidth - 1; x >= 0; x-- ) 5202 { 5203 if (pPel[x]>pValue) pValue = pPel[x]; 5204 } 5205 pPel += iStride; 5206 } 5207 return pValue; 5208 } 5209 // Function gets median value of depth block that has the same size and position as texture block that calls this function 5210 Pel TComDataCU::getDepthLumaPredictionBlockMedian( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ) 5211 { 5212 static Pel pSortTable [64 * 64]; 5213 Int PUWidth, PUHeight; 5214 sortDepthLumaPredictionBlock( pcDepthPicYUV/*rpcCUDepth*/, iCuAddr, uiPartIdx, pSortTable, PUWidth, PUHeight ); 5215 return pSortTable[(PUHeight * PUWidth) / 2]; 5216 } 5217 5218 // Function gets maximal value of depth block that has the same size and position as texture block that calls this function 5219 Pel TComDataCU::getDepthLumaPredictionBlockMax( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ) 5220 { 5221 static Pel pSortTable [64 * 64]; 5222 Int PUWidth, PUHeight; 5223 sortDepthLumaPredictionBlock( pcDepthPicYUV/*rpcCUDepth*/, iCuAddr, uiPartIdx, pSortTable, PUWidth, PUHeight ); 5224 return pSortTable[0]; 5225 } 5226 Void TComDataCU::sortDepthLumaPredictionBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx, Pel * pSortTable, Int& PUWidth, Int& PUHeight ) 5227 { 5228 Int x, y; 5229 UInt uiAbsZorderIdx = getZorderIdxInCU() + uiPartIdx; 5230 // CU size: 5231 PUHeight = getHeight(uiPartIdx); // Size is based on coded texture block size not on depth picture size 5232 PUWidth = getWidth(uiPartIdx); 5233 // correct CU size to partition size: 5234 if( getPartitionSize(uiPartIdx) == SIZE_Nx2N || getPartitionSize(uiPartIdx) == SIZE_NxN ) 5235 { 5236 PUWidth = PUWidth >> 1; 5237 } 5238 if( getPartitionSize(uiPartIdx) == SIZE_2NxN || getPartitionSize(uiPartIdx) == SIZE_NxN ) 5239 { 5240 PUHeight = PUHeight >> 1; 5241 } 5242 5243 // uiAbsZorderIdx is z order idx of one particular base block (4x4 pix) in block that we process 5244 // What we need is z-order idx of first Base block (4x4 pix) in this block 5245 Int iNumBase4x4InBlock = (PUWidth >> 2) * (PUHeight >> 2); 5246 if(getPartitionSize(uiPartIdx) == SIZE_Nx2N) 5247 { 5248 iNumBase4x4InBlock = iNumBase4x4InBlock << 1; // KUBA if PU is Nx2N than to count start z-order idx we need to make such trick 5249 } 5250 UInt uiAbsZorderIdxBlockStart = (uiAbsZorderIdx / iNumBase4x4InBlock) * iNumBase4x4InBlock; 5251 // Address of block 5252 Pel* pPel = pcDepthPicYUV/*rpcCUDepth->getPic()->getPicYuvRec()*/->getLumaAddr ( iCuAddr, uiAbsZorderIdxBlockStart ); 5253 5254 UInt uiStride = getPic()->getPicYuvRec()->getStride(); 5255 for ( y = PUHeight - 1; y >= 0; y-- ) 5256 { 5257 for ( x = PUWidth - 1; x >= 0; x-- ) 5258 { 5259 pSortTable[y*PUWidth + x] = pPel[y*uiStride + x]; 5260 } 5261 } 5262 // sort elements 5263 qsort(pSortTable, PUHeight * PUWidth, sizeof(Pel), cmpProc); 5264 } 5265 #endif -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComDataCU.h
r11 r12 105 105 #endif//SNY_DQP 106 106 107 #if POZNAN_EIVD_CALC_PRED_DATA 108 TComCUMvField m_acCUMvField2nd[2]; ///< array of motion vectors selected for points with no MP prediction available 109 #endif 110 107 111 // ------------------------------------------------------------------------------------------------------------------- 108 112 // neighbour access variables … … 310 314 #endif 311 315 316 #if POZNAN_EIVD_CALC_PRED_DATA 317 TComCUMvField* getCUMvField2nd ( RefPicList e ) { return &m_acCUMvField2nd[e]; } 318 #endif 319 312 320 // ------------------------------------------------------------------------------------------------------------------- 313 321 // member functions for coding tool information … … 529 537 Bool isIntra ( UInt uiPartIdx ) { return m_pePredMode[ uiPartIdx ] == MODE_INTRA; } 530 538 Bool isSkipped ( UInt uiPartIdx ); ///< SKIP (no residual) 531 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU539 #if POZNAN_CU_SKIP 532 540 Bool isCUSkiped( UInt uiPartIdx ) { return m_pePredMode[ uiPartIdx ] == MODE_SYNTH; } 533 541 #endif … … 588 596 #endif //QC_MDCS 589 597 598 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 599 Int CuQpIncrementFunction ( Pel uiBlockMax ); 600 Int getQpOffsetForTextCU ( UInt uiPartIdx, Bool bIsIntra ); 601 Pel getDepthLumaCodingBlockMedian ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ); 602 Pel getDepthLumaCodingBlockMax ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ); 603 Void sortDepthLumaCodingBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx, Pel * pSortTable, Int& TUWidth, Int& TUHeight); 604 Pel maxDepthLumaCodingBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ); 605 Pel getDepthLumaTransformBlockMedian ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ); 606 Pel getDepthLumaTransformBlockMax ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ); 607 Void sortDepthLumaTransformBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx , Pel * pSortTable, Int& TUWidth, Int& TUHeight); 608 Pel maxDepthLumaTransformBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ); 609 Pel getDepthLumaPredictionBlockMedian( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ); 610 Pel getDepthLumaPredictionBlockMax ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx ); 611 Void sortDepthLumaPredictionBlock ( TComPicYuv * pcDepthPicYUV/*TComDataCU* rpcCUDepth*/, UInt iCuAddr, UInt uiPartIdx , Pel * pSortTable, Int& PUWidth, Int& PUHeight); 612 #endif 590 613 }; 591 614 -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComDepthMapGenerator.cpp
r11 r12 478 478 Pel* pSrcSamples = pcPicYuv->getLumaAddr ( 0 ); 479 479 Pel* pDstSamples = m_cTmpPic.getLumaAddr ( 0 ); 480 Int iDstStrideC = m_cTmpPic.getCStride ( ); 481 Pel* pDstSamplesCb = m_cTmpPic.getCbAddr ( 0 ); 482 Pel* pDstSamplesCr = m_cTmpPic.getCrAddr ( 0 ); 480 483 Int iMidOrgDpth = ( 1 << m_uiOrgDepthBitDepth ) >> 1; 481 484 AOF( m_cTmpPic.getWidth () == iWidth ); … … 483 486 for( Int iY = 0; iY < iHeight; iY++, pSrcSamples += iSrcStride, pDstSamples += iDstStride ) 484 487 { 488 if((iY%2) == 0 && iY != 0) 489 { 490 pDstSamplesCb += iDstStrideC; 491 pDstSamplesCr += iDstStrideC; 492 } 485 493 for( Int iX = 0; iX < iWidth; iX++ ) 486 494 { 495 if(pSrcSamples[ iX ] < 0)//== PDM_UNDEFINED_DEPTH) 496 { 497 pDstSamplesCb[ iX>>1 ] = 0; 498 pDstSamplesCr[ iX>>1 ] = 0; 499 } 487 500 Int iOrgDepth = ( pSrcSamples[ iX ] != PDM_UNDEFINED_DEPTH ? xGetOrigDepthFromVirtDepth( uiViewId, pSrcSamples[ iX ] ) : iMidOrgDpth ); 488 501 pDstSamples[ iX ] = Max( 0, Min( iMax, iOrgDepth ) ); … … 494 507 ::sprintf ( acFilename, "%s_V%d.yuv", pFilenameBase, uiViewId ); 495 508 m_cTmpPic.dump( acFilename, ( pcPic->getPOC() != 0 ) ); 509 510 pDstSamplesCb = m_cTmpPic.getCbAddr ( 0 ); 511 pDstSamplesCr = m_cTmpPic.getCrAddr ( 0 ); 512 for( Int iY = 0; iY < iHeight>>1; iY++, pDstSamplesCb += iDstStrideC, pDstSamplesCr += iDstStrideC) 513 { 514 for( Int iX = 0; iX < iWidth>>1; iX++ ) 515 { 516 pDstSamplesCb[ iX ] = iMidOrgDpth; 517 pDstSamplesCr[ iX ] = iMidOrgDpth; 518 } 519 } 496 520 } 497 521 … … 971 995 xInterPredictCUDepthMap( pcSubCU, pcSubDM ); 972 996 break; 973 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU997 #if POZNAN_CU_SKIP 974 998 case MODE_SYNTH: 975 //What to do? Need Fix !999 //What to do? Need Fix? 976 1000 xIntraPredictCUDepthMap( pcSubCU, pcSubDM ); 977 1001 break; -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComLoopFilter.cpp
r11 r12 445 445 //-- Set BS for Intra MB : BS = 4 or 3 446 446 if ( pcCUP->isIntra(uiPartP) || pcCUQ->isIntra(uiPartQ) 447 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU447 #if POZNAN_CU_SKIP && POZNAN_CU_SYNTH 448 448 || pcCUP->isCUSkiped(uiPartP) || pcCUQ->isCUSkiped(uiPartQ) 449 449 #endif … … 455 455 //-- Set BS for not Intra MB : BS = 2 or 1 or 0 456 456 if ( !pcCUP->isIntra(uiPartP) && !pcCUQ->isIntra(uiPartQ) 457 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU457 #if POZNAN_CU_SKIP && POZNAN_CU_SYNTH 458 458 && !pcCUP->isCUSkiped(uiPartP) && !pcCUQ->isCUSkiped(uiPartQ) 459 459 #endif … … 536 536 } // enf of "if( not Intra )" 537 537 538 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU//if one of the block is CUSkipped dont use loop filter538 #if POZNAN_CU_SKIP //if one of the block is CUSkipped dont use loop filter 539 539 if ( pcCUP->isCUSkiped(uiPartP) || pcCUQ->isCUSkiped(uiPartQ)) 540 540 { -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComPic.cpp
r11 r12 50 50 m_apcPicYuv[0] = NULL; 51 51 m_apcPicYuv[1] = NULL; 52 #if POZNAN_ AVAIL_MAP52 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP || POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 53 53 m_apcPicYuvAvail = NULL; 54 54 #endif 55 #if POZNAN_ SYNTH_VIEW55 #if POZNAN_CU_SYNTH 56 56 m_apcPicYuvSynth = NULL; 57 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 58 m_apcPicYuvSynthDepth= NULL; 59 #endif 57 60 #endif 58 61 #if DEPTH_MAP_GENERATION … … 122 125 m_apcPicYuv[1] = NULL; 123 126 } 124 #if POZNAN_ AVAIL_MAP127 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP || POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 125 128 if (m_apcPicYuvAvail) 126 129 { … … 131 134 #endif 132 135 133 #if POZNAN_ SYNTH_VIEW136 #if POZNAN_CU_SYNTH 134 137 if (m_apcPicYuvSynth) 135 138 { … … 138 141 m_apcPicYuvSynth = NULL; 139 142 } 143 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 144 if (m_apcPicYuvSynthDepth) 145 { 146 m_apcPicYuvSynthDepth->destroy(); 147 delete m_apcPicYuvSynthDepth; 148 m_apcPicYuvSynthDepth = NULL; 149 } 150 #endif 140 151 #endif 141 152 … … 216 227 } 217 228 218 #if POZNAN_ AVAIL_MAP229 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP || POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 219 230 Void 220 231 TComPic::addAvailabilityBuffer() … … 232 243 #endif 233 244 234 #if POZNAN_ SYNTH_VIEW245 #if POZNAN_CU_SYNTH 235 246 Void 236 247 TComPic::addSynthesisBuffer() … … 246 257 m_apcPicYuvSynth ->create( iWidth, iHeight, uiMaxCuWidth, uiMaxCuHeight, uiMaxCuDepth ); 247 258 } 259 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 260 Void 261 TComPic::addSynthesisDepthBuffer() 262 { 263 AOT( m_apcPicYuvSynthDepth ); 264 AOF( m_apcPicYuv[1] ); 265 Int iWidth = m_apcPicYuv[1]->getWidth (); 266 Int iHeight = m_apcPicYuv[1]->getHeight (); 267 UInt uiMaxCuWidth = m_apcPicYuv[1]->getMaxCuWidth (); 268 UInt uiMaxCuHeight = m_apcPicYuv[1]->getMaxCuHeight(); 269 UInt uiMaxCuDepth = m_apcPicYuv[1]->getMaxCuDepth (); 270 m_apcPicYuvSynthDepth = new TComPicYuv; 271 m_apcPicYuvSynthDepth ->create( iWidth, iHeight, uiMaxCuWidth, uiMaxCuHeight, uiMaxCuDepth ); 272 } 273 #endif 248 274 #endif 249 275 … … 339 365 } 340 366 341 #if POZNAN_ AVAIL_MAP367 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP || POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 342 368 Void 343 369 TComPic::removeAvailabilityBuffer() … … 352 378 #endif 353 379 354 #if POZNAN_ SYNTH_VIEW380 #if POZNAN_CU_SYNTH 355 381 Void 356 382 TComPic::removeSynthesisBuffer() … … 363 389 } 364 390 } 391 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 392 Void 393 TComPic::removeSynthesisDepthBuffer() 394 { 395 if( m_apcPicYuvSynthDepth ) 396 { 397 m_apcPicYuvSynthDepth->destroy(); 398 delete m_apcPicYuvSynthDepth; 399 m_apcPicYuvSynthDepth = NULL; 400 } 401 } 402 #endif 365 403 #endif 366 404 … … 430 468 #endif 431 469 432 #if POZNAN_ AVAIL_MAP470 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP 433 471 Void TComPic::checkSynthesisAvailability( TComDataCU*& rpcCU, UInt iCuAddr, UInt uiAbsZorderIdx, UInt uiPartDepth, Bool *&rpbCUSynthesied ) 434 472 { -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComPic.h
r11 r12 62 62 TComPicYuv* m_apcPicYuv[2]; // Texture, 0:org / 1:rec 63 63 64 #if POZNAN_ AVAIL_MAP64 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP || POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 65 65 TComPicYuv* m_apcPicYuvAvail; // Availability Map - Does the given pixel can be synthesised in receiver 66 66 #endif 67 67 68 #if POZNAN_ SYNTH_VIEW68 #if POZNAN_CU_SYNTH 69 69 TComPicYuv* m_apcPicYuvSynth; // Sythesied image 70 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 71 TComPicYuv* m_apcPicYuvSynthDepth; // Sythesied depth image 72 #endif 70 73 #endif 71 74 … … 107 110 #if HHI_INTERVIEW_SKIP 108 111 TComPicYuv* m_pcUsedPelsMap; 112 #endif 113 #if POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 114 Double m_dTextureCuDeltaQpOffset; 115 Double m_dTextureCuDeltaQpMul; 116 Int m_iTextureCuDeltaQpTopBottomRow; 109 117 #endif 110 118 … … 136 144 TComPicYuv* getPicYuvRec() { return m_apcPicYuv[1]; } 137 145 138 #if POZNAN_ AVAIL_MAP146 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP || POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 139 147 TComPicYuv* getPicYuvAvail() { return m_apcPicYuvAvail; } //Owieczka - returns available map from other pic image 140 148 #endif 141 149 142 #if POZNAN_ SYNTH_VIEW150 #if POZNAN_CU_SYNTH 143 151 TComPicYuv* getPicYuvSynth() { return m_apcPicYuvSynth; } //Owieczka - returns synth form other pic in image 152 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 153 TComPicYuv* getPicYuvSynthDepth() { return m_apcPicYuvSynthDepth; }; // Sythesied depth image 154 #endif 144 155 #endif 145 156 … … 213 224 214 225 Void addOriginalBuffer (); 215 #if POZNAN_ AVAIL_MAP226 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP || POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 216 227 Void addAvailabilityBuffer (); 217 228 #endif 218 #if POZNAN_ SYNTH_VIEW229 #if POZNAN_CU_SYNTH 219 230 Void addSynthesisBuffer (); 231 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 232 Void addSynthesisDepthBuffer (); 233 #endif 220 234 #endif 221 235 #if PARALLEL_MERGED_DEBLK … … 237 251 238 252 Void removeOriginalBuffer (); 239 #if POZNAN_ SYNTH_VIEW253 #if POZNAN_CU_SYNTH 240 254 Void removeSynthesisBuffer (); 241 #endif 242 #if POZNAN_AVAIL_MAP 255 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 256 Void removeSynthesisDepthBuffer (); 257 #endif 258 #endif 259 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP || POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 243 260 Void removeAvailabilityBuffer(); 244 261 #endif … … 259 276 #endif 260 277 261 #if POZNAN_ AVAIL_MAP278 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP 262 279 Void checkSynthesisAvailability( TComDataCU*& rpcBestCU, UInt iCuAddr, UInt uiAbsZorderIdx, UInt uiPartDepth, Bool *&rpbCUSynthesied); 263 280 #endif … … 280 297 const SEImessages* getSEIs() const { return m_SEIs; } 281 298 299 #if POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 300 Double getTextureCuDeltaQpOffset( ) { return m_dTextureCuDeltaQpOffset;} 301 Double getTextureCuDeltaQpMul( ) { return m_dTextureCuDeltaQpMul;} 302 Int getTextureCuDeltaQpTopBottomRow( ){ return m_iTextureCuDeltaQpTopBottomRow;} 303 Void setTextureCuDeltaQpOffset ( Double dTextureCuDeltaQpOffset ){ m_dTextureCuDeltaQpOffset = dTextureCuDeltaQpOffset; } 304 Void setTextureCuDeltaQpMul ( Double dTextureCuDeltaQpMul ){ m_dTextureCuDeltaQpMul = dTextureCuDeltaQpMul; } 305 Void setTextureCuDeltaQpTopBottomRow( Int iTextureCuDeltaQpTopBottomRow ){ m_iTextureCuDeltaQpTopBottomRow = iTextureCuDeltaQpTopBottomRow; } 306 #endif 282 307 };// END CLASS DEFINITION TComPic 283 308 -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComPicSym.cpp
r2 r12 18 18 m_uiNumPartitions = 1<<(m_uhTotalDepth<<1); 19 19 20 m_iPicWidth = iPicWidth; 21 m_iPicHeight = iPicHeight; 22 20 23 m_uiMaxCUWidth = uiMaxWidth; 21 24 m_uiMaxCUHeight = uiMaxHeight; -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComPicSym.h
r5 r12 43 43 44 44 // Include files 45 #if POZNAN_MP 46 #include "../TLibCommon/TComMP.h" 47 #endif 48 45 49 #include "CommonDef.h" 46 50 #include "TComSlice.h" … … 58 62 UInt m_uiHeightInCU; 59 63 64 Int m_iPicWidth; 65 Int m_iPicHeight; 60 66 UInt m_uiMaxCUWidth; 61 67 UInt m_uiMaxCUHeight; … … 93 99 UInt getNumPartInWidth() { return m_uiNumPartInWidth; } 94 100 UInt getNumPartInHeight() { return m_uiNumPartInHeight; } 101 Int getPicWidth () {return m_iPicWidth;} 102 Int getPicHeight () {return m_iPicHeight;} 103 UInt getMaxCUWidth () {return m_uiMaxCUWidth;} 104 UInt getMaxCUHeight () {return m_uiMaxCUHeight;} 105 UChar getTotalDepth () {return m_uhTotalDepth;} 95 106 };// END CLASS DEFINITION TComPicSym 96 107 -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComPicYuv.cpp
r2 r12 8 8 #include <assert.h> 9 9 #include <memory.h> 10 #include <math.h> 10 11 11 12 #ifdef __APPLE__ … … 16 17 17 18 #include "TComPicYuv.h" 19 18 20 19 21 TComPicYuv::TComPicYuv() … … 455 457 } 456 458 } 459 460 #if POZNAN_NONLINEAR_DEPTH 461 Void TComPicYuv::power(TComPicYuv *pcPicDst, Float p) 462 { 463 Int x,y; 464 TComPowerConverter powconv(p, g_uiBitIncrement, g_uiBitIncrement); 465 466 // Luma 467 Pel* pPelSrc = getLumaAddr(); 468 Pel* pPelDst = pcPicDst->getLumaAddr(); 469 for(y=0; y<m_iPicHeight; y++) 470 { 471 for(x=0; x<m_iPicWidth; x++) 472 { 473 pPelDst[x] = (Pel)( powconv(pPelSrc[x]) + 0.5); 474 } 475 pPelDst += pcPicDst->getStride(); 476 pPelSrc += getStride(); 477 } 478 // Chroma 479 copyToPicCb(pcPicDst); 480 copyToPicCr(pcPicDst); 481 } 482 #endif -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComPicYuv.h
r5 r12 44 44 #include "CommonDef.h" 45 45 46 #if POZNAN_NONLINEAR_DEPTH 47 48 #include <math.h> 49 50 class TComPowerConverter // OLGIERD - Z-NL-Power conversion 51 { 52 private: 53 Double m_fMul; 54 Float m_fPower; 55 56 public: 57 58 TComPowerConverter(Float fPower, Int iInputBitIncrement, Int iOutputBitIncrement) 59 :m_fPower(fPower) 60 { 61 Double fPostMul = (1<<(8+iOutputBitIncrement))-1; // OLGIERD ToDo - should be or not? 62 Double fPreMul = 1.0/((1<<(8+iInputBitIncrement))-1); 63 m_fMul = fPostMul*pow(fPreMul,(Double)fPower); 64 }; 65 66 inline Double operator() (Double Value) 67 { 68 if (Value<0) return -pow( -Value,(Double)m_fPower)*m_fMul; 69 return pow(Value,(Double)m_fPower)*m_fMul; 70 }; 71 }; 72 #else 73 class TComPowerConverter // OLGIERD - Z-NL-Power conversion 74 { 75 public: 76 77 TComPowerConverter(Float fPower, Int iInputBitIncrement, Int iOutputBitIncrement) 78 { 79 }; 80 81 inline Double operator() (Double Value) { return Value; }; 82 }; 83 #endif 46 84 // ==================================================================================================================== 47 85 // Class definition … … 175 213 Void setChromaTo ( Pel pVal ); 176 214 215 #if POZNAN_NONLINEAR_DEPTH 216 Void power(TComPicYuv *pcPicDst, Float p); 217 #endif 177 218 };// END CLASS DEFINITION TComPicYuv 178 219 -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComPrediction.cpp
r5 r12 1516 1516 { 1517 1517 pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iWidth, iHeight ); 1518 1519 #if POZNAN_EIVD 1520 if(pcCU->getMergeIndex(uiPartAddr)==POZNAN_EIVD_MRG_CAND) 1521 { 1522 motionCompensation_EIVD( pcCU, pcYuvPred, eRefPicList, iPartIdx, bPrdDepthMap ); 1523 return; 1524 } 1525 #endif 1526 1518 1527 if ( eRefPicList != REF_PIC_LIST_X ) 1519 1528 { … … 1538 1547 pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iWidth, iHeight ); 1539 1548 1549 #if POZNAN_EIVD 1550 if(pcCU->getMergeIndex(uiPartAddr)==POZNAN_EIVD_MRG_CAND) 1551 { 1552 motionCompensation_EIVD( pcCU, pcYuvPred, eRefPicList, iPartIdx, bPrdDepthMap ); 1553 continue; 1554 } 1555 #endif 1556 1540 1557 if ( eRefPicList != REF_PIC_LIST_X ) 1541 1558 { … … 1555 1572 return; 1556 1573 } 1574 1575 #if POZNAN_EIVD 1576 Void TComPrediction::motionCompensation_EIVD ( TComDataCU* pcCU, TComYuv* pcYuvPred, RefPicList eRefPicList, Int iPartIdx, Bool bPrdDepthMap ) 1577 { 1578 if(!pcCU->getSlice()->getMP()->isEIVDEnabled()) return; 1579 1580 Int iPartIdxOrg = iPartIdx; 1581 Int iWidth; 1582 Int iHeight; 1583 UInt uiPartAddr; 1584 1585 Int x,y; 1586 Int px,py,iCUBaseX,iCUBaseY; 1587 Int ref_frame0, ref_frame1; 1588 Int ref_frame0_idx, ref_frame1_idx; 1589 TComMv mv0,mv1; 1590 1591 Int ref_frame0_idx_2nd, ref_frame1_idx_2nd; 1592 TComMv mv0_2nd,mv1_2nd; 1593 1594 Pel* piDstCb; 1595 Pel* piDstCr; 1596 Pel aiUTab[MAX_CU_SIZE]; 1597 Pel aiVTab[MAX_CU_SIZE]; 1598 Pel iULast; 1599 Pel iVLast; 1600 Pel iTemp; 1601 1602 TComMP* pcMP = pcCU->getSlice()->getMP(); 1603 UInt uiViewId = pcCU->getSlice()->getSPS()->getViewId(); 1604 Bool bIsDepth = pcCU->getSlice()->getSPS()->isDepth(); 1605 1606 #if POZNAN_EIVD_CALC_PRED_DATA 1607 UInt uiPointCnt; 1608 #endif 1609 1610 for ( iPartIdx = 0; iPartIdx < pcCU->getNumPartInter(); iPartIdx++ ) 1611 { 1612 if ( iPartIdxOrg >= 0 ) iPartIdx = iPartIdxOrg; 1613 1614 pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iWidth, iHeight ); 1615 1616 //get motion data used for no-MP predicted points 1617 #if POZNAN_EIVD_CALC_PRED_DATA 1618 ref_frame0_idx_2nd = pcCU->getCUMvField2nd(REF_PIC_LIST_0)->getRefIdx(uiPartAddr); 1619 mv0_2nd = pcCU->getCUMvField2nd( REF_PIC_LIST_0 )->getMv( uiPartAddr ); 1620 1621 ref_frame1_idx_2nd = pcCU->getCUMvField2nd(REF_PIC_LIST_1)->getRefIdx(uiPartAddr); 1622 mv1_2nd = pcCU->getCUMvField2nd( REF_PIC_LIST_1 )->getMv( uiPartAddr ); 1623 #else 1624 ref_frame0_idx_2nd = pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(uiPartAddr); 1625 mv0_2nd = pcCU->getCUMvField( REF_PIC_LIST_0 )->getMv( uiPartAddr ); 1626 1627 ref_frame1_idx_2nd = pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx(uiPartAddr); 1628 mv1_2nd = pcCU->getCUMvField( REF_PIC_LIST_1 )->getMv( uiPartAddr ); 1629 #endif 1630 1631 iCUBaseX = pcCU->getCUPelX()+g_auiRasterToPelX[ g_auiZscanToRaster[uiPartAddr] ]; 1632 iCUBaseY = pcCU->getCUPelY()+g_auiRasterToPelY[ g_auiZscanToRaster[uiPartAddr] ]; 1633 1634 #if POZNAN_EIVD_CALC_PRED_DATA 1635 uiPointCnt = 0; 1636 #endif 1637 1638 for( py = 0; py < iHeight; py++) 1639 { 1640 for( px = 0; px < iWidth; px++) 1641 { 1642 x = iCUBaseX+px; 1643 y = iCUBaseY+py; 1644 1645 pcMP->getEIVDPredData(pcCU, x, y, ref_frame0, ref_frame0_idx, mv0, ref_frame0_idx_2nd, mv0_2nd, 1646 ref_frame1, ref_frame1_idx, mv1, ref_frame1_idx_2nd, mv1_2nd); 1647 1648 pcCU->getCUMvField(REF_PIC_LIST_0)->setRefIdx(ref_frame0_idx, uiPartAddr); 1649 pcCU->getCUMvField( REF_PIC_LIST_0 )->setMv( mv0, uiPartAddr ); 1650 1651 pcCU->getCUMvField(REF_PIC_LIST_1)->setRefIdx(ref_frame1_idx, uiPartAddr); 1652 pcCU->getCUMvField( REF_PIC_LIST_1 )->setMv( mv1, uiPartAddr ); 1653 1654 if ( eRefPicList != REF_PIC_LIST_X ) 1655 { 1656 xPredInterUni_EIVD (pcCU, uiPartAddr, px, py, eRefPicList, pcYuvPred, iPartIdx, bPrdDepthMap ); 1657 #ifdef WEIGHT_PRED 1658 if ( pcCU->getSlice()->getPPS()->getUseWP() ) 1659 { 1660 xWeightedPredictionUni_EIVD( pcCU, pcYuvPred, uiPartAddr, px, py, eRefPicList, pcYuvPred, iPartIdx ); 1661 } 1662 #endif 1663 } 1664 else 1665 { 1666 xPredInterBi_EIVD (pcCU, uiPartAddr, px, py, pcYuvPred, iPartIdx, bPrdDepthMap ); 1667 } 1668 1669 if(!pcCU->getSlice()->getSPS()->isDepth()) // Chroma check only for non depth 1670 { 1671 piDstCb = pcYuvPred->getCbAddr( uiPartAddr ) + (py>>1)*pcYuvPred->getCStride(); 1672 piDstCr = pcYuvPred->getCrAddr( uiPartAddr ) + (py>>1)*pcYuvPred->getCStride(); 1673 1674 //Chroma decimation 16x16 -> 8x8: 1675 if(py%2 && px%2) 1676 { 1677 iTemp = (aiUTab[px-1] + aiUTab[px] + iULast + piDstCb[px>>1] + 2)>>2; 1678 aiUTab[px-1] = iULast; 1679 iULast = piDstCb[px>>1]; 1680 piDstCb[px>>1] = iTemp; 1681 1682 iTemp = (aiVTab[px-1] + aiVTab[px] + iVLast + piDstCr[px>>1] + 2)>>2; 1683 aiVTab[px-1] = iVLast; 1684 iVLast = piDstCr[px>>1]; 1685 piDstCr[px>>1] = iTemp; 1686 } 1687 else 1688 { 1689 aiUTab[(px==0)? iWidth-1 : (px-1)] = iULast; 1690 iULast = piDstCb[px>>1]; 1691 1692 aiVTab[(px==0)? iWidth-1 : (px-1)] = iVLast; 1693 iVLast = piDstCr[px>>1]; 1694 } 1695 } 1696 1697 #if !POZNAN_EIVD_COMPRESS_ME_DATA 1698 //save motion data for every CU point 1699 pcMP->setL0RefPOC(uiViewId,bIsDepth,x,y,ref_frame0); 1700 pcMP->setL0MvX(uiViewId,bIsDepth,x,y,mv0.getHor()); 1701 pcMP->setL0MvY(uiViewId,bIsDepth,x,y,mv0.getVer()); 1702 1703 pcMP->setL1RefPOC(uiViewId,bIsDepth,x,y,ref_frame1); 1704 pcMP->setL1MvX(uiViewId,bIsDepth,x,y,mv1.getHor()); 1705 pcMP->setL1MvY(uiViewId,bIsDepth,x,y,mv1.getVer()); 1706 #endif 1707 1708 #if POZNAN_EIVD_CALC_PRED_DATA 1709 pcMP->getTempL0RefIdx()[uiPointCnt] = ref_frame0_idx; 1710 pcMP->getTempL0MvX()[uiPointCnt] = mv0.getHor(); 1711 pcMP->getTempL0MvY()[uiPointCnt] = mv0.getVer(); 1712 1713 pcMP->getTempL1RefIdx()[uiPointCnt] = ref_frame1_idx; 1714 pcMP->getTempL1MvX()[uiPointCnt] = mv1.getHor(); 1715 pcMP->getTempL1MvY()[uiPointCnt] = mv1.getVer(); 1716 1717 uiPointCnt++; 1718 #endif 1719 1720 } 1721 } 1722 1723 //set motion data representing CU with EIVD 1724 PartSize ePartSize = pcCU->getPartitionSize( uiPartAddr ); //PartSize ePartSize = pcCU->getPartitionSize( 0 ); 1725 #if POZNAN_EIVD_CALC_PRED_DATA 1726 pcMP->xCalcEIVDPredData(uiPointCnt, ref_frame0_idx, mv0, ref_frame1_idx, mv1); 1727 1728 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( mv0, ref_frame0_idx, ePartSize, uiPartAddr, iPartIdx, 0 ); 1729 //pcCU->getCUMvField(REF_PIC_LIST_0)->setRefIdx(ref_frame0_idx,uiPartAddr); 1730 //pcCU->getCUMvField( REF_PIC_LIST_0 )->setMv(mv0, uiPartAddr); 1731 1732 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( mv1, ref_frame1_idx, ePartSize, uiPartAddr, iPartIdx, 0 ); 1733 //pcCU->getCUMvField(REF_PIC_LIST_1)->setRefIdx(ref_frame1_idx,uiPartAddr); 1734 //pcCU->getCUMvField( REF_PIC_LIST_1 )->setMv(mv1, uiPartAddr); 1735 #else 1736 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( mv0_2nd, ref_frame0_idx_2nd, ePartSize, uiPartAddr, iPartIdx, 0 ); 1737 //pcCU->getCUMvField(REF_PIC_LIST_0)->setRefIdx(ref_frame0_idx_2nd,uiPartAddr); 1738 //pcCU->getCUMvField( REF_PIC_LIST_0 )->setMv(mv0_2nd, uiPartAddr); 1739 //pcCU->getCUMvField( REF_PIC_LIST_0 )->setMv(mv0.setZero(), uiPartAddr); 1740 1741 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( mv1_2nd, ref_frame1_idx_2nd, ePartSize, uiPartAddr, iPartIdx, 0 ); 1742 //pcCU->getCUMvField(REF_PIC_LIST_1)->setRefIdx(ref_frame1_idx_2nd,uiPartAddr); 1743 //pcCU->getCUMvField( REF_PIC_LIST_1 )->setMv(mv1_2nd, uiPartAddr); 1744 //pcCU->getCUMvField( REF_PIC_LIST_1 )->setMv(mv1.setZero(), uiPartAddr); 1745 #endif 1746 1747 if ( iPartIdxOrg >= 0 ) break; 1748 } 1749 return; 1750 } 1751 #endif 1557 1752 1558 1753 #if HIGH_ACCURACY_BI … … 2090 2285 } 2091 2286 2287 2288 2289 #if POZNAN_EIVD 2290 2291 #if HIGH_ACCURACY_BI 2292 Void TComPrediction::xPredInterUni_EIVD ( TComDataCU* pcCU, UInt uiPartAddr, Int iPosX, Int iPosY, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Int iPartIdx, Bool bPrdDepthMap, Bool bi ) 2293 #else 2294 Void TComPrediction::xPredInterUni_EIVD ( TComDataCU* pcCU, UInt uiPartAddr, Int iPosX, Int iPosY, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Int iPartIdx, Bool bPrdDepthMap ) 2295 #endif 2296 { 2297 Int iRefIdx = pcCU->getCUMvField( eRefPicList )->getRefIdx( uiPartAddr ); assert (iRefIdx >= 0); 2298 TComMv cMv = pcCU->getCUMvField( eRefPicList )->getMv( uiPartAddr ); 2299 pcCU->clipMv(cMv); 2300 2301 #if DEPTH_MAP_GENERATION 2302 if( bPrdDepthMap ) 2303 { 2304 #if HIGH_ACCURACY_BI 2305 UInt uiRShift = ( bi ? 14-g_uiBitDepth-g_uiBitIncrement : 0 ); 2306 #else 2307 UInt uiRShift = 0; 2308 #endif 2309 xPredInterPrdDepthMap_EIVD( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPredDepthMap(), uiPartAddr, &cMv, iPosX, iPosY, rpcYuvPred, uiRShift, PDM_DEPTH_MAP_MCP_FILTER ); 2310 return; 2311 } 2312 #endif 2313 2314 #if HHI_FULL_PEL_DEPTH_MAP_MV_ACC 2315 if( pcCU->getSlice()->getSPS()->isDepth() ) 2316 { 2317 #if HIGH_ACCURACY_BI 2318 UInt uiRShift = ( bi ? 14-g_uiBitDepth-g_uiBitIncrement : 0 ); 2319 #else 2320 UInt uiRShift = 0; 2321 #endif 2322 xPredInterPrdDepthMap_EIVD( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iPosX, iPosY, rpcYuvPred, uiRShift, 2 ); 2323 } 2324 else 2325 { 2326 #endif 2327 #if HIGH_ACCURACY_BI 2328 if(!bi) 2329 { 2330 xPredInterLumaBlk_EIVD ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iPosX, iPosY, rpcYuvPred ); 2331 } 2332 else 2333 { 2334 xPredInterLumaBlk_EIVD_ha ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iPosX, iPosY, rpcYuvPred ); 2335 } 2336 #else 2337 xPredInterLumaBlk_EIVD ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iPosX, iPosY, rpcYuvPred ); 2338 #endif 2339 #if HHI_FULL_PEL_DEPTH_MAP_MV_ACC 2340 } 2341 #endif 2342 2343 #if HIGH_ACCURACY_BI 2344 if (!bi) 2345 { 2346 xPredInterChromaBlk_EIVD ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iPosX, iPosY, rpcYuvPred ); 2347 } 2348 else 2349 { 2350 xPredInterChromaBlk_EIVD_ha ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec() , uiPartAddr, &cMv, iPosX, iPosY, rpcYuvPred ); 2351 } 2352 #else 2353 xPredInterChromaBlk_EIVD ( pcCU, pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec(), uiPartAddr, &cMv, iPosX, iPosY, rpcYuvPred ); 2354 #endif 2355 } 2356 2357 Void TComPrediction::xPredInterBi_EIVD ( TComDataCU* pcCU, UInt uiPartAddr, Int iPosX, Int iPosY, TComYuv*& rpcYuvPred, Int iPartIdx, Bool bPrdDepthMap ) 2358 { 2359 TComYuv* pcMbYuv; 2360 Int iRefIdx[2] = {-1, -1}; 2361 2362 for ( Int iRefList = 0; iRefList < 2; iRefList++ ) 2363 { 2364 RefPicList eRefPicList = (iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0); 2365 iRefIdx[iRefList] = pcCU->getCUMvField( eRefPicList )->getRefIdx( uiPartAddr ); 2366 2367 if ( iRefIdx[iRefList] < 0 ) 2368 { 2369 continue; 2370 } 2371 2372 assert( iRefIdx[iRefList] < pcCU->getSlice()->getNumRefIdx(eRefPicList) ); 2373 2374 pcMbYuv = &m_acYuvPred[iRefList]; 2375 #if HIGH_ACCURACY_BI 2376 if( pcCU->getCUMvField( REF_PIC_LIST_0 )->getRefIdx( uiPartAddr ) >= 0 && pcCU->getCUMvField( REF_PIC_LIST_1 )->getRefIdx( uiPartAddr ) >= 0 ) 2377 xPredInterUni_EIVD ( pcCU, uiPartAddr, iPosX, iPosY, eRefPicList, pcMbYuv, iPartIdx, bPrdDepthMap, true ); 2378 else 2379 xPredInterUni_EIVD ( pcCU, uiPartAddr, iPosX, iPosY, eRefPicList, pcMbYuv, iPartIdx, bPrdDepthMap ); 2380 #else 2381 xPredInterUni_EIVD ( pcCU, uiPartAddr, iPosX, iPosY, eRefPicList, pcMbYuv, iPartIdx, bPrdDepthMap ); 2382 #endif 2383 } 2384 2385 #ifdef WEIGHT_PRED 2386 if ( pcCU->getSlice()->getPPS()->getWPBiPredIdc() ) 2387 { 2388 xWeightedPredictionBi_EIVD( pcCU, &m_acYuvPred[0], &m_acYuvPred[1], iRefIdx[0], iRefIdx[1], uiPartAddr, iPosX, iPosY, rpcYuvPred ); 2389 } 2390 else 2391 #endif 2392 xWeightedAverage_EIVD( pcCU, &m_acYuvPred[0], &m_acYuvPred[1], iRefIdx[0], iRefIdx[1], uiPartAddr, iPosX, iPosY, rpcYuvPred ); 2393 } 2394 2395 Void TComPrediction::xPredInterPrdDepthMap_EIVD( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv, UInt uiRShift, UInt uiFilterMode ) // 0:std, 1:bilin, 2:nearest neighbour 2396 { 2397 AOF( uiFilterMode <= 2 ); 2398 2399 Int iFPelMask = ~3; 2400 Int iRefStride = pcPicYuvRef->getStride(); 2401 Int iDstStride = rpcYuv->getStride(); 2402 Int iHor = ( uiFilterMode == 2 ? ( pcMv->getHor() + 2 ) & iFPelMask : pcMv->getHor() ); 2403 Int iVer = ( uiFilterMode == 2 ? ( pcMv->getVer() + 2 ) & iFPelMask : pcMv->getVer() ); 2404 #if HHI_FULL_PEL_DEPTH_MAP_MV_ACC 2405 if( pcCU->getSlice()->getSPS()->isDepth() ) 2406 { 2407 assert( uiFilterMode == 2 ); 2408 iHor = pcMv->getHor() * 4; 2409 iVer = pcMv->getVer() * 4; 2410 } 2411 #endif 2412 Int iRefOffset = ( iHor >> 2 ) + ( iVer >> 2 ) * iRefStride; 2413 Int ixFrac = iHor & 0x3; 2414 Int iyFrac = iVer & 0x3; 2415 Pel* piRefY = pcPicYuvRef->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr ) + iRefOffset; 2416 Pel* piDstY = rpcYuv->getLumaAddr( uiPartAddr ); 2417 2418 piRefY += iPosY*iRefStride+iPosX; 2419 piDstY += iPosY*iDstStride+iPosX; 2420 2421 // Integer position 2422 if( ixFrac == 0 && iyFrac == 0 ) 2423 { 2424 piDstY[ 0 ] = piRefY[ 0 ] << uiRShift; 2425 return; 2426 } 2427 2428 // bi-linear interpolation 2429 if( uiFilterMode == 1 ) 2430 { 2431 Int iW00 = ( 4 - ixFrac ) * ( 4 - iyFrac ); 2432 Int iW01 = ( ixFrac ) * ( 4 - iyFrac ); 2433 Int iW10 = ( 4 - ixFrac ) * ( iyFrac ); 2434 Int iW11 = ( ixFrac ) * ( iyFrac ); 2435 Pel* piRefY1 = piRefY + iRefStride; 2436 Int iSV = iW00 * piRefY [ 0 ] + iW01 * piRefY [ 1 ] 2437 + iW10 * piRefY1[ 0 ] + iW11 * piRefY1[ 1 ]; 2438 iSV <<= uiRShift; 2439 piDstY[ 0 ] = ( iSV + 8 ) >> 4; 2440 return; 2441 } 2442 2443 xPredInterLumaBlk_EIVD( pcCU, pcPicYuvRef, uiPartAddr, pcMv, iPosX, iPosY, rpcYuv ); 2444 return; 2445 } 2446 2447 2448 #if HIGH_ACCURACY_BI 2449 2450 Void TComPrediction::xPredInterLumaBlk_EIVD_ha( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv ) 2451 { 2452 Int iRefStride = pcPicYuvRef->getStride(); 2453 Int iDstStride = rpcYuv->getStride(); 2454 2455 Int iRefOffset = ( pcMv->getHor() >> 2 ) + ( pcMv->getVer() >> 2 ) * iRefStride; 2456 Pel* piRefY = pcPicYuvRef->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr ) + iRefOffset; 2457 2458 Int ixFrac = pcMv->getHor() & 0x3; 2459 Int iyFrac = pcMv->getVer() & 0x3; 2460 2461 Pel* piDstY = rpcYuv->getLumaAddr( uiPartAddr ); 2462 UInt shiftNum = 14-g_uiBitDepth-g_uiBitIncrement; 2463 2464 piDstY += iPosY*iDstStride+iPosX; 2465 piRefY += iPosY*iRefStride+iPosX; 2466 2467 // Integer point 2468 if ( ixFrac == 0 && iyFrac == 0 ) 2469 { 2470 *piDstY = (*piRefY)<<shiftNum; 2471 return; 2472 } 2473 2474 Int iWidth = 1; 2475 Int iHeight = 1; 2476 2477 // Half-pel horizontal 2478 if ( ixFrac == 2 && iyFrac == 0 ) 2479 { 2480 xCTI_FilterHalfHor_ha ( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2481 return; 2482 } 2483 2484 // Half-pel vertical 2485 if ( ixFrac == 0 && iyFrac == 2 ) 2486 { 2487 xCTI_FilterHalfVer_ha ( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2488 return; 2489 } 2490 2491 Int iExtStride = m_iYuvExtStride;//m_cYuvExt.getStride(); 2492 Int* piExtY = m_piYuvExt;//m_cYuvExt.getLumaAddr(); 2493 2494 // Half-pel center 2495 if ( ixFrac == 2 && iyFrac == 2 ) 2496 { 2497 xCTI_FilterHalfVer (piRefY - 3, iRefStride, 1, iWidth +7, iHeight, iExtStride, 1, piExtY ); 2498 xCTI_FilterHalfHor_ha (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2499 return; 2500 } 2501 2502 // Quater-pel horizontal 2503 if ( iyFrac == 0) 2504 { 2505 if ( ixFrac == 1) 2506 { 2507 xCTI_FilterQuarter0Hor_ha( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2508 return; 2509 } 2510 if ( ixFrac == 3) 2511 { 2512 xCTI_FilterQuarter1Hor_ha( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2513 return; 2514 } 2515 } 2516 if ( iyFrac == 2 ) 2517 { 2518 if ( ixFrac == 1) 2519 { 2520 xCTI_FilterHalfVer (piRefY -3, iRefStride, 1, iWidth +7, iHeight, iExtStride, 1, piExtY ); 2521 xCTI_FilterQuarter0Hor_ha (piExtY + 3, iExtStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2522 return; 2523 } 2524 if ( ixFrac == 3) 2525 { 2526 xCTI_FilterHalfVer (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2527 xCTI_FilterQuarter1Hor_ha (piExtY + 3, iExtStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2528 return; 2529 } 2530 } 2531 2532 // Quater-pel vertical 2533 if( ixFrac == 0 ) 2534 { 2535 if( iyFrac == 1 ) 2536 { 2537 xCTI_FilterQuarter0Ver_ha( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2538 return; 2539 } 2540 if( iyFrac == 3 ) 2541 { 2542 xCTI_FilterQuarter1Ver_ha( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2543 return; 2544 } 2545 } 2546 2547 if( ixFrac == 2 ) 2548 { 2549 if( iyFrac == 1 ) 2550 { 2551 xCTI_FilterQuarter0Ver (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2552 xCTI_FilterHalfHor_ha (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2553 2554 return; 2555 } 2556 if( iyFrac == 3 ) 2557 { 2558 xCTI_FilterQuarter1Ver (piRefY -3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2559 xCTI_FilterHalfHor_ha (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2560 return; 2561 } 2562 } 2563 2564 /// Quarter-pel center 2565 if ( iyFrac == 1) 2566 { 2567 if ( ixFrac == 1) 2568 { 2569 xCTI_FilterQuarter0Ver (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2570 xCTI_FilterQuarter0Hor_ha (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2571 return; 2572 } 2573 if ( ixFrac == 3) 2574 { 2575 xCTI_FilterQuarter0Ver (piRefY - 3, iRefStride, 1, iWidth +7, iHeight, iExtStride, 1, piExtY ); 2576 xCTI_FilterQuarter1Hor_ha (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2577 2578 return; 2579 } 2580 } 2581 if ( iyFrac == 3 ) 2582 { 2583 if ( ixFrac == 1) 2584 { 2585 xCTI_FilterQuarter1Ver (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2586 xCTI_FilterQuarter0Hor_ha (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2587 return; 2588 } 2589 if ( ixFrac == 3) 2590 { 2591 xCTI_FilterQuarter1Ver (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2592 xCTI_FilterQuarter1Hor_ha (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2593 return; 2594 } 2595 } 2596 } 2597 2598 #endif 2599 2600 Void TComPrediction::xPredInterLumaBlk_EIVD( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv ) 2601 { 2602 Int iRefStride = pcPicYuvRef->getStride(); 2603 Int iDstStride = rpcYuv->getStride(); 2604 2605 Int iRefOffset = ( pcMv->getHor() >> 2 ) + ( pcMv->getVer() >> 2 ) * iRefStride; 2606 Pel* piRefY = pcPicYuvRef->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr ) + iRefOffset; 2607 2608 Int ixFrac = pcMv->getHor() & 0x3; 2609 Int iyFrac = pcMv->getVer() & 0x3; 2610 2611 Pel* piDstY = rpcYuv->getLumaAddr( uiPartAddr ); 2612 2613 piDstY += iPosY*iDstStride+iPosX; 2614 piRefY += iPosY*iRefStride+iPosX; 2615 2616 // Integer point 2617 if ( ixFrac == 0 && iyFrac == 0 ) 2618 { 2619 ::memcpy(piDstY, piRefY, sizeof(Pel)); 2620 return; 2621 } 2622 2623 Int iWidth = 1; 2624 Int iHeight = 1; 2625 2626 // Half-pel horizontal 2627 if ( ixFrac == 2 && iyFrac == 0 ) 2628 { 2629 xCTI_FilterHalfHor ( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2630 return; 2631 } 2632 2633 // Half-pel vertical 2634 if ( ixFrac == 0 && iyFrac == 2 ) 2635 { 2636 xCTI_FilterHalfVer ( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2637 return; 2638 } 2639 2640 Int iExtStride = m_iYuvExtStride;//m_cYuvExt.getStride(); 2641 Int* piExtY = m_piYuvExt;//m_cYuvExt.getLumaAddr(); 2642 2643 // Half-pel center 2644 if ( ixFrac == 2 && iyFrac == 2 ) 2645 { 2646 2647 xCTI_FilterHalfVer (piRefY - 3, iRefStride, 1, iWidth +7, iHeight, iExtStride, 1, piExtY ); 2648 xCTI_FilterHalfHor (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2649 return; 2650 } 2651 2652 // Quater-pel horizontal 2653 if ( iyFrac == 0) 2654 { 2655 if ( ixFrac == 1) 2656 { 2657 xCTI_FilterQuarter0Hor( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2658 return; 2659 } 2660 if ( ixFrac == 3) 2661 { 2662 xCTI_FilterQuarter1Hor( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2663 return; 2664 } 2665 } 2666 if ( iyFrac == 2 ) 2667 { 2668 if ( ixFrac == 1) 2669 { 2670 xCTI_FilterHalfVer (piRefY -3, iRefStride, 1, iWidth +7, iHeight, iExtStride, 1, piExtY ); 2671 xCTI_FilterQuarter0Hor (piExtY + 3, iExtStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2672 return; 2673 } 2674 if ( ixFrac == 3) 2675 { 2676 xCTI_FilterHalfVer (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2677 xCTI_FilterQuarter1Hor (piExtY + 3, iExtStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2678 return; 2679 } 2680 } 2681 2682 // Quater-pel vertical 2683 if( ixFrac == 0 ) 2684 { 2685 if( iyFrac == 1 ) 2686 { 2687 xCTI_FilterQuarter0Ver( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2688 return; 2689 } 2690 if( iyFrac == 3 ) 2691 { 2692 xCTI_FilterQuarter1Ver( piRefY, iRefStride, 1, iWidth, iHeight, iDstStride, 1, piDstY ); 2693 return; 2694 } 2695 } 2696 2697 if( ixFrac == 2 ) 2698 { 2699 if( iyFrac == 1 ) 2700 { 2701 xCTI_FilterQuarter0Ver (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2702 xCTI_FilterHalfHor (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2703 return; 2704 } 2705 if( iyFrac == 3 ) 2706 { 2707 xCTI_FilterQuarter1Ver (piRefY -3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2708 xCTI_FilterHalfHor (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2709 return; 2710 } 2711 } 2712 2713 /// Quarter-pel center 2714 if ( iyFrac == 1) 2715 { 2716 if ( ixFrac == 1) 2717 { 2718 xCTI_FilterQuarter0Ver (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2719 xCTI_FilterQuarter0Hor (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2720 return; 2721 } 2722 if ( ixFrac == 3) 2723 { 2724 xCTI_FilterQuarter0Ver (piRefY - 3, iRefStride, 1, iWidth +7, iHeight, iExtStride, 1, piExtY ); 2725 xCTI_FilterQuarter1Hor (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2726 return; 2727 } 2728 } 2729 if ( iyFrac == 3 ) 2730 { 2731 if ( ixFrac == 1) 2732 { 2733 xCTI_FilterQuarter1Ver (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2734 xCTI_FilterQuarter0Hor (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2735 return; 2736 } 2737 if ( ixFrac == 3) 2738 { 2739 xCTI_FilterQuarter1Ver (piRefY - 3, iRefStride, 1, iWidth + 7, iHeight, iExtStride, 1, piExtY ); 2740 xCTI_FilterQuarter1Hor (piExtY + 3, iExtStride, 1, iWidth , iHeight, iDstStride, 1, piDstY ); 2741 return; 2742 } 2743 } 2744 } 2745 2746 #if HIGH_ACCURACY_BI 2747 Void TComPrediction::xPredInterChromaBlk_EIVD_ha( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv ) 2748 { 2749 Int iRefStride = pcPicYuvRef->getCStride(); 2750 Int iDstStride = rpcYuv->getCStride(); 2751 2752 Int iRefOffset = (pcMv->getHor() >> 3) + (pcMv->getVer() >> 3) * iRefStride; 2753 2754 Pel* piRefCb = pcPicYuvRef->getCbAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr ) + iRefOffset; 2755 Pel* piRefCr = pcPicYuvRef->getCrAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr ) + iRefOffset; 2756 2757 Pel* piDstCb = rpcYuv->getCbAddr( uiPartAddr ); 2758 Pel* piDstCr = rpcYuv->getCrAddr( uiPartAddr ); 2759 2760 Int ixFrac = pcMv->getHor() & 0x7; 2761 Int iyFrac = pcMv->getVer() & 0x7; 2762 UInt uiCWidth = 1; 2763 UInt uiCHeight = 1; 2764 2765 piDstCb += (iPosY>>1)*iDstStride+(iPosX>>1); 2766 piDstCr += (iPosY>>1)*iDstStride+(iPosX>>1); 2767 piRefCb += (iPosY>>1)*iRefStride+(iPosX>>1); 2768 piRefCr += (iPosY>>1)*iRefStride+(iPosX>>1); 2769 2770 xDCTIF_FilterC_ha(piRefCb, iRefStride,piDstCb,iDstStride,uiCWidth,uiCHeight, iyFrac, ixFrac); 2771 xDCTIF_FilterC_ha(piRefCr, iRefStride,piDstCr,iDstStride,uiCWidth,uiCHeight, iyFrac, ixFrac); 2772 return; 2773 } 2774 #endif 2775 2776 //-- 2777 Void TComPrediction::xPredInterChromaBlk_EIVD( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv ) 2778 { 2779 Int iRefStride = pcPicYuvRef->getCStride(); 2780 Int iDstStride = rpcYuv->getCStride(); 2781 2782 Int iRefOffset = (pcMv->getHor() >> 3) + (pcMv->getVer() >> 3) * iRefStride; 2783 2784 Pel* piRefCb = pcPicYuvRef->getCbAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr ) + iRefOffset; 2785 Pel* piRefCr = pcPicYuvRef->getCrAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU() + uiPartAddr ) + iRefOffset; 2786 2787 Pel* piDstCb = rpcYuv->getCbAddr( uiPartAddr ); 2788 Pel* piDstCr = rpcYuv->getCrAddr( uiPartAddr ); 2789 2790 Int ixFrac = pcMv->getHor() & 0x7; 2791 Int iyFrac = pcMv->getVer() & 0x7; 2792 UInt uiCWidth = 1; 2793 UInt uiCHeight = 1; 2794 2795 piDstCb += (iPosY>>1)*iDstStride+(iPosX>>1); 2796 piDstCr += (iPosY>>1)*iDstStride+(iPosX>>1); 2797 piRefCb += (iPosY>>1)*iRefStride+(iPosX>>1); 2798 piRefCr += (iPosY>>1)*iRefStride+(iPosX>>1); 2799 2800 xDCTIF_FilterC(piRefCb, iRefStride,piDstCb,iDstStride,uiCWidth,uiCHeight, iyFrac, ixFrac); 2801 xDCTIF_FilterC(piRefCr, iRefStride,piDstCr,iDstStride,uiCWidth,uiCHeight, iyFrac, ixFrac); 2802 return; 2803 } 2804 2805 #endif 2806 2807 2092 2808 Void TComPrediction::xDCTIF_FilterC ( Pel* piRefC, Int iRefStride,Pel* piDstC,Int iDstStride, 2093 2809 Int iWidth, Int iHeight,Int iMVyFrac,Int iMVxFrac) … … 2193 2909 } 2194 2910 } 2911 2912 #if POZNAN_EIVD 2913 Void TComPrediction::xWeightedAverage_EIVD( TComDataCU* pcCU, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, Int iRefIdx0, Int iRefIdx1, UInt uiPartIdx, Int iPosX, Int iPosY, TComYuv*& rpcYuvDst ) 2914 { 2915 if( iRefIdx0 >= 0 && iRefIdx1 >= 0 ) 2916 { 2917 #ifdef ROUNDING_CONTROL_BIPRED 2918 rpcYuvDst->addAvg_EIVD( pcYuvSrc0, pcYuvSrc1, uiPartIdx, iPosX, iPosY, pcCU->getSlice()->isRounding()); 2919 #else 2920 rpcYuvDst->addAvg_EIVD( pcYuvSrc0, pcYuvSrc1, uiPartIdx, iPosX, iPosY ); 2921 #endif 2922 } 2923 else if ( iRefIdx0 >= 0 && iRefIdx1 < 0 ) 2924 { 2925 pcYuvSrc0->copyPartToPartYuv_EIVD( rpcYuvDst, uiPartIdx, iPosX, iPosY ); 2926 } 2927 else if ( iRefIdx0 < 0 && iRefIdx1 >= 0 ) 2928 { 2929 pcYuvSrc1->copyPartToPartYuv_EIVD( rpcYuvDst, uiPartIdx, iPosX, iPosY ); 2930 } 2931 else 2932 { 2933 assert (0); 2934 } 2935 } 2936 #endif 2195 2937 2196 2938 // AMVP -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComPrediction.h
r5 r12 52 52 #endif 53 53 54 #if POZNAN_MP 55 #include "../TLibCommon/TComMP.h" 56 #endif 57 54 58 // ==================================================================================================================== 55 59 // Class definition … … 113 117 #endif 114 118 119 #if POZNAN_EIVD 120 #if HIGH_ACCURACY_BI 121 Void xPredInterUni_EIVD ( TComDataCU* pcCU, UInt uiPartAddr, Int iPosX, Int iPosY, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Int iPartIdx, Bool bPrdDepthMap, Bool bi=false ); 122 #else 123 Void xPredInterUni_EIVD ( TComDataCU* pcCU, UInt uiPartAddr, Int iPosX, Int iPosY, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Int iPartIdx, Bool bPrdDepthMap ); 124 #endif 125 Void xPredInterBi_EIVD ( TComDataCU* pcCU, UInt uiPartAddr, Int iPosX, Int iPosY, TComYuv*& rpcYuvPred, Int iPartIdx, Bool bPrdDepthMap ); 126 Void xPredInterPrdDepthMap_EIVD( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv, UInt uiRShift, UInt uiFilterMode ); // 0:std, 1:bilin, 2:nearest neighbour 127 Void xPredInterLumaBlk_EIVD ( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv ); 128 Void xPredInterChromaBlk_EIVD ( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv ); 129 Void xWeightedAverage_EIVD ( TComDataCU* pcCU, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, Int iRefIdx0, Int iRefIdx1, UInt uiPartAddr, Int iPosX, Int iPosY, TComYuv*& rpcYuvDst ); 130 131 #if HIGH_ACCURACY_BI 132 Void xPredInterLumaBlk_EIVD_ha( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv ); 133 Void xPredInterChromaBlk_EIVD_ha( TComDataCU* pcCU, TComPicYuv* pcPicYuvRef, UInt uiPartAddr, TComMv* pcMv, Int iPosX, Int iPosY, TComYuv*& rpcYuv ); 134 #endif 135 #endif 136 115 137 #if HHI_DMM_WEDGE_INTRA 116 138 Void xPredIntraWedgeFull ( TComDataCU* pcCU, UInt uiAbsPartIdx, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bAbove, Bool bLeft, Bool bEncoder, Bool bDelta, UInt uiTabIdx, Int iDeltaDC1 = 0, Int iDeltaDC2 = 0 ); … … 147 169 Void motionCompensation ( TComDataCU* pcCU, TComYuv* pcYuvPred, RefPicList eRefPicList = REF_PIC_LIST_X, Int iPartIdx = -1, Bool bPrdDepthMap = false ); 148 170 171 #if POZNAN_EIVD 172 Void motionCompensation_EIVD ( TComDataCU* pcCU, TComYuv* pcYuvPred, RefPicList eRefPicList = REF_PIC_LIST_X, Int iPartIdx = -1, Bool bPrdDepthMap = false ); 173 #endif 174 149 175 // motion vector prediction 150 176 Void getMvPredAMVP ( TComDataCU* pcCU, UInt uiPartIdx, UInt uiPartAddr, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMvPred ); -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComResidualGenerator.cpp
r11 r12 306 306 xSetRecResidualInterCU( pcSubCU, pcSubRes ); 307 307 break; 308 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU308 #if POZNAN_CU_SKIP 309 309 case MODE_SYNTH: 310 310 xSetRecResidualIntraCU( pcSubCU, pcSubRes ); //MayBe it should be seperate function … … 341 341 UInt uiLumaTrMode, uiChromaTrMode; 342 342 pcCU->convertTransIdx ( 0, pcCU->getTransformIdx( 0 ), uiLumaTrMode, uiChromaTrMode ); 343 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 344 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(0/*uiAbsPartIdx*/, false), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 345 #else 343 346 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 347 #endif 348 //m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 344 349 m_pcTrQuant->invRecurTransformNxN ( pcCU, 0, TEXT_LUMA, pRes, 0, pcCUResidual->getStride(), uiWidth, uiHeight, uiLumaTrMode, 0, piCoeff ); 345 350 // chroma Cb … … 348 353 piCoeff = pcCU->getCoeffCb(); 349 354 pRes = pcCUResidual->getCbAddr(); 355 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 356 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(0/*uiAbsPartIdx*/, false), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 357 #else 350 358 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 359 #endif 360 //m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 351 361 m_pcTrQuant->invRecurTransformNxN ( pcCU, 0, TEXT_CHROMA_U, pRes, 0, pcCUResidual->getCStride(), uiWidth, uiHeight, uiChromaTrMode, 0, piCoeff ); 352 362 // chroma Cr -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComSlice.cpp
r11 r12 85 85 initWpAcDcParam(); 86 86 #endif 87 88 #if POZNAN_MP 89 m_pcMP = NULL; 90 #endif 87 91 } 88 92 89 93 TComSlice::~TComSlice() 90 94 { 95 #if POZNAN_MP 96 m_pcMP = NULL; 97 #endif 91 98 } 92 99 … … 722 729 } 723 730 } 731 #if POZNAN_NONLINEAR_DEPTH 732 m_fDepthPower = 1.0; 733 #endif 724 734 } 725 735 … … 737 747 ::memset( m_aaiCodedScale, 0x00, sizeof( m_aaiCodedScale ) ); 738 748 ::memset( m_aaiCodedOffset, 0x00, sizeof( m_aaiCodedOffset ) ); 749 #if POZNAN_NONLINEAR_DEPTH 750 m_fDepthPower = 1.0; 751 #endif 739 752 } 740 753 -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComSlice.h
r11 r12 57 57 #endif 58 58 59 #if POZNAN_MP 60 //#include "../TLibCommon/TComMP.h" 61 class TComMP; 62 #endif 63 59 64 // ==================================================================================================================== 60 65 // Class definition … … 153 158 #if HHI_INTER_VIEW_RESIDUAL_PRED 154 159 TComResidualGenerator* m_pcResidualGenerator; 160 #endif 161 162 #if POZNAN_NONLINEAR_DEPTH 163 Float m_fDepthPower; 164 #endif 165 166 #if POZNAN_MP 167 TComMP* m_pcMP; 168 #endif 169 170 #if POZNAN_STAT_JK 171 FILE* m_pcStatFile[MAX_INPUT_VIEW_NUM]; 155 172 #endif 156 173 … … 305 322 TComResidualGenerator* getResidualGenerator() { return m_pcResidualGenerator; } 306 323 #endif 324 #if POZNAN_NONLINEAR_DEPTH 325 inline Void setDepthPower(Float p) {m_fDepthPower = p;} 326 inline Float getDepthPower() {return m_fDepthPower;} 327 #else 328 inline Float getDepthPower() {return 1.0f;} 329 #endif 307 330 }; 308 331 … … 445 468 #endif 446 469 470 #if POZNAN_MP 471 TComMP* m_pcMP; 472 #endif 473 474 #if POZNAN_STAT_JK 475 FILE* m_pcStatFile; 476 #endif 477 447 478 public: 448 479 TComSlice(); 480 #if POZNAN_MP 481 ~TComSlice(); 482 #else 449 483 virtual ~TComSlice(); 484 #endif 450 485 451 486 Void initSlice (); … … 605 640 #endif 606 641 642 #if POZNAN_MP 643 Void setMP(TComMP* pcMP) { m_pcMP = pcMP; } 644 TComMP* getMP() { return m_pcMP; } 645 #endif 646 647 #if POZNAN_STAT_JK 648 Void setStatFile(FILE* pcStatFile) { m_pcStatFile = pcStatFile; } 649 FILE* getStatFile() { return m_pcStatFile; } 650 #endif 651 607 652 protected: 608 653 #if 0 -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComWeightPrediction.cpp
r5 r12 393 393 } 394 394 395 #if POZNAN_EIVD 396 397 Void TComWeightPrediction::addWeightBi_EIVD( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt iPartUnitIdx, UInt iPosX, Int iPosY, wpScalingParam *wp0, wpScalingParam *wp1, TComYuv* rpcYuvDst, Bool bRound ) 398 { 399 Pel* pSrcY0 = pcYuvSrc0->getLumaAddr( iPartUnitIdx ); 400 Pel* pSrcU0 = pcYuvSrc0->getCbAddr ( iPartUnitIdx ); 401 Pel* pSrcV0 = pcYuvSrc0->getCrAddr ( iPartUnitIdx ); 402 403 Pel* pSrcY1 = pcYuvSrc1->getLumaAddr( iPartUnitIdx ); 404 Pel* pSrcU1 = pcYuvSrc1->getCbAddr ( iPartUnitIdx ); 405 Pel* pSrcV1 = pcYuvSrc1->getCrAddr ( iPartUnitIdx ); 406 407 Pel* pDstY = rpcYuvDst->getLumaAddr( iPartUnitIdx ); 408 Pel* pDstU = rpcYuvDst->getCbAddr ( iPartUnitIdx ); 409 Pel* pDstV = rpcYuvDst->getCrAddr ( iPartUnitIdx ); 410 411 // Luma : -------------------------------------------- 412 Int w0 = wp0[0].w; 413 Int o0 = wp0[0].o; 414 Int offset = wp0[0].offset; 415 Int shiftNum = 14 - (g_uiBitDepth + g_uiBitIncrement); 416 Int shift = wp0[0].shift + shiftNum; 417 Int round = (1<<(shift-1)) * bRound; 418 Int w1 = wp1[0].w; 419 Int o1 = wp1[0].o; 420 421 UInt iSrc0Stride = pcYuvSrc0->getStride(); 422 UInt iSrc1Stride = pcYuvSrc1->getStride(); 423 UInt iDstStride = rpcYuvDst->getStride(); 424 425 pDstY[iPosY*iDstStride+iPosX] = weightBidir(w0,pSrcY0[iPosY*iSrc0Stride+iPosX], w1,pSrcY1[iPosY*iSrc1Stride+iPosX], round, shift, offset); 426 427 // Chromas : -------------------------------------------- 428 iSrc0Stride = pcYuvSrc0->getCStride(); 429 iSrc1Stride = pcYuvSrc1->getCStride(); 430 iDstStride = rpcYuvDst->getCStride(); 431 432 iPosX = iPosX>>1; 433 iPosY = iPosY>>1; 434 435 // Chroma U : -------------------------------------------- 436 w0 = wp0[1].w; 437 o0 = wp0[1].o; 438 offset = wp0[1].offset; 439 shift = wp0[1].shift + shiftNum; 440 round = (1<<(shift-1)); 441 w1 = wp1[1].w; 442 o1 = wp1[1].o; 443 444 pDstU[iPosY*iDstStride+iPosX] = weightBidir(w0,pSrcU0[iPosY*iSrc0Stride+iPosX], w1,pSrcU1[iPosY*iSrc1Stride+iPosX], round, shift, offset); 445 446 // Chroma V : -------------------------------------------- 447 w0 = wp0[2].w; 448 o0 = wp0[2].o; 449 offset = wp0[2].offset; 450 shift = wp0[2].shift + shiftNum; 451 round = (1<<(shift-1)); 452 w1 = wp1[2].w; 453 o1 = wp1[2].o; 454 455 pDstV[iPosY*iDstStride+iPosX] = weightBidir(w0,pSrcV0[iPosY*iSrc0Stride+iPosX], w1,pSrcV1[iPosY*iSrc1Stride+iPosX], round, shift, offset); 456 } 457 458 Void TComWeightPrediction::addWeightUni_EIVD( TComYuv* pcYuvSrc0, UInt iPartUnitIdx, UInt iPosX, Int iPosY, wpScalingParam *wp0, TComYuv* rpcYuvDst ) 459 { 460 Pel* pSrcY0 = pcYuvSrc0->getLumaAddr( iPartUnitIdx ); 461 Pel* pSrcU0 = pcYuvSrc0->getCbAddr ( iPartUnitIdx ); 462 Pel* pSrcV0 = pcYuvSrc0->getCrAddr ( iPartUnitIdx ); 463 464 Pel* pDstY = rpcYuvDst->getLumaAddr( iPartUnitIdx ); 465 Pel* pDstU = rpcYuvDst->getCbAddr ( iPartUnitIdx ); 466 Pel* pDstV = rpcYuvDst->getCrAddr ( iPartUnitIdx ); 467 468 // Luma : -------------------------------------------- 469 Int w0 = wp0[0].w; 470 Int offset = wp0[0].offset; 471 Int shift = wp0[0].shift; 472 Int round = wp0[0].round; 473 474 UInt iSrc0Stride = pcYuvSrc0->getStride(); 475 UInt iDstStride = rpcYuvDst->getStride(); 476 477 pDstY[iPosY*iDstStride+iPosX] = weightUnidir(w0,pSrcY0[iPosY*iSrc0Stride+iPosX], round, shift, offset); 478 479 // Chromas : -------------------------------------------- 480 iSrc0Stride = pcYuvSrc0->getCStride(); 481 iDstStride = rpcYuvDst->getCStride(); 482 483 iPosX = iPosX>>1; 484 iPosY = iPosY>>1; 485 486 // Chroma U : -------------------------------------------- 487 w0 = wp0[1].w; 488 offset = wp0[1].offset; 489 shift = wp0[1].shift; 490 round = wp0[1].round; 491 492 pDstU[iPosY*iDstStride+iPosX] = weightUnidir(w0,pSrcU0[iPosY*iSrc0Stride+iPosX], round, shift, offset); 493 494 // Chroma V : -------------------------------------------- 495 w0 = wp0[2].w; 496 offset = wp0[2].offset; 497 shift = wp0[2].shift; 498 round = wp0[2].round; 499 500 pDstV[iPosY*iDstStride+iPosX] = weightUnidir(w0,pSrcV0[iPosY*iSrc0Stride+iPosX], round, shift, offset); 501 } 502 503 Void TComWeightPrediction::xWeightedPredictionUni_EIVD( TComDataCU* pcCU, TComYuv* pcYuvSrc, UInt uiPartAddr, Int iPosX, Int iPosY, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Int iPartIdx ) 504 { 505 wpScalingParam *pwp, *pwpTmp; 506 Int iRefIdx = pcCU->getCUMvField( eRefPicList )->getRefIdx( uiPartAddr ); assert (iRefIdx >= 0); 507 Int ibdi = (g_uiBitDepth+g_uiBitIncrement); 508 509 if ( eRefPicList == REF_PIC_LIST_0 ) 510 { 511 getWpScaling(pcCU, iRefIdx, -1, pwp, pwpTmp, ibdi); 512 } 513 else 514 { 515 getWpScaling(pcCU, -1, iRefIdx, pwpTmp, pwp, ibdi); 516 } 517 addWeightUni_EIVD( pcYuvSrc, uiPartAddr, iPosX, iPosY, pwp, rpcYuvPred ); 518 } 519 520 Void TComWeightPrediction::xWeightedPredictionBi_EIVD( TComDataCU* pcCU, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, Int iRefIdx0, Int iRefIdx1, UInt uiPartIdx, Int iPosX, Int iPosY, TComYuv* rpcYuvDst ) 521 { 522 wpScalingParam *pwp0, *pwp1; 523 TComPPS *pps = pcCU->getSlice()->getPPS(); 524 525 if ( !pps->getUseWP() ) { 526 printf("TComWeightPrediction::xWeightedPredictionBi():\tassert failed: useWP is false.\n"); 527 exit(0); 528 } 529 530 Int ibdi = (g_uiBitDepth+g_uiBitIncrement); 531 getWpScaling(pcCU, iRefIdx0, iRefIdx1, pwp0, pwp1, ibdi); 532 533 if( iRefIdx0 >= 0 && iRefIdx1 >= 0 ) 534 { 535 addWeightBi_EIVD(pcYuvSrc0, pcYuvSrc1, uiPartIdx, iPosX, iPosY, pwp0, pwp1, rpcYuvDst ); 536 } 537 else if ( iRefIdx0 >= 0 && iRefIdx1 < 0 ) 538 { 539 addWeightUni_EIVD( pcYuvSrc0, uiPartIdx, iPosX, iPosY, pwp0, rpcYuvDst ); 540 } 541 else if ( iRefIdx0 < 0 && iRefIdx1 >= 0 ) 542 { 543 addWeightUni_EIVD( pcYuvSrc1, uiPartIdx, iPosX, iPosY, pwp1, rpcYuvDst ); 544 } 545 else 546 assert (0); 547 548 } 549 #endif 550 395 551 #endif // WEIGHT_PRED 396 552 -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComWeightPrediction.h
r2 r12 37 37 Void xWeightedPredictionBi( TComDataCU* pcCU, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, Int iRefIdx0, Int iRefIdx1, UInt uiPartIdx, Int iWidth, Int iHeight, TComYuv* rpcYuvDst ); 38 38 39 #if POZNAN_EIVD 40 Void addWeightBi_EIVD( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt iPartUnitIdx, UInt iPosX, Int iPosY, wpScalingParam *wp0, wpScalingParam *wp1, TComYuv* rpcYuvDst, Bool bRound=true ); 41 Void addWeightUni_EIVD( TComYuv* pcYuvSrc0, UInt iPartUnitIdx, UInt iPosX, Int iPosY, wpScalingParam *wp0, TComYuv* rpcYuvDst ); 42 43 Void xWeightedPredictionUni_EIVD( TComDataCU* pcCU, TComYuv* pcYuvSrc, UInt uiPartAddr, Int iPosX, Int iPosY, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Int iPartIdx ); 44 Void xWeightedPredictionBi_EIVD( TComDataCU* pcCU, TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, Int iRefIdx0, Int iRefIdx1, UInt uiPartIdx, Int iPosX, Int iPosY, TComYuv* rpcYuvDst ); 45 #endif 46 39 47 __inline Pel xClip ( Int x ); 40 48 __inline Pel weightBidir( Int w0, Pel P0, Int w1, Pel P1, Int round, Int shift, Int offset); -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComYuv.cpp
r5 r12 354 354 } 355 355 356 #if POZNAN_EIVD 357 358 Void TComYuv::copyPartToPartYuv_EIVD ( TComYuv* pcYuvDst, UInt uiPartIdx, UInt uiPosX, UInt uiPosY ) 359 { 360 copyPartToPartLuma_EIVD (pcYuvDst, uiPartIdx, uiPosX, uiPosY ); 361 copyPartToPartChroma_EIVD (pcYuvDst, uiPartIdx, uiPosX>>1, uiPosY>>1 ); 362 } 363 364 Void TComYuv::copyPartToPartLuma_EIVD ( TComYuv* pcYuvDst, UInt uiPartIdx, UInt uiPosX, UInt uiPosY ) 365 { 366 Pel* pSrc = getLumaAddr(uiPartIdx); 367 Pel* pDst = pcYuvDst->getLumaAddr(uiPartIdx); 368 if( pSrc == pDst ) 369 { 370 //th not a good idea 371 //th best would be to fix the caller 372 return ; 373 } 374 375 UInt iSrcStride = getStride(); 376 UInt iDstStride = pcYuvDst->getStride(); 377 378 ::memcpy( pDst+uiPosY*iDstStride+uiPosX, pSrc+uiPosY*iSrcStride+uiPosX, sizeof(Pel) ); 379 } 380 381 Void TComYuv::copyPartToPartChroma_EIVD( TComYuv* pcYuvDst, UInt uiPartIdx, UInt uiPosX, UInt uiPosY ) 382 { 383 Pel* pSrcU = getCbAddr(uiPartIdx); 384 Pel* pSrcV = getCrAddr(uiPartIdx); 385 Pel* pDstU = pcYuvDst->getCbAddr(uiPartIdx); 386 Pel* pDstV = pcYuvDst->getCrAddr(uiPartIdx); 387 388 if( getCbAddr() == NULL || getCrAddr() == NULL || pcYuvDst->getCbAddr() == NULL || pcYuvDst->getCrAddr() == NULL ) //KUBA CHROMA 389 { 390 return ; 391 } 392 if( pSrcU == pDstU && pSrcV == pDstV) 393 { 394 //th not a good idea 395 //th best would be to fix the caller 396 return ; 397 } 398 399 UInt iSrcStride = getCStride(); 400 UInt iDstStride = pcYuvDst->getCStride(); 401 402 ::memcpy( pDstU+uiPosY*iDstStride+uiPosX, pSrcU+uiPosY*iSrcStride+uiPosX, sizeof(Pel) ); 403 ::memcpy( pDstV+uiPosY*iDstStride+uiPosX, pSrcV+uiPosY*iSrcStride+uiPosX, sizeof(Pel) ); 404 } 405 406 #endif 407 356 408 Void TComYuv::addClipPartLuma( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt uiTrUnitIdx, UInt uiPartSize ) 357 409 { … … 801 853 } 802 854 855 #if POZNAN_EIVD 856 857 #ifdef ROUNDING_CONTROL_BIPRED 858 859 Void TComYuv::addAvg_EIVD( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt iPartUnitIdx, UInt iPosX, UInt iPosY, Bool bRound ) 860 { 861 Pel* pSrcY0 = pcYuvSrc0->getLumaAddr( iPartUnitIdx ); 862 Pel* pSrcU0 = pcYuvSrc0->getCbAddr ( iPartUnitIdx ); 863 Pel* pSrcV0 = pcYuvSrc0->getCrAddr ( iPartUnitIdx ); 864 865 Pel* pSrcY1 = pcYuvSrc1->getLumaAddr( iPartUnitIdx ); 866 Pel* pSrcU1 = pcYuvSrc1->getCbAddr ( iPartUnitIdx ); 867 Pel* pSrcV1 = pcYuvSrc1->getCrAddr ( iPartUnitIdx ); 868 869 Pel* pDstY = getLumaAddr( iPartUnitIdx ); 870 Pel* pDstU = getCbAddr ( iPartUnitIdx ); 871 Pel* pDstV = getCrAddr ( iPartUnitIdx ); 872 873 UInt iSrc0Stride = pcYuvSrc0->getStride(); 874 UInt iSrc1Stride = pcYuvSrc1->getStride(); 875 UInt iDstStride = getStride(); 876 877 #if HIGH_ACCURACY_BI 878 Int shiftNum = 15 - (g_uiBitDepth + g_uiBitIncrement); 879 Int offset = (1<<(shiftNum - 1)); 880 881 //Luma 882 (pDstY+iPosY*iDstStride)[iPosX] = Clip(((pSrcY0+iPosY*iSrc0Stride)[iPosX] + (pSrcY1+iPosY*iSrc1Stride)[iPosX] + offset) >> shiftNum ); 883 884 iSrc0Stride = pcYuvSrc0->getCStride(); 885 iSrc1Stride = pcYuvSrc1->getCStride(); 886 iDstStride = getCStride(); 887 888 //Chroma 889 (pDstU+(iPosY>>1)*iDstStride)[(iPosX>>1)] = Clip(((pSrcU0+(iPosY>>1)*iSrc0Stride)[(iPosX>>1)] + (pSrcU1+(iPosY>>1)*iSrc1Stride)[(iPosX>>1)] + offset) >> shiftNum ); 890 (pDstV+(iPosY>>1)*iDstStride)[(iPosX>>1)] = Clip(((pSrcV0+(iPosY>>1)*iSrc0Stride)[(iPosX>>1)] + (pSrcV1+(iPosY>>1)*iSrc1Stride)[(iPosX>>1)] + offset) >> shiftNum ); 891 892 #else 893 894 //Luma 895 (pDstY+iPosY*iDstStride)[iPosX] = ((pSrcY0+iPosY*iSrc0Stride)[iPosX] + (pSrcY1+iPosY*iSrc1Stride)[iPosX] + bRound) >> 1; 896 897 iSrc0Stride = pcYuvSrc0->getCStride(); 898 iSrc1Stride = pcYuvSrc1->getCStride(); 899 iDstStride = getCStride(); 900 901 //Chroma 902 (pDstU+(iPosY>>1)*iDstStride)[(iPosX>>1)] = ((pSrcU0+(iPosY>>1)*iSrc0Stride)[(iPosX>>1)] + (pSrcU1+(iPosY>>1)*iSrc1Stride)[(iPosX>>1)] + bRound) >> 1; 903 (pDstV+(iPosY>>1)*iDstStride)[(iPosX>>1)] = ((pSrcV0+(iPosY>>1)*iSrc0Stride)[(iPosX>>1)] + (pSrcV1+(iPosY>>1)*iSrc1Stride)[(iPosX>>1)] + bRound) >> 1; 904 #endif 905 } 906 907 #endif 908 909 Void TComYuv::addAvg_EIVD( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt iPartUnitIdx, UInt iPosX, UInt iPosY ) 910 { 911 Pel* pSrcY0 = pcYuvSrc0->getLumaAddr( iPartUnitIdx ); 912 Pel* pSrcU0 = pcYuvSrc0->getCbAddr ( iPartUnitIdx ); 913 Pel* pSrcV0 = pcYuvSrc0->getCrAddr ( iPartUnitIdx ); 914 915 Pel* pSrcY1 = pcYuvSrc1->getLumaAddr( iPartUnitIdx ); 916 Pel* pSrcU1 = pcYuvSrc1->getCbAddr ( iPartUnitIdx ); 917 Pel* pSrcV1 = pcYuvSrc1->getCrAddr ( iPartUnitIdx ); 918 919 Pel* pDstY = getLumaAddr( iPartUnitIdx ); 920 Pel* pDstU = getCbAddr ( iPartUnitIdx ); 921 Pel* pDstV = getCrAddr ( iPartUnitIdx ); 922 923 UInt iSrc0Stride = pcYuvSrc0->getStride(); 924 UInt iSrc1Stride = pcYuvSrc1->getStride(); 925 UInt iDstStride = getStride(); 926 #if HIGH_ACCURACY_BI 927 Int shiftNum = 15 - (g_uiBitDepth + g_uiBitIncrement); 928 Int offset = (1<<(shiftNum - 1)); 929 930 //Luma 931 (pDstY+iPosY*iDstStride)[iPosX] = Clip(((pSrcY0+iPosY*iSrc0Stride)[iPosX] + (pSrcY1+iPosY*iSrc1Stride)[iPosX] + offset) >> shiftNum ); 932 933 iSrc0Stride = pcYuvSrc0->getCStride(); 934 iSrc1Stride = pcYuvSrc1->getCStride(); 935 iDstStride = getCStride(); 936 937 //Chroma 938 (pDstU+(iPosY>>1)*iDstStride)[(iPosX>>1)] = Clip(((pSrcU0+(iPosY>>1)*iSrc0Stride)[(iPosX>>1)] + (pSrcU1+(iPosY>>1)*iSrc1Stride)[(iPosX>>1)] + offset) >> shiftNum ); 939 (pDstV+(iPosY>>1)*iDstStride)[(iPosX>>1)] = Clip(((pSrcV0+(iPosY>>1)*iSrc0Stride)[(iPosX>>1)] + (pSrcV1+(iPosY>>1)*iSrc1Stride)[(iPosX>>1)] + offset) >> shiftNum ); 940 941 #else 942 //Luma 943 (pDstY+iPosY*iDstStride)[iPosX] = ((pSrcY0+iPosY*iSrc0Stride)[iPosX] + (pSrcY1+iPosY*iSrc1Stride)[iPosX] + 1) >> 1; 944 945 iSrc0Stride = pcYuvSrc0->getCStride(); 946 iSrc1Stride = pcYuvSrc1->getCStride(); 947 iDstStride = getCStride(); 948 949 //Chroma 950 (pDstU+(iPosY>>1)*iDstStride)[(iPosX>>1)] = ((pSrcU0+(iPosY>>1)*iSrc0Stride)[(iPosX>>1)] + (pSrcU1+(iPosY>>1)*iSrc1Stride)[(iPosX>>1)] + 1) >> 1; 951 (pDstV+(iPosY>>1)*iDstStride)[(iPosX>>1)] = ((pSrcV0+(iPosY>>1)*iSrc0Stride)[(iPosX>>1)] + (pSrcV1+(iPosY>>1)*iSrc1Stride)[(iPosX>>1)] + 1) >> 1; 952 #endif 953 } 954 955 #endif 956 803 957 Void TComYuv::removeHighFreq( TComYuv* pcYuvSrc, UInt uiWidht, UInt uiHeight ) 804 958 { -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TComYuv.h
r5 r12 114 114 Void copyPartToPartChroma ( TComYuv* pcYuvDst, UInt uiPartIdx, UInt uiWidth, UInt uiHeight ); 115 115 116 #if POZNAN_EIVD 117 Void copyPartToPartYuv_EIVD ( TComYuv* pcYuvDst, UInt uiPartIdx, UInt uiPosX, UInt uiPosY ); 118 Void copyPartToPartLuma_EIVD ( TComYuv* pcYuvDst, UInt uiPartIdx, UInt uiPosX, UInt uiPosY ); 119 Void copyPartToPartChroma_EIVD ( TComYuv* pcYuvDst, UInt uiPartIdx, UInt uiPosX, UInt uiPosY ); 120 #endif 121 116 122 // ------------------------------------------------------------------------------------------------------------------ 117 123 // Algebraic operation for YUV buffer … … 136 142 Void addAvg ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt iPartUnitIdx, UInt iWidth, UInt iHeight ); 137 143 144 #if POZNAN_EIVD 145 #ifdef ROUNDING_CONTROL_BIPRED 146 Void addAvg_EIVD ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt iPartUnitIdx, UInt iPosX, UInt iPosY, Bool bRound ); 147 #endif 148 Void addAvg_EIVD ( TComYuv* pcYuvSrc0, TComYuv* pcYuvSrc1, UInt iPartUnitIdx, UInt iPosX, UInt iPosY ); 149 #endif 150 138 151 // Remove High frequency 139 152 Void removeHighFreq ( TComYuv* pcYuvSrc, UInt uiWidht, UInt uiHeight ); -
branches/0.2-poznan-univ/source/Lib/TLibCommon/TypeDef.h
r11 r12 65 65 #define POZNAN_CU_SYNTH 1 //Poznan Cu Synth 66 66 67 #define POZNAN_AVAIL_MAP 1 //Creates Availibity buffers in all needed classes 68 69 #define POZNAN_SYNTH_VIEW 1 //Creates view synthesis buffers in all needed classes 70 #define POZNAN_SYNTH_DEPTH 1 71 72 #define POZNAN_SYNTH 1 //Creates aligned synthesis classes in encoder and decoder 73 74 #define POZNAN_ENCODE_ONLY_DISOCCLUDED_CU 1 //Poznan CU Skip 75 #define POZNAN_FILL_OCCLUDED_CU_WITH_SYNTHESIS 1 //Fills not sended CUs with synthesized data 76 77 #define POZNAN_CU_SKIP_PSNR 1 //Poznan Cu Skip Display psnr of the codded CU only 67 #define POZNAN_NONLINEAR_DEPTH 0 /// Non-linear depth processing (Maciej Kurc) 68 #define POZNAN_NONLINEAR_DEPTH_SEND_AS_BYTE 1 /// Send DepthPower as byte instead of float 69 70 #if POZNAN_CU_SYNTH 71 #define POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 0 /// increase QP for texture CUs that are in the background (according to proper depth map). This QP change is not encoded in a bitstream 72 #endif 73 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 74 #define POZNAN_TEXTURE_TU_DELTA_QP_NOT_IN_BASE_VIEW 1 /// should not be disabled in current software version - no depth synthesis map is available for base view anyway 75 #define POZNAN_TEXTURE_TU_DELTA_QP_TOP_BOTTOM_CU_ROW 1 /// increase of QP param for top and bottom LCU row in frame 76 #define POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 0 /// used for optimization of function calculating dQP from depth block max value. Standard values set if disabled. If enabled params are set in cfg file for encoder (no decoder is supported in that case). 77 #if !POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 78 #define POZNAN_TEXTURE_TU_DELTA_QP_OFFSET (-2.6) 79 #define POZNAN_TEXTURE_TU_DELTA_QP_MUL (1) 80 #define POZNAN_TEXTURE_TU_DELTA_QP_TOP_BOTTOM_ROW_VAL (2) 81 #endif 82 #endif 83 84 #define POZNAN_EIVD 0 // Depth Based Vector Prediction prediction for MERGE 85 #if POZNAN_EIVD 86 #define POZNAN_EIVD_USE_FOR_TEXTURE 1 //use Depth Based Vector Prediction in texture pictures (0 - no, 1 -yes) 87 #define POZNAN_EIVD_USE_FOR_DEPTH 1 // use Depth Based Vector Prediction in depth pictures (0 - no, 1 -yes) 88 89 #define POZNAN_EIVD_CALC_PRED_DATA 1 // Depth Based Vector Prediction motion data used for prediction in other CUs is calculated based on all CU points (otherwise motion data for none-MP points is used for prediction) 90 #define POZNAN_EIVD_COMPRESS_ME_DATA 0 // Depth Based Vector Prediction derives representative motion data from reference CUs even if they are EIVD-based predicted (otherwise motion data is derived with per-point resolution for EIVD-based predicted reference CUs) 91 #define POZNAN_EIVD_USE_IN_NONANCHOR_PIC_ONLY 1 // determines if Depth Based Vector Prediction is used in non-anchor pictures only 92 #endif 93 94 #endif 95 96 // --------------------------------------- 97 98 #define POZNAN_STAT_JK 0 // save CU statistics to file 99 100 #if POZNAN_STAT_JK 101 #define POZNAN_STAT_JK_FLUSH 1 // flush CU statistics to file after each CU 102 #endif 103 104 #define POZNAN_CU_SKIP_PSNR 1 78 105 //<<<<< Poznan 3DV tools <<<<<< 106 79 107 80 108 //////////////////////////// … … 356 384 typedef unsigned long ULong; 357 385 typedef double Double; 386 typedef float Float; 358 387 359 388 // ==================================================================================================================== -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecCAVLC.cpp
r11 r12 271 271 pcSPS->setUseMVI( uiCode ? true : false ); 272 272 #endif 273 #if POZNAN_NONLINEAR_DEPTH 274 #if POZNAN_NONLINEAR_DEPTH_SEND_AS_BYTE 275 uiCode = 0; 276 xReadCode(8, uiCode); 277 pcSPS->setDepthPower(dequantizeDepthPower(uiCode)); 278 #else 279 uiCode = 0; 280 xReadCode(sizeof(float)*8, uiCode); // We do not send seign 281 //uiCode &= ~0x80000000; 282 pcSPS->setDepthPower(*((float*)&uiCode)); 283 #endif 284 printf("\nfDepthPower = %f", pcSPS->getDepthPower()); 285 #endif 273 286 } 274 287 else … … 331 344 } 332 345 } 333 334 346 return; 335 347 } … … 2621 2633 2622 2634 2623 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 2635 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 2624 2636 Void 2625 2637 TDecCavlc::parseMergeIndexMV( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth ) … … 2632 2644 uiNumCand++; 2633 2645 #endif 2646 #if POZNAN_EIVD 2647 UInt uiModIdx; 2648 const Bool bEIVDAvailable = pcCU->getSlice()->getMP()->isEIVDEnabled(); 2649 #endif 2634 2650 for( UInt uiIdx = 0; uiIdx < MRG_MAX_NUM_CANDS; uiIdx++ ) 2635 2651 { … … 2656 2672 if( uiIdx > uiMviMergePos ) 2657 2673 { 2674 #if POZNAN_EIVD 2675 if(bEIVDAvailable) 2676 { 2677 if(uiIdx==POZNAN_EIVD_MERGE_POS) uiModIdx = POZNAN_EIVD_MRG_CAND; 2678 else if(uiIdx>POZNAN_EIVD_MERGE_POS) uiModIdx = uiIdx--; 2679 else uiModIdx = uiIdx; 2680 } 2681 else uiModIdx = uiIdx; 2682 if( pcCU->getNeighbourCandIdx( uiModIdx-1, uiAbsPartIdx ) != uiModIdx ) 2683 { 2684 ruiMergeIndex++; 2685 } 2686 #else 2658 2687 if( pcCU->getNeighbourCandIdx( uiIdx - 1, uiAbsPartIdx ) != uiIdx ) 2659 2688 { 2660 2689 ruiMergeIndex++; 2661 2690 } 2691 #endif 2662 2692 } 2663 2693 else if( uiIdx < uiMviMergePos ) 2664 2694 #endif 2695 #if POZNAN_EIVD 2696 if(bEIVDAvailable) 2697 { 2698 if(uiIdx==POZNAN_EIVD_MERGE_POS) uiModIdx = POZNAN_EIVD_MRG_CAND; 2699 else if(uiIdx>POZNAN_EIVD_MERGE_POS) uiModIdx = uiIdx--; 2700 else uiModIdx = uiIdx; 2701 } 2702 else uiModIdx = uiIdx; 2703 if( pcCU->getNeighbourCandIdx( uiModIdx, uiAbsPartIdx ) != uiModIdx + 1 ) 2704 { 2705 ruiMergeIndex++; 2706 } 2707 #else 2665 2708 if( pcCU->getNeighbourCandIdx( uiIdx, uiAbsPartIdx ) != uiIdx + 1 ) 2666 2709 { 2667 2710 ruiMergeIndex++; 2668 2711 } 2712 #endif 2669 2713 } 2670 2714 #if HHI_MPI … … 2676 2720 { 2677 2721 pcCU->setTextureModeDepthSubParts( uiDepth, uiAbsPartIdx, uiDepth ); 2722 } 2723 #endif 2724 #if POZNAN_EIVD 2725 if(bEIVDAvailable) 2726 { 2727 if(ruiMergeIndex==POZNAN_EIVD_MERGE_POS) ruiMergeIndex = POZNAN_EIVD_MRG_CAND; 2728 else if(ruiMergeIndex>POZNAN_EIVD_MERGE_POS) ruiMergeIndex--; 2678 2729 } 2679 2730 #endif … … 2691 2742 Void TDecCavlc::parseMergeIndex ( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth ) 2692 2743 { 2693 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 2744 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 2694 2745 if( 2695 2746 #if HHI_INTER_VIEW_MOTION_PRED … … 2698 2749 #if HHI_MPI 2699 2750 ( pcCU->getSlice()->getSPS()->getUseMVI() && pcCU->getSlice()->getSliceType() != I_SLICE && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) || 2751 #endif 2752 #if POZNAN_EIVD 2753 ( pcCU->getSlice()->getMP()->isEIVDEnabled() ) || 2700 2754 #endif 2701 2755 0 -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecCAVLC.h
r5 r12 195 195 Void parseMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx ); 196 196 Void parseMergeIndex ( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth ); 197 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 197 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 198 198 Void parseMergeIndexMV ( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth ); 199 199 #endif -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecCu.cpp
r11 r12 49 49 m_ppcYuvReco = NULL; 50 50 m_ppcYuvResPred = NULL; 51 #if POZNAN_ AVAIL_MAP51 #if POZNAN_CU_SKIP 52 52 m_ppcYuvAvail = NULL; 53 53 #endif 54 #if POZNAN_ SYNTH_VIEW54 #if POZNAN_CU_SYNTH 55 55 m_ppcYuvSynth = NULL; 56 56 #endif … … 81 81 m_ppcYuvReco = new TComYuv* [m_uiMaxDepth-1]; 82 82 m_ppcYuvResPred = new TComYuv* [m_uiMaxDepth-1]; 83 #if POZNAN_ AVAIL_MAP83 #if POZNAN_CU_SKIP 84 84 m_ppcYuvAvail = new TComYuv* [m_uiMaxDepth-1]; 85 85 #endif 86 #if POZNAN_ SYNTH_VIEW86 #if POZNAN_CU_SYNTH 87 87 m_ppcYuvSynth = new TComYuv* [m_uiMaxDepth-1]; 88 88 #endif … … 99 99 m_ppcYuvReco [ui] = new TComYuv; m_ppcYuvReco [ui]->create( uiWidth, uiHeight ); 100 100 m_ppcYuvResPred[ui] = new TComYuv; m_ppcYuvResPred[ui]->create( uiWidth, uiHeight ); 101 #if POZNAN_ AVAIL_MAP101 #if POZNAN_CU_SKIP 102 102 m_ppcYuvAvail [ui] = new TComYuv; m_ppcYuvAvail [ui]->create( uiWidth, uiHeight ); 103 103 #endif 104 #if POZNAN_ SYNTH_VIEW104 #if POZNAN_CU_SYNTH 105 105 m_ppcYuvSynth [ui] = new TComYuv; m_ppcYuvSynth [ui]->create( uiWidth, uiHeight ); 106 106 #endif … … 125 125 m_ppcYuvReco [ui]->destroy(); delete m_ppcYuvReco [ui]; m_ppcYuvReco [ui] = NULL; 126 126 m_ppcYuvResPred[ui]->destroy(); delete m_ppcYuvResPred[ui]; m_ppcYuvResPred[ui] = NULL; 127 #if POZNAN_ AVAIL_MAP127 #if POZNAN_CU_SKIP 128 128 m_ppcYuvAvail [ui]->destroy(); delete m_ppcYuvAvail [ui]; m_ppcYuvAvail [ui] = NULL; 129 129 #endif 130 #if POZNAN_ SYNTH_VIEW130 #if POZNAN_CU_SYNTH 131 131 m_ppcYuvSynth [ui]->destroy(); delete m_ppcYuvSynth [ui]; m_ppcYuvSynth [ui] = NULL; 132 132 #endif … … 137 137 delete [] m_ppcYuvReco; m_ppcYuvReco = NULL; 138 138 delete [] m_ppcYuvResPred; m_ppcYuvResPred = NULL; 139 #if POZNAN_ AVAIL_MAP139 #if POZNAN_CU_SKIP 140 140 delete [] m_ppcYuvAvail; m_ppcYuvAvail = NULL; 141 141 #endif 142 #if POZNAN_ SYNTH_VIEW142 #if POZNAN_CU_SYNTH 143 143 delete [] m_ppcYuvSynth; m_ppcYuvSynth = NULL; 144 144 #endif … … 217 217 TComPic* pcPic = pcCU->getPic(); 218 218 219 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU219 #if POZNAN_CU_SKIP 220 220 Bool bWholeCUCanBeSynthesized = false; 221 221 Bool bOneSubCUCanNotBeSynthesied = false; … … 267 267 if( ( uiRPelX < pcCU->getSlice()->getSPS()->getWidth() ) && ( uiBPelY < pcCU->getSlice()->getSPS()->getHeight() ) ) 268 268 { 269 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU269 #if POZNAN_CU_SKIP 270 270 if(bOneSubCUCanNotBeSynthesied && (uiDepth < g_uiMaxCUDepth - g_uiAddCUDepth )) // KUBA SYNTH check if CU has 3 synthesied subCU - no split flag is send in that case and CU split is assumed 271 271 { … … 446 446 { 447 447 TComPic* pcPic = pcCU->getPic(); 448 #if POZNAN_ SYNTH_VIEW448 #if POZNAN_CU_SYNTH 449 449 if(pcPic->getPicYuvSynth()) m_ppcYuvSynth[uiDepth]->copyFromPicYuv( pcPic->getPicYuvSynth(), pcCU->getAddr(), uiAbsPartIdx ); 450 450 #endif 451 #if POZNAN_ AVAIL_MAP451 #if POZNAN_CU_SKIP 452 452 if(pcPic->getPicYuvAvail()) m_ppcYuvAvail[uiDepth]->copyFromPicYuv( pcPic->getPicYuvAvail(), pcCU->getAddr(), uiAbsPartIdx ); 453 453 #endif … … 496 496 xReconIntraQT( m_ppcCU[uiDepth], uiAbsPartIdx, uiDepth ); 497 497 break; 498 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU498 #if POZNAN_CU_SKIP 499 499 case MODE_SYNTH: 500 500 // break; 501 #if POZNAN_FILL_OCCLUDED_CU_WITH_SYNTHESIS502 501 m_ppcYuvReco[uiDepth]->copyFromPicYuv(pcPic->getPicYuvSynth(), pcCU->getAddr(), uiAbsPartIdx); 503 #else 504 m_ppcYuvReco[uiDepth]->copyFromPicYuv(pcPic->getPicYuvAvail(), pcCU->getAddr(), uiAbsPartIdx); //Poprawiæ 505 #endif 502 //m_ppcYuvReco[uiDepth]->copyFromPicYuv(pcPic->getPicYuvAvail(), pcCU->getAddr(), uiAbsPartIdx); //Poprawiæ 506 503 //m_ppcYuvReco[uiDepth]->clear(); 507 504 break; … … 581 578 m_pcPrediction->predIntraLumaAng( pcPattern, pcCU->getLumaIntraDir(uiPartIdx), pPred, uiStride, uiWidth, uiHeight, pcCU, bAboveAvail, bLeftAvail ); 582 579 580 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 581 m_pcTrQuant->setQPforQuant( pcCU->getQP(uiPartIdx) + pcCU->getQpOffsetForTextCU(uiPartIdx, true), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 582 #else 583 583 m_pcTrQuant->setQPforQuant( pcCU->getQP(uiPartIdx), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 584 #endif 584 585 #if INTRA_DST_TYPE_7 585 586 m_pcTrQuant->invtransformNxN(TEXT_LUMA, pcCU->getLumaIntraDir(uiPartIdx), pResi, uiStride, pCoeff, uiWidth, uiHeight ); … … 778 779 } 779 780 //===== inverse transform ===== 781 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 782 m_pcTrQuant->setQPforQuant( pcCU->getQP(0) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, true), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 783 #else 780 784 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 785 #endif 781 786 #if INTRA_DST_TYPE_7 782 787 m_pcTrQuant->invtransformNxN( TEXT_LUMA, pcCU->getLumaIntraDir( uiAbsPartIdx ), piResi, uiStride, pcCoeff, uiWidth, uiHeight ); … … 885 890 886 891 //===== inverse transform ===== 892 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 893 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, true), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), eText ); 894 #else 887 895 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), eText ); 896 #endif 888 897 #if INTRA_DST_TYPE_7 889 898 m_pcTrQuant->invtransformNxN( eText, REG_DCT, piResi, uiStride, pcCoeff, uiWidth, uiHeight ); … … 1061 1070 piCoeff = pcCU->getCoeffY(); 1062 1071 pResi = m_ppcYuvResi[uiDepth]->getLumaAddr(); 1072 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 1073 Int QPoffset = pcCU->getQpOffsetForTextCU(uiAbsPartIdx, false); 1074 m_pcTrQuant->setQPforQuant ( pcCU->getQP(uiAbsPartIdx) + QPoffset, !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 1075 #else 1063 1076 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 1077 #endif 1064 1078 m_pcTrQuant->invRecurTransformNxN ( pcCU, 0, TEXT_LUMA, pResi, 0, m_ppcYuvResi[uiDepth]->getStride(), uiWidth, uiHeight, uiLumaTrMode, 0, piCoeff ); 1065 1079 1066 1080 // Cb and Cr 1081 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 1082 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ) + QPoffset, !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 1083 #else 1067 1084 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 1085 #endif 1068 1086 1069 1087 uiWidth >>= 1; -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecCu.h
r11 r12 61 61 TComYuv** m_ppcYuvReco; ///< array of prediction & reconstruction buffer 62 62 TComYuv** m_ppcYuvResPred; ///< residual prediction buffer 63 #if POZNAN_ AVAIL_MAP63 #if POZNAN_CU_SKIP 64 64 TComYuv** m_ppcYuvAvail; ///< array of available map buffer 65 65 #endif 66 #if POZNAN_ SYNTH_VIEW66 #if POZNAN_CU_SYNTH 67 67 TComYuv** m_ppcYuvSynth; ///< array of synth buffer 68 68 #endif -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecEntropy.cpp
r5 r12 430 430 pcCU->setInterDirSubParts( puhInterDirNeighbours[uiMergeIndex], uiAbsPartIdx, uiPartIdx, uiDepth ); 431 431 432 #if POZNAN_EIVD_CALC_PRED_DATA 433 Int ref_idx0_EIVD,ref_idx1_EIVD; 434 TComMv cMv0_EIVD( 0, 0 ),cMv1_EIVD( 0, 0 ); 435 if(uiMergeIndex==POZNAN_EIVD_MRG_CAND) 436 { 437 pcCU->getCUMvField2nd( REF_PIC_LIST_0 )->setAllMvField( pcMvFieldNeighbours[ 2*uiMergeIndex ].getMv(), pcMvFieldNeighbours[ 2*uiMergeIndex ].getRefIdx(), eCUMode, uiAbsPartIdx, uiPartIdx, uiDepth ); 438 pcCU->getCUMvField2nd( REF_PIC_LIST_1 )->setAllMvField( pcMvFieldNeighbours[ 2*uiMergeIndex + 1 ].getMv(), pcMvFieldNeighbours[ 2*uiMergeIndex + 1 ].getRefIdx(), eCUMode, uiAbsPartIdx, uiPartIdx, uiDepth ); 439 pcCU->getSlice()->getMP()->calcEIVDPredData(pcCU, uiAbsPartIdx, ref_idx0_EIVD, cMv0_EIVD, ref_idx1_EIVD, cMv1_EIVD); 440 } 441 #endif 442 432 443 TComMv cTmpMv( 0, 0 ); 433 444 if ( pcCU->getSlice()->getNumRefIdx( REF_PIC_LIST_0 ) > 0 ) //if ( ref. frame list0 has at least 1 entry ) … … 436 447 pcCU->setMVPNumSubParts( 0, REF_PIC_LIST_0, uiAbsPartIdx, uiPartIdx, uiDepth); 437 448 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvd( cTmpMv, eCUMode, uiAbsPartIdx, uiPartIdx, uiDepth ); 449 #if POZNAN_EIVD_CALC_PRED_DATA 450 if(uiMergeIndex==POZNAN_EIVD_MRG_CAND) 451 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMv0_EIVD, ref_idx0_EIVD, eCUMode, uiAbsPartIdx, uiPartIdx, uiDepth ); 452 else 453 #endif 438 454 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( pcMvFieldNeighbours[ 2*uiMergeIndex ].getMv(), pcMvFieldNeighbours[ 2*uiMergeIndex ].getRefIdx(), eCUMode, uiAbsPartIdx, uiPartIdx, uiDepth ); 439 455 … … 444 460 pcCU->setMVPNumSubParts( 0, REF_PIC_LIST_1, uiAbsPartIdx, uiPartIdx, uiDepth); 445 461 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvd( cTmpMv, eCUMode, uiAbsPartIdx, uiPartIdx, uiDepth ); 462 #if POZNAN_EIVD_CALC_PRED_DATA 463 if(uiMergeIndex==POZNAN_EIVD_MRG_CAND) 464 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMv1_EIVD, ref_idx1_EIVD, eCUMode, uiAbsPartIdx, uiPartIdx, uiDepth ); 465 else 466 #endif 446 467 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( pcMvFieldNeighbours[ 2*uiMergeIndex + 1 ].getMv(), pcMvFieldNeighbours[ 2*uiMergeIndex + 1 ].getRefIdx(), eCUMode, uiAbsPartIdx, uiPartIdx, uiDepth ); 447 468 } -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecGop.cpp
r5 r12 199 199 #endif 200 200 201 #if POZNAN_MP 202 if( uiStartCUAddr == 0 ) 203 { 204 #if POZNAN_MP_USE_DEPTH_MAP_GENERATION 205 pcSlice->getMP()->setDepthMapGenerator(m_pcDepthMapGenerator); 206 #endif 207 pcSlice->getMP()->pairMultiview(rpcPic); 208 } 209 #endif 210 201 211 // decode slice 202 212 m_pcSliceDecoder->decompressSlice(pcBitstream, rpcPic); -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecSbac.cpp
r5 r12 579 579 580 580 581 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 581 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 582 582 Void TDecSbac::parseMergeIndexMV( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth ) 583 583 { … … 585 585 const Bool bMVIAvailable = pcCU->getSlice()->getSPS()->getUseMVI() && pcCU->getSlice()->getSliceType() != I_SLICE; 586 586 const UInt uiMviMergePos = bMVIAvailable ? HHI_MPI_MERGE_POS : MRG_MAX_NUM_CANDS; 587 #endif 588 #if POZNAN_EIVD 589 const Bool bEIVDAvailable = pcCU->getSlice()->getMP()->isEIVDEnabled(); 590 Bool bEIVDModifyMergeIdx = true; 587 591 #endif 588 592 //--- set number of candidates and availability --- … … 611 615 } 612 616 } 617 618 #if POZNAN_EIVD 619 if(bEIVDAvailable) 620 { 621 UInt uiEIVDMergePos = POZNAN_EIVD_MERGE_POS; 622 #if HHI_MPI 623 if(bMVIAvailable && uiEIVDMergePos>=uiMviMergePos) uiEIVDMergePos++; 624 #endif 625 for( Int iIdx = MRG_MAX_NUM_CANDS-2; iIdx >= (Int)uiEIVDMergePos; iIdx-- ) 626 { 627 Int iWrIdx = iIdx+1; 628 #if HHI_MPI 629 if(bMVIAvailable) 630 { 631 if(iIdx==(Int)uiMviMergePos) continue; 632 if(iWrIdx==(Int)uiMviMergePos) iWrIdx++; 633 } 634 #endif 635 if(iWrIdx>=MRG_MAX_NUM_CANDS) continue; 636 637 abAvailable[ iWrIdx ] = abAvailable[ iIdx ]; 638 } 639 abAvailable[ uiEIVDMergePos ] = ( pcCU->getNeighbourCandIdx( POZNAN_EIVD_MRG_CAND, uiAbsPartIdx ) == POZNAN_EIVD_MRG_CAND + 1 ); 640 641 uiNumCand = 0; for( UInt uiIdx = 0; uiIdx < MRG_MAX_NUM_CANDS; uiIdx++ ) if(abAvailable[ uiIdx ]) uiNumCand++; 642 } 643 #endif 644 613 645 AOF( uiNumCand > 1 ); 614 646 … … 665 697 { 666 698 pcCU->setTextureModeDepthSubParts( uiDepth, uiAbsPartIdx, uiDepth ); 699 #if POZNAN_EIVD 700 bEIVDModifyMergeIdx = false; 701 #endif 702 } 703 #endif 704 705 #if POZNAN_EIVD 706 if(bEIVDAvailable && bEIVDModifyMergeIdx) 707 { 708 if(ruiMergeIndex==POZNAN_EIVD_MERGE_POS) ruiMergeIndex = POZNAN_EIVD_MRG_CAND; 709 else if(ruiMergeIndex>POZNAN_EIVD_MERGE_POS) ruiMergeIndex--; 667 710 } 668 711 #endif … … 694 737 Void TDecSbac::parseMergeIndex ( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth ) 695 738 { 696 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 739 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 697 740 if( 698 741 #if HHI_INTER_VIEW_MOTION_PRED … … 701 744 #if HHI_MPI 702 745 ( pcCU->getSlice()->getSPS()->getUseMVI() && pcCU->getSlice()->getSliceType() != I_SLICE && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) || 746 #endif 747 #if POZNAN_EIVD 748 ( pcCU->getSlice()->getMP()->isEIVDEnabled() ) || 703 749 #endif 704 750 0 -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecSbac.h
r5 r12 144 144 Void parseMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiPUIdx ); 145 145 Void parseMergeIndex ( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth ); 146 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 146 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 147 147 Void parseMergeIndexMV ( TComDataCU* pcCU, UInt& ruiMergeIndex, UInt uiAbsPartIdx, UInt uiDepth ); 148 148 #endif -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecSlice.cpp
r5 r12 98 98 g_bJustDoIt = g_bEncDecTraceEnable; 99 99 #endif 100 101 // JK { 102 DTRACE_CABAC_V( g_nSymbolCounter++ ); 103 DTRACE_CABAC_T( "\tCU: " ); 104 DTRACE_CABAC_V( iCUAddr ); 105 DTRACE_CABAC_T( "\n" ); 106 // JK } 107 100 108 m_pcCuDecoder->decodeCU ( pcCU, uiIsLast ); 101 109 m_pcCuDecoder->decompressCU ( pcCU ); -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecTop.cpp
r11 r12 53 53 m_aaiCodedScale [ uiId ] = new Int [ MAX_NUMBER_VIEWS ]; 54 54 } 55 #if POZNAN_ SYNTH55 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 56 56 xCreateLUTs ( (UInt)MAX_NUMBER_VIEWS, (UInt)MAX_NUMBER_VIEWS, m_adBaseViewShiftLUT, m_aiBaseViewShiftLUT); 57 57 … … 73 73 delete [] m_aiViewReceived; 74 74 75 #if POZNAN_ SYNTH75 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 76 76 xDeleteArray( m_adBaseViewShiftLUT, MAX_NUMBER_VIEWS, MAX_NUMBER_VIEWS, 2 ); 77 77 xDeleteArray( m_aiBaseViewShiftLUT, MAX_NUMBER_VIEWS, MAX_NUMBER_VIEWS, 2 ); … … 91 91 } 92 92 93 #if POZNAN_ SYNTH93 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 94 94 /* 95 95 Void … … 294 294 m_aaiCodedScale [ uiViewId ][ uiBaseId ] = pcSlice->getInvCodedScale () [ uiBaseId ]; 295 295 m_aaiCodedOffset[ uiViewId ][ uiBaseId ] = pcSlice->getInvCodedOffset() [ uiBaseId ]; 296 #if POZNAN_ SYNTH296 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 297 297 xInitLUTs(uiBaseId,uiViewId,m_aaiCodedScale [ uiBaseId ][ uiViewId ],m_aaiCodedOffset[ uiBaseId ][ uiViewId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT); 298 298 xInitLUTs(uiViewId,uiBaseId,m_aaiCodedScale [ uiViewId ][ uiBaseId ],m_aaiCodedOffset[ uiViewId ][ uiBaseId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT); … … 305 305 m_aaiCodedScale [ uiViewId ][ uiBaseId ] = pcSlice->getSPS()->getInvCodedScale () [ uiBaseId ]; 306 306 m_aaiCodedOffset[ uiViewId ][ uiBaseId ] = pcSlice->getSPS()->getInvCodedOffset() [ uiBaseId ]; 307 #if POZNAN_ SYNTH307 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 308 308 xInitLUTs(uiBaseId,uiViewId,m_aaiCodedScale [ uiBaseId ][ uiViewId ],m_aaiCodedOffset[ uiBaseId ][ uiViewId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT); 309 309 xInitLUTs(uiViewId,uiBaseId,m_aaiCodedScale [ uiViewId ][ uiBaseId ],m_aaiCodedOffset[ uiViewId ][ uiBaseId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT); … … 323 323 m_aaiCodedScale [ uiViewId ][ uiBaseId ] = pcSlice->getInvCodedScale () [ uiBaseId ]; 324 324 m_aaiCodedOffset[ uiViewId ][ uiBaseId ] = pcSlice->getInvCodedOffset() [ uiBaseId ]; 325 #if POZNAN_ SYNTH325 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 326 326 xInitLUTs(uiBaseId,uiViewId,m_aaiCodedScale [ uiBaseId ][ uiViewId ],m_aaiCodedOffset[ uiBaseId ][ uiViewId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT); 327 327 xInitLUTs(uiViewId,uiBaseId,m_aaiCodedScale [ uiViewId ][ uiBaseId ],m_aaiCodedOffset[ uiViewId ][ uiBaseId ],m_adBaseViewShiftLUT,m_aiBaseViewShiftLUT); … … 411 411 m_bFirstSliceInSequence = true; 412 412 m_pcCamParsCollector = 0; 413 #if POZNAN_MP 414 m_pcMP = NULL; 415 #endif 413 416 } 414 417 … … 441 444 #if HHI_INTER_VIEW_RESIDUAL_PRED 442 445 m_cResidualGenerator.destroy(); 446 #endif 447 448 #if POZNAN_MP 449 m_pcMP = NULL; 443 450 #endif 444 451 } … … 478 485 m_cResidualGenerator.init( &m_cTrQuant, &m_cDepthMapGenerator ); 479 486 #endif 487 488 #if POZNAN_MP 489 m_pcMP = pcTAppDecTop->getMP(); 490 #endif 480 491 } 481 492 … … 604 615 pcPic->removeUsedPelsMapBuffer(); 605 616 #endif 606 #if POZNAN_ AVAIL_MAP617 #if POZNAN_CU_SYNTH || POZNAN_CU_SKIP 607 618 pcPic->removeAvailabilityBuffer(); 608 619 #endif 609 #if POZNAN_ SYNTH_VIEW620 #if POZNAN_CU_SYNTH 610 621 pcPic->removeSynthesisBuffer(); 622 #endif 623 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 624 pcPic->removeSynthesisDepthBuffer(); 611 625 #endif 612 626 } … … 696 710 else 697 711 { 712 #if POZNAN_NONLINEAR_DEPTH 713 // For texture complete depth power information. Depth power is sended, for example, for base view depth map and it should be available prior non-base texture decoding 714 if(!cTempSPS.isDepth() && cTempSPS.getViewId()) 715 { 716 Float fDepthPower = getDecTop()->getPicFromView( 0, pcPic->getPOC(), true )->getSPS()->getDepthPower(); 717 cTempSPS.setDepthPower(fDepthPower); 718 } 719 #endif 698 720 cComSPS = cTempSPS; 699 721 return false; 700 722 } 723 701 724 702 725 // create ALF temporary buffer … … 710 733 } 711 734 m_uiValidPS |= 1; 735 736 #if POZNAN_MP 737 #if POZNAN_MP_USE_DEPTH_MAP_GENERATION 738 m_pcMP->init( m_cSPS.getHeight(), m_cSPS.getWidth() ); 739 #else 740 m_pcMP->init( m_cSPS.getHeight(), m_cSPS.getWidth(), m_pcCamParsCollector->getBaseViewShiftLUTI()); 741 #endif 742 #endif 712 743 713 744 return false; … … 820 851 m_apcSlicePilot = pcPic->getPicSym()->getSlice(m_uiSliceIdx); 821 852 pcPic->getPicSym()->setSlice(pcSlice, m_uiSliceIdx); 853 854 #if POZNAN_MP 855 pcSlice->setMP(m_pcMP); 856 #endif 822 857 823 858 if (bNextSlice) … … 875 910 #endif 876 911 877 #if POZNAN_ SYNTH878 if( m_pcCamParsCollector )912 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH 913 if( m_pcCamParsCollector ) 879 914 { 880 915 m_pcCamParsCollector->setSlice( pcSlice ); 881 916 } 882 917 //if(!getIsDepth()) 883 getDecTop()->storeSynthPicsInBuffer(pcSlice->getViewIdx(),pcSlice->getSPS()->getViewOrderIdx(),pcSlice->getPOC(),getIsDepth()); 918 getDecTop()->storeSynthPicsInBuffer(pcSlice->getViewIdx(),pcSlice->getSPS()->getViewOrderIdx(),pcSlice->getPOC(),getIsDepth()); 919 #endif 920 921 #if POZNAN_MP 922 std::vector<TComPic*> apcSpatDataRefPics = getDecTop()->getSpatialRefPics( pcPic->getViewIdx(), pcSlice->getPOC(), m_cSPS.isDepth() ); 923 pcSlice->getMP()->setRefPicsList(&apcSpatDataRefPics); 924 #if !POZNAN_MP_USE_DEPTH_MAP_GENERATION 925 std::vector<TComPic*> apcSpatDepthRefPics = getDecTop()->getSpatialRefPics( pcPic->getViewIdx(), pcSlice->getPOC(), true ); 926 pcSlice->getMP()->setDepthRefPicsList(&apcSpatDepthRefPics); 927 #endif 884 928 #endif 885 929 886 930 // Decode a picture 887 931 m_cGopDecoder.decompressGop ( bEos, pcBitstream, pcPic, false ); 932 933 #if POZNAN_MP 934 pcSlice->getMP()->disable(); 935 #endif 888 936 889 937 if( m_pcCamParsCollector ) -
branches/0.2-poznan-univ/source/Lib/TLibDecoder/TDecTop.h
r11 r12 55 55 #include "TDecCAVLC.h" 56 56 57 #if POZNAN_MP 58 #include "../TLibCommon/TComMP.h" 59 #endif 60 57 61 // ==================================================================================================================== 58 62 // Class definition … … 71 75 Void uninit (); 72 76 Void setSlice ( TComSlice* pcSlice ); 73 #if POZNAN_ SYNTH77 #if POZNAN_CU_SKIP || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 74 78 Double**** getBaseViewShiftLUTD () { return m_adBaseViewShiftLUT; } 75 79 Int**** getBaseViewShiftLUTI () { return m_aiBaseViewShiftLUT; } … … 99 103 UInt m_uiMaxViewId; 100 104 101 #if POZNAN_ SYNTH105 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 102 106 103 107 UInt m_uiBitDepthForLUT; … … 118 122 }; 119 123 120 #if POZNAN_ SYNTH124 #if POZNAN_CU_SKIP || POZNAN_CU_SYNTH || (POZNAN_MP && !POZNAN_MP_USE_DEPTH_MAP_GENERATION) 121 125 template <class T> 122 126 Void CamParsCollector::xDeleteArray( T*& rpt, UInt uiSize1, UInt uiSize2, UInt uiSize3 ) … … 223 227 #endif 224 228 229 #if POZNAN_MP 230 TComMP* m_pcMP; 231 #endif 232 225 233 Bool m_bIsDepth; 226 234 Int m_iViewIdx; -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncCavlc.cpp
r11 r12 341 341 xWriteFlag( pcSPS->getUseMVI() ? 1 : 0 ); 342 342 #endif 343 #if POZNAN_NONLINEAR_DEPTH 344 // Depth power coefficient 345 #if POZNAN_NONLINEAR_DEPTH_SEND_AS_BYTE 346 UInt uiCode = quantizeDepthPower(pcSPS->getDepthPower()); 347 xWriteCode(uiCode, 8); 348 #else 349 float fCode = pcSPS->getDepthPower(); 350 UInt uiCode = *((UInt*)&fCode); 351 //uiCode &= ~0x80000000; 352 xWriteCode(uiCode, sizeof(float)*8); // we do not send sign?; 353 #endif 354 #endif 343 355 } 344 356 else … … 353 365 for( UInt uiId = 0; uiId < pcSPS->getViewId(); uiId++ ) 354 366 { 355 //printf("From ViewID %d To ViewID: %d\n",pcSPS->getViewId(),uiId); 356 xWriteSvlc( pcSPS->getCodedScale ()[ uiId ] ); //printf("SPS Scale: %d\n",pcSPS->getCodedScale ()[ uiId ]); 357 xWriteSvlc( pcSPS->getCodedOffset ()[ uiId ] ); //printf("SPS Offset: %d\n", pcSPS->getCodedOffset ()[ uiId ]); 367 xWriteSvlc( pcSPS->getCodedScale ()[ uiId ] ); 368 xWriteSvlc( pcSPS->getCodedOffset ()[ uiId ] ); 358 369 xWriteSvlc( pcSPS->getInvCodedScale ()[ uiId ] + pcSPS->getCodedScale ()[ uiId ] ); 359 370 xWriteSvlc( pcSPS->getInvCodedOffset()[ uiId ] + pcSPS->getCodedOffset()[ uiId ] ); … … 532 543 for( UInt uiId = 0; uiId < pcSlice->getSPS()->getViewId(); uiId++ ) 533 544 { 534 printf("From ViewID %d To ViewID: %d\n",pcSlice->getSPS()->getViewId(),uiId); 535 xWriteSvlc( pcSlice->getCodedScale ()[ uiId ] ); printf("Slice Scale: %d\n",pcSlice->getCodedScale ()[ uiId ]); 536 xWriteSvlc( pcSlice->getCodedOffset ()[ uiId ] ); printf("Slice Offset: %d\n", pcSlice->getCodedOffset ()[ uiId ]); 545 xWriteSvlc( pcSlice->getCodedScale ()[ uiId ] ); 546 xWriteSvlc( pcSlice->getCodedOffset ()[ uiId ] ); 537 547 xWriteSvlc( pcSlice->getInvCodedScale ()[ uiId ] + pcSlice->getCodedScale ()[ uiId ] ); 538 548 xWriteSvlc( pcSlice->getInvCodedOffset()[ uiId ] + pcSlice->getCodedOffset()[ uiId ] ); … … 729 739 730 740 731 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 741 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 732 742 Void 733 743 TEncCavlc::codeMergeIndexMV( TComDataCU* pcCU, UInt uiAbsPartIdx ) … … 735 745 UInt uiNumCand = 0; 736 746 UInt uiMergeIdx = pcCU->getMergeIndex( uiAbsPartIdx ); 747 748 #if POZNAN_EIVD 749 UInt uiModIdx; 750 const Bool bEIVDAvailable = pcCU->getSlice()->getMP()->isEIVDEnabled(); 751 if(bEIVDAvailable) 752 { 753 if(uiMergeIdx==POZNAN_EIVD_MRG_CAND) uiMergeIdx = POZNAN_EIVD_MERGE_POS; 754 else if(uiMergeIdx>=POZNAN_EIVD_MERGE_POS) uiMergeIdx++; 755 } 756 #endif 737 757 #if HHI_MPI 738 758 const Bool bMVIAvailable = pcCU->getSlice()->getSPS()->getUseMVI() && pcCU->getSlice()->getSliceType() != I_SLICE; … … 752 772 if( uiIdx < uiMviMergePos ) 753 773 { 774 #if POZNAN_EIVD 775 if(bEIVDAvailable) 776 { 777 if(uiIdx==POZNAN_EIVD_MERGE_POS) uiModIdx = POZNAN_EIVD_MRG_CAND; 778 else if(uiIdx>POZNAN_EIVD_MERGE_POS) uiModIdx = uiIdx--; 779 else uiModIdx = uiIdx; 780 } 781 else uiModIdx = uiIdx; 782 if( pcCU->getNeighbourCandIdx( uiModIdx, uiAbsPartIdx ) == uiModIdx + 1 ) 783 { 784 uiNumCand++; 785 } 786 else if( uiIdx < uiMergeIdx ) 787 { 788 uiUnaryIdx--; 789 } 790 #else 754 791 if( pcCU->getNeighbourCandIdx( uiIdx, uiAbsPartIdx ) == uiIdx + 1 ) 755 792 { … … 760 797 uiUnaryIdx--; 761 798 } 799 #endif 762 800 } 763 801 else if( uiIdx > uiMviMergePos ) 764 802 { 803 #if POZNAN_EIVD 804 if(bEIVDAvailable) 805 { 806 if(uiIdx==POZNAN_EIVD_MERGE_POS) uiModIdx = POZNAN_EIVD_MRG_CAND; 807 else if(uiIdx>POZNAN_EIVD_MERGE_POS) uiModIdx = uiIdx--; 808 else uiModIdx = uiIdx; 809 } 810 else uiModIdx = uiIdx; 811 if( pcCU->getNeighbourCandIdx( uiModIdx-1, uiAbsPartIdx ) == uiModIdx ) 812 { 813 uiNumCand++; 814 } 815 else if( uiIdx < uiMergeIdx ) 816 { 817 uiUnaryIdx--; 818 } 819 #else 765 820 if( pcCU->getNeighbourCandIdx( uiIdx - 1, uiAbsPartIdx ) == uiIdx ) 766 821 { … … 771 826 uiUnaryIdx--; 772 827 } 828 #endif 773 829 } 774 830 } … … 777 833 for( UInt uiIdx = 0; uiIdx < MRG_MAX_NUM_CANDS; uiIdx++ ) 778 834 { 835 #if POZNAN_EIVD 836 if(bEIVDAvailable) 837 { 838 if(uiIdx==POZNAN_EIVD_MERGE_POS) uiModIdx = POZNAN_EIVD_MRG_CAND; 839 else if(uiIdx>POZNAN_EIVD_MERGE_POS) uiModIdx = uiIdx--; 840 else uiModIdx = uiIdx; 841 } 842 else uiModIdx = uiIdx; 843 if( pcCU->getNeighbourCandIdx( uiModIdx, uiAbsPartIdx ) == uiModIdx + 1 ) 844 { 845 uiNumCand++; 846 } 847 else if( uiIdx < uiMergeIdx ) 848 { 849 uiUnaryIdx--; 850 } 851 #else 779 852 if( pcCU->getNeighbourCandIdx( uiIdx, uiAbsPartIdx ) == uiIdx + 1 ) 780 853 { … … 785 858 uiUnaryIdx--; 786 859 } 860 #endif 787 861 } 788 862 #endif … … 808 882 Void TEncCavlc::codeMergeIndex ( TComDataCU* pcCU, UInt uiAbsPartIdx ) 809 883 { 810 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 811 #if HHI_INTER_VIEW_MOTION_PRED && HHI_MPI 812 if( ( pcCU->getSlice()->getSPS()->getViewId() > 0 && ( pcCU->getSlice()->getSPS()->getMultiviewMvPredMode() & PDM_USE_FOR_MERGE ) == PDM_USE_FOR_MERGE ) || 813 ( pcCU->getSlice()->getSPS()->getUseMVI() && pcCU->getSlice()->getSliceType() != I_SLICE && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) ) 814 #elif HHI_MPI 815 if( pcCU->getSlice()->getSPS()->getUseMVI() && pcCU->getSlice()->getSliceType() != I_SLICE && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) 816 #else 817 if( pcCU->getSlice()->getSPS()->getViewId() > 0 && ( pcCU->getSlice()->getSPS()->getMultiviewMvPredMode() & PDM_USE_FOR_MERGE ) == PDM_USE_FOR_MERGE ) 818 #endif 884 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 885 if( 886 #if HHI_INTER_VIEW_MOTION_PRED 887 ( pcCU->getSlice()->getSPS()->getViewId() > 0 && ( pcCU->getSlice()->getSPS()->getMultiviewMvPredMode() & PDM_USE_FOR_MERGE ) == PDM_USE_FOR_MERGE ) || 888 #endif 889 #if HHI_MPI 890 ( pcCU->getSlice()->getSPS()->getUseMVI() && pcCU->getSlice()->getSliceType() != I_SLICE && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) || 891 #endif 892 #if POZNAN_EIVD 893 ( pcCU->getSlice()->getMP()->isEIVDEnabled() ) || 894 #endif 895 0 896 ) 819 897 { 820 898 codeMergeIndexMV( pcCU, uiAbsPartIdx ); -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncCavlc.h
r5 r12 228 228 Void codeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 229 229 Void codeMergeIndex ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 230 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 230 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 231 231 Void codeMergeIndexMV ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 232 232 #endif -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncCfg.h
r5 r12 217 217 #endif 218 218 219 #if POZNAN_TEXTURE_TU_DELTA_QP_PARAM_IN_CFG_FOR_ENC 220 Double m_dTextureCuDeltaQpOffset; 221 Double m_dTextureCuDeltaQpMul; 222 Int m_iTextureCuDeltaQpTopBottomRow; 223 #endif 224 #if POZNAN_NONLINEAR_DEPTH 225 Float m_fDepthPower; 226 #endif 227 219 228 public: 220 229 TEncCfg() {} … … 226 235 Void setSourceHeight ( Int i ) { m_iSourceHeight = i; } 227 236 Void setFrameToBeEncoded ( Int i ) { m_iFrameToBeEncoded = i; } 237 238 #if POZNAN_STAT_JK 239 FILE* m_pcStatFile; 240 Void setStatFile(FILE* a) {m_pcStatFile = a;} 241 #endif 228 242 229 243 //====== Coding Structure ======== … … 306 320 Void setAllowNegDist ( Bool b ) { m_bAllowNegDist = b; }; 307 321 #endif 322 #endif 323 324 #if POZNAN_NONLINEAR_DEPTH 325 inline Float getDepthPower() { return m_fDepthPower; } 326 inline Void setDepthPower(Float p) { m_fDepthPower = p; } 327 #else 328 inline Float getDepthPower() { return 1.0f; } 308 329 #endif 309 330 -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncCu.cpp
r11 r12 67 67 m_ppcOrigYuv = new TComYuv*[m_uhTotalDepth-1]; 68 68 m_ppcResPredTmp = new TComYuv*[m_uhTotalDepth-1]; 69 #if POZNAN_ AVAIL_MAP69 #if POZNAN_CU_SKIP 70 70 m_ppcAvailYuv = new TComYuv*[m_uhTotalDepth-1]; 71 71 #endif 72 #if POZNAN_ SYNTH_VIEW72 #if POZNAN_CU_SYNTH 73 73 m_ppcSynthYuv = new TComYuv*[m_uhTotalDepth-1]; 74 74 #endif … … 100 100 m_ppcOrigYuv [i] = new TComYuv; m_ppcOrigYuv [i]->create(uiWidth, uiHeight); 101 101 102 #if POZNAN_ AVAIL_MAP102 #if POZNAN_CU_SKIP 103 103 m_ppcAvailYuv [i] = new TComYuv; m_ppcAvailYuv [i]->create(uiWidth, uiHeight); 104 104 #endif 105 #if POZNAN_ SYNTH_VIEW105 #if POZNAN_CU_SYNTH 106 106 m_ppcSynthYuv [i] = new TComYuv; m_ppcSynthYuv [i]->create(uiWidth, uiHeight); 107 107 #endif … … 165 165 if(m_ppcOrigYuv[i]) 166 166 { 167 m_ppcOrigYuv[i]->destroy(); delete m_ppcOrigYuv[i]; m_ppcOrigYuv[i] 168 } 169 #if POZNAN_ AVAIL_MAP167 m_ppcOrigYuv[i]->destroy(); delete m_ppcOrigYuv[i]; m_ppcOrigYuv[i] = NULL; 168 } 169 #if POZNAN_CU_SKIP 170 170 if(m_ppcAvailYuv[i]) 171 171 { 172 m_ppcAvailYuv[i]->destroy(); delete m_ppcAvailYuv[i]; m_ppcAvailYuv[i]= NULL;173 } 174 #endif 175 #if POZNAN_ SYNTH_VIEW172 m_ppcAvailYuv[i]->destroy(); delete m_ppcAvailYuv[i]; m_ppcAvailYuv[i] = NULL; 173 } 174 #endif 175 #if POZNAN_CU_SYNTH 176 176 if(m_ppcSynthYuv[i]) 177 177 { 178 m_ppcSynthYuv[i]->destroy(); delete m_ppcSynthYuv[i]; m_ppcSynthYuv[i]= NULL;178 m_ppcSynthYuv[i]->destroy(); delete m_ppcSynthYuv[i]; m_ppcSynthYuv[i] = NULL; 179 179 } 180 180 #endif … … 230 230 m_ppcOrigYuv = NULL; 231 231 } 232 #if POZNAN_ AVAIL_MAP232 #if POZNAN_CU_SKIP 233 233 if(m_ppcAvailYuv) 234 234 { … … 237 237 } 238 238 #endif 239 #if POZNAN_ SYNTH_VIEW239 #if POZNAN_CU_SYNTH 240 240 if(m_ppcSynthYuv) 241 241 { … … 395 395 } 396 396 } 397 398 #if POZNAN_EIVD & !POZNAN_EIVD_COMPRESS_ME_DATA 399 //save motion data for every CU point 400 xSaveEIVDData(m_ppcBestCU[0]); 401 #endif 402 397 403 } 398 404 … … 467 473 // get Original YUV data from picture 468 474 m_ppcOrigYuv[uiDepth]->copyFromPicYuv( pcPic->getPicYuvOrg(), rpcBestCU->getAddr(), rpcBestCU->getZorderIdxInCU() ); 469 #if POZNAN_ AVAIL_MAP475 #if POZNAN_CU_SKIP 470 476 if (pcPic->getPicYuvAvail()) m_ppcAvailYuv[uiDepth]->copyFromPicYuv( pcPic->getPicYuvAvail(), rpcBestCU->getAddr(), rpcBestCU->getZorderIdxInCU() ); 471 477 #endif 472 #if POZNAN_ SYNTH_VIEW478 #if POZNAN_CU_SYNTH 473 479 if (pcPic->getPicYuvSynth()) m_ppcSynthYuv[uiDepth]->copyFromPicYuv( pcPic->getPicYuvSynth(), rpcBestCU->getAddr(), rpcBestCU->getZorderIdxInCU() ); 474 480 #endif 475 481 476 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU482 #if POZNAN_CU_SKIP 477 483 Bool bWholeCUCanBeSynthesized = false; 478 484 Bool bOneSubCUCanNotBeSynthesied = false; … … 569 575 { 570 576 // do CU Skip 571 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU577 #if POZNAN_CU_SKIP 572 578 if(bWholeCUCanBeSynthesized) 573 579 { 580 // printf("CUSkip %d %d %d\n",rpcBestCU->getCUPelX(),rpcBestCU->getCUPelY(),rpcBestCU->getWidth()); 574 581 rpcBestCU->getTotalCost() = 0; // Cost of synthesised CU is zero 575 582 rpcBestCU->getTotalBits() = 0; // Cost of synthesised CU is zero … … 577 584 rpcBestCU->setPredModeSubParts( MODE_SYNTH, 0, uiDepth ); 578 585 rpcBestCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth ); 579 #if POZNAN_ FILL_OCCLUDED_CU_WITH_SYNTHESIS586 #if POZNAN_CU_SYNTH 580 587 m_ppcRecoYuvBest[uiDepth]->copyFromPicYuv(pcPic->getPicYuvSynth(), rpcBestCU->getAddr(), rpcBestCU->getZorderIdxInCU()); // First copy synthesis YUV part to CU encoder reconstruction YUV structure 581 #else 582 m_ppcRecoYuvBest[uiDepth]->copyFromPicYuv(pcPic->getPicYuvAvail(), rpcBestCU->getAddr(), rpcBestCU->getZorderIdxInCU()); // First copy synthesis YUV part to CU encoder reconstruction YUV structure 588 //m_ppcRecoYuvBest[uiDepth]->copyFromPicYuv(pcPic->getPicYuvAvail(), rpcBestCU->getAddr(), rpcBestCU->getZorderIdxInCU()); // First copy synthesis YUV part to CU encoder reconstruction YUV structure 583 589 #endif 584 590 UInt uiInitTrDepth = rpcBestCU->getPartitionSize(0) == SIZE_2Nx2N ? 0 : 1; … … 1065 1071 TComPic* pcPic = pcCU->getPic(); 1066 1072 1067 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU1073 #if POZNAN_CU_SKIP 1068 1074 if( pcCU->isCUSkiped( uiAbsPartIdx ) && uiDepth == pcCU->getDepth( uiAbsPartIdx )) //If CU Skiped no information is coded into stream 1069 1075 return; … … 1076 1082 UInt uiBPelY = uiTPelY + (g_uiMaxCUHeight>>uiDepth) - 1; 1077 1083 1078 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU1084 #if POZNAN_CU_SKIP 1079 1085 Bool bDontSendSplitFlag = false; 1080 1086 if( ( ( uiDepth < pcCU->getDepth( uiAbsPartIdx ) ) && ( uiDepth < (g_uiMaxCUDepth-g_uiAddCUDepth) ) ) || bBoundary ) //check if CU has 3 synthesied subCU - no split flag is send in that case … … 1099 1105 if( ( uiRPelX < pcCU->getSlice()->getSPS()->getWidth() ) && ( uiBPelY < pcCU->getSlice()->getSPS()->getHeight() ) ) 1100 1106 { 1101 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU1107 #if POZNAN_CU_SKIP 1102 1108 if(!bDontSendSplitFlag) 1103 1109 #endif … … 1141 1147 #endif 1142 1148 xRestoreDepthWidthHeight( pcCU ); 1149 1150 #if POZNAN_STAT_JK 1151 if(m_bStatFileEnabled) xStatFile(pcCU, uiAbsPartIdx, uiDepth); 1152 #endif 1153 1143 1154 return; 1144 1155 } … … 1167 1178 return; 1168 1179 } 1180 1181 #if POZNAN_STAT_JK 1182 if(m_bStatFileEnabled) xStatFile(pcCU, uiAbsPartIdx, uiDepth); 1183 #endif 1169 1184 1170 1185 #if TSB_ALF_HEADER … … 1277 1292 UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS]; 1278 1293 UInt uiNeighbourCandIdx[MRG_MAX_NUM_CANDS]; //MVs with same idx => same cand 1294 #if POZNAN_EIVD_CALC_PRED_DATA 1295 TComMP* pcMP = rpcTempCU->getSlice()->getMP(); 1296 #endif 1279 1297 1280 1298 #if HHI_INTER_VIEW_RESIDUAL_PRED … … 1333 1351 rpcTempCU->setNeighbourCandIdxSubParts( uiInner, uiNeighbourCandIdx[uiInner], 0, 0,uhDepth ); 1334 1352 } 1353 #if POZNAN_EIVD_CALC_PRED_DATA 1354 if(uiMergeCand==POZNAN_EIVD_MRG_CAND) 1355 { 1356 rpcTempCU->getCUMvField2nd( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand].getMv(), cMvFieldNeighbours[0 + 2*uiMergeCand].getRefIdx(), SIZE_2Nx2N, 0, 0, 0 ); // interprets depth relative to rpcTempCU level 1357 rpcTempCU->getCUMvField2nd( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand].getMv(), cMvFieldNeighbours[1 + 2*uiMergeCand].getRefIdx(), SIZE_2Nx2N, 0, 0, 0 ); // interprets depth relative to rpcTempCU level 1358 } 1359 else 1360 #endif 1361 { 1335 1362 rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand].getMv(), cMvFieldNeighbours[0 + 2*uiMergeCand].getRefIdx(), SIZE_2Nx2N, 0, 0, 0 ); // interprets depth relative to rpcTempCU level 1336 1363 rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand].getMv(), cMvFieldNeighbours[1 + 2*uiMergeCand].getRefIdx(), SIZE_2Nx2N, 0, 0, 0 ); // interprets depth relative to rpcTempCU level 1364 } 1337 1365 1338 1366 #if HHI_INTER_VIEW_RESIDUAL_PRED … … 1348 1376 if ( uiNoResidual == 0 ){ 1349 1377 #endif 1378 1379 #if POZNAN_EIVD 1380 if(uiMergeCand==POZNAN_EIVD_MRG_CAND){ 1381 m_pcPredSearch->motionCompensation_EIVD ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] ); 1382 #if POZNAN_EIVD_CALC_PRED_DATA 1383 pcMP->setEIVDPredMVField(REF_PIC_LIST_0, rpcTempCU); 1384 pcMP->setEIVDPredMVField(REF_PIC_LIST_1, rpcTempCU); 1385 #endif 1386 } 1387 else 1350 1388 m_pcPredSearch->motionCompensation ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] ); 1389 #else 1390 m_pcPredSearch->motionCompensation ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] ); 1391 #endif 1351 1392 // save pred adress 1352 1393 pcPredYuvTemp = m_ppcPredYuvTemp[uhDepth]; … … 1358 1399 pcPredYuvTemp = m_ppcPredYuvBest[uhDepth]; 1359 1400 } 1401 #if POZNAN_EIVD_CALC_PRED_DATA 1402 if(uiMergeCand==POZNAN_EIVD_MRG_CAND) 1403 { 1404 //copy motion data representing CU with EIVD for uiNoResidual==0 case 1405 rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->copyFrom(pcMP->getEIVDPredMVField(REF_PIC_LIST_0),rpcTempCU->getTotalNumPart(),0); 1406 rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->copyFrom(pcMP->getEIVDPredMVField(REF_PIC_LIST_1),rpcTempCU->getTotalNumPart(),0); 1407 } 1408 #endif 1360 1409 } 1361 1410 #if HHI_VSO … … 1381 1430 Bool bQtRootCbf = rpcTempCU->getQtRootCbf(0) == 1; 1382 1431 #else 1432 #if POZNAN_EIVD 1383 1433 // do MC 1434 if(uiMergeCand==POZNAN_EIVD_MRG_CAND){ 1435 m_pcPredSearch->motionCompensation_EIVD ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] ); 1436 #if POZNAN_EIVD_CALC_PRED_DATA 1437 pcMP->setEIVDPredMVField(REF_PIC_LIST_0, rpcTempCU); 1438 pcMP->setEIVDPredMVField(REF_PIC_LIST_1, rpcTempCU); 1439 #endif 1440 } 1441 else 1384 1442 m_pcPredSearch->motionCompensation ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] ); 1443 1444 #endif 1385 1445 1386 1446 // estimate residual and encode everything … … 1671 1731 { 1672 1732 if( pcTextureCU->isIntra( rpcTempCU->getZorderIdxInCU() + ui ) 1673 #if POZNAN_ ENCODE_ONLY_DISOCCLUDED_CU1733 #if POZNAN_CU_SKIP 1674 1734 || pcTextureCU->isCUSkiped( rpcTempCU->getZorderIdxInCU() + ui ) 1675 1735 #endif -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncCu.h
r11 r12 78 78 TComYuv** m_ppcOrigYuv; ///< Original Yuv for each depth 79 79 TComYuv** m_ppcResPredTmp; ///< Temporary residual prediction for each depth 80 #if POZNAN_ AVAIL_MAP80 #if POZNAN_CU_SKIP 81 81 TComYuv** m_ppcAvailYuv; ///< Avaiability map for each depth 82 82 #endif 83 #if POZNAN_ SYNTH_VIEW83 #if POZNAN_CU_SYNTH 84 84 TComYuv** m_ppcSynthYuv; ///< Synthetized Yuv for each depth 85 85 #endif 86 86 87 87 // Data : encoder control 88 88 Int m_iQp; ///< Last QP … … 113 113 #endif 114 114 115 #if POZNAN_STAT_JK 116 Bool m_bStatFileEnabled; 117 #endif 118 115 119 public: 116 120 /// copy parameters from encoder class … … 131 135 /// set QP value 132 136 Void setQpLast ( Int iQp ) { m_iQp = iQp; } 137 138 #if POZNAN_STAT_JK 139 Void setStatFileEnabled(Bool bStatFileEnabled){m_bStatFileEnabled = bStatFileEnabled;} 140 #endif 133 141 134 142 protected: … … 162 170 Void xRestoreDepthWidthHeight( TComDataCU* pcCU ); 163 171 #endif 172 173 #if POZNAN_EIVD & !POZNAN_EIVD_COMPRESS_ME_DATA 174 Void xSaveEIVDData(TComDataCU* pcCU) { pcCU->getSlice()->getMP()->saveEIVDData(pcCU);} 175 #endif 176 177 #if POZNAN_STAT_JK 178 Void xStatFile ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ); 179 #endif 164 180 }; 165 181 -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncGOP.cpp
r11 r12 293 293 #endif 294 294 295 #if POZNAN_MP 296 #if POZNAN_MP_USE_DEPTH_MAP_GENERATION 297 pcSlice->getMP()->setDepthMapGenerator(m_pcDepthMapGenerator); 298 #else 299 std::vector<TComPic*> apcSpatDepthRefPics = m_pcEncTop->getEncTop()->getSpatialRefPics( pcPic->getViewIdx(), pcSlice->getPOC(), true ); 300 pcSlice->getMP()->setDepthRefPicsList(&apcSpatDepthRefPics); 301 #endif 302 std::vector<TComPic*> apcSpatDataRefPics = m_pcEncTop->getEncTop()->getSpatialRefPics( pcPic->getViewIdx(), pcSlice->getPOC(), m_pcEncTop->isDepthCoder() ); 303 pcSlice->getMP()->setRefPicsList(&apcSpatDataRefPics); 304 pcSlice->getMP()->pairMultiview(pcPic); 305 #endif 306 295 307 while(uiNextCUAddr<pcPic->getPicSym()->getNumberOfCUsInFrame()) // determine slice boundaries 296 308 { … … 615 627 pcBitstreamOut->convertRBSPToPayload(0); 616 628 629 #if POZNAN_MP 630 pcSlice->getMP()->disable(); 631 #endif 632 617 633 /*#if AMVP_BUFFERCOMPRESS 618 634 pcPic->compressMotion(); // moved to end of access unit … … 822 838 if(pAvail) 823 839 { 824 825 826 827 840 for( y = 0; y < iHeight; y++ ) 841 { 842 for( x = 0; x < iWidth; x++ ) 843 { 828 844 if(pAvail[x]==0) //If pixel was codded 829 845 { … … 847 863 for( x = 0; x < iWidth; x++ ) 848 864 { 849 850 851 852 853 854 865 Int iDiff = (Int)( pOrg[x] - pRec[x] ); 866 uiSSDY += iDiff * iDiff; 867 } 868 pOrg += iStride; 869 pRec += iStride; 870 } 855 871 } 856 872 … … 869 885 { 870 886 #if POZNAN_CU_SKIP_PSNR 871 if(pAvail) 872 { 873 iHeight >>= 1; 874 iWidth >>= 1; 875 iStride >>= 1; 876 877 pOrg = pcPic ->getPicYuvOrg()->getCbAddr(); 878 pRec = pcPicD->getCbAddr(); 879 pAvail = pcPic ->getPicYuvAvail()->getLumaAddr(); 880 iPixelsCnt = 0; 881 882 for( y = 0; y < iHeight; y++ ) 883 { 884 for( x = 0; x < iWidth; x++ ) 885 { 886 if(pAvail[x<<1]==0||pAvail[(x<<1)+1]==0|| 887 pAvail[(x+iStride)<<1]==0||pAvail[((x+iStride)<<1)+1]==0) //If pixel was codded 888 { 889 Int iDiff = (Int)( pOrg[x] - pRec[x] ); 890 uiSSDU += iDiff * iDiff; 891 iPixelsCnt++; 892 } 893 } 894 pOrg += iStride; 895 pRec += iStride; 896 pAvail+= (iStride<<2); 897 } 898 899 fRefValueC = (double) maxval * maxval * iPixelsCnt; 900 901 pOrg = pcPic ->getPicYuvOrg()->getCrAddr(); 902 pRec = pcPicD->getCrAddr(); 903 pAvail = pcPic ->getPicYuvAvail()->getLumaAddr(); 904 for( y = 0; y < iHeight; y++ ) 905 { 906 for( x = 0; x < iWidth; x++ ) 907 { 908 if(pAvail[x<<1]==0||pAvail[(x<<1)+1]==0|| 909 pAvail[(x+iStride)<<1]==0||pAvail[((x+iStride)<<1)+1]==0) //If pixel was codded 910 { 911 Int iDiff = (Int)( pOrg[x] - pRec[x] ); 912 uiSSDV += iDiff * iDiff; 913 } 914 } 915 pOrg += iStride; 916 pRec += iStride; 917 pAvail+= iStride<<2; 918 } 919 } 920 else 921 #endif 922 { 923 iHeight >>= 1; 924 iWidth >>= 1; 925 iStride >>= 1; 926 927 pOrg = pcPic ->getPicYuvOrg()->getCbAddr(); 928 pRec = pcPicD->getCbAddr(); 929 930 for( y = 0; y < iHeight; y++ ) 931 { 932 for( x = 0; x < iWidth; x++ ) 887 if(pAvail) 888 { 889 iHeight >>= 1; 890 iWidth >>= 1; 891 iStride >>= 1; 892 893 pOrg = pcPic ->getPicYuvOrg()->getCbAddr(); 894 pRec = pcPicD->getCbAddr(); 895 pAvail = pcPic ->getPicYuvAvail()->getLumaAddr(); 896 iPixelsCnt = 0; 897 898 for( y = 0; y < iHeight; y++ ) 899 { 900 for( x = 0; x < iWidth; x++ ) 901 { 902 if(pAvail[x<<1]==0||pAvail[(x<<1)+1]==0|| 903 pAvail[(x+iStride)<<1]==0||pAvail[((x+iStride)<<1)+1]==0) //If pixel was codded 933 904 { 934 905 Int iDiff = (Int)( pOrg[x] - pRec[x] ); 935 906 uiSSDU += iDiff * iDiff; 936 } 937 pOrg += iStride; 938 pRec += iStride; 939 } 940 941 pOrg = pcPic ->getPicYuvOrg()->getCrAddr(); 942 pRec = pcPicD->getCrAddr(); 943 944 for( y = 0; y < iHeight; y++ ) 945 { 946 for( x = 0; x < iWidth; x++ ) 907 iPixelsCnt++; 908 } 909 } 910 pOrg += iStride; 911 pRec += iStride; 912 pAvail+= (iStride<<2); 913 } 914 915 fRefValueC = (double) maxval * maxval * iPixelsCnt; 916 917 pOrg = pcPic ->getPicYuvOrg()->getCrAddr(); 918 pRec = pcPicD->getCrAddr(); 919 pAvail = pcPic ->getPicYuvAvail()->getLumaAddr(); 920 for( y = 0; y < iHeight; y++ ) 921 { 922 for( x = 0; x < iWidth; x++ ) 923 { 924 if(pAvail[x<<1]==0||pAvail[(x<<1)+1]==0|| 925 pAvail[(x+iStride)<<1]==0||pAvail[((x+iStride)<<1)+1]==0) //If pixel was codded 947 926 { 948 927 Int iDiff = (Int)( pOrg[x] - pRec[x] ); 949 928 uiSSDV += iDiff * iDiff; 950 929 } 951 pOrg += iStride; 952 pRec += iStride; 953 } 954 } 955 956 dYPSNR = ( uiSSDY ? 10.0 * log10( fRefValueY / (Double)uiSSDY ) : 99.99 ); 957 dUPSNR = ( uiSSDU ? 10.0 * log10( fRefValueC / (Double)uiSSDU ) : 99.99 ); 958 dVPSNR = ( uiSSDV ? 10.0 * log10( fRefValueC / (Double)uiSSDV ) : 99.99 ); 930 } 931 pOrg += iStride; 932 pRec += iStride; 933 pAvail+= iStride<<2; 934 } 935 } 936 else 937 #endif 938 { 939 iHeight >>= 1; 940 iWidth >>= 1; 941 iStride >>= 1; 942 943 pOrg = pcPic ->getPicYuvOrg()->getCbAddr(); 944 pRec = pcPicD->getCbAddr(); 945 946 for( y = 0; y < iHeight; y++ ) 947 { 948 for( x = 0; x < iWidth; x++ ) 949 { 950 Int iDiff = (Int)( pOrg[x] - pRec[x] ); 951 uiSSDU += iDiff * iDiff; 952 } 953 pOrg += iStride; 954 pRec += iStride; 955 } 956 957 pOrg = pcPic ->getPicYuvOrg()->getCrAddr(); 958 pRec = pcPicD->getCrAddr(); 959 960 for( y = 0; y < iHeight; y++ ) 961 { 962 for( x = 0; x < iWidth; x++ ) 963 { 964 Int iDiff = (Int)( pOrg[x] - pRec[x] ); 965 uiSSDV += iDiff * iDiff; 966 } 967 pOrg += iStride; 968 pRec += iStride; 969 } 970 } 971 972 dYPSNR = ( uiSSDY ? 10.0 * log10( fRefValueY / (Double)uiSSDY ) : 99.99 ); 973 dUPSNR = ( uiSSDU ? 10.0 * log10( fRefValueC / (Double)uiSSDU ) : 99.99 ); 974 dVPSNR = ( uiSSDV ? 10.0 * log10( fRefValueC / (Double)uiSSDV ) : 99.99 ); 959 975 } 960 976 // fix: total bits should consider slice size bits (32bit) -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncSbac.h
r5 r12 166 166 Void codeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 167 167 Void codeMergeIndex ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 168 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI 168 #if HHI_INTER_VIEW_MOTION_PRED || HHI_MPI || POZNAN_EIVD 169 169 Void codeMergeIndexMV ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 170 170 #endif -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncSearch.cpp
r5 r12 1042 1042 UInt uiAbsSum = 0; 1043 1043 pcCU ->setTrIdxSubParts ( uiTrDepth, uiAbsPartIdx, uiFullDepth ); 1044 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 1045 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, true), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 1046 #else 1044 1047 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 1048 #endif 1045 1049 m_pcTrQuant->transformNxN ( pcCU, piResi, uiStride, pcCoeff, uiWidth, uiHeight, uiAbsSum, TEXT_LUMA, uiAbsPartIdx ); 1046 1050 … … 1208 1212 //--- transform and quantization --- 1209 1213 UInt uiAbsSum = 0; 1214 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 1215 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, true), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 1216 #else 1210 1217 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 1218 #endif 1211 1219 m_pcTrQuant->transformNxN ( pcCU, piResi, uiStride, pcCoeff, uiWidth, uiHeight, uiAbsSum, eText, uiAbsPartIdx ); 1212 1220 //--- set coded block flag --- … … 2814 2822 } 2815 2823 2824 #if POZNAN_EIVD 2825 Void TEncSearch::xGetInterPredictionError_EIVD( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPartIdx, UInt& ruiErr, Bool bHadamard ) 2826 { 2827 TComYuv cYuvPred; 2828 cYuvPred.create( pcYuvOrg->getWidth(), pcYuvOrg->getHeight() ); 2829 2830 #ifdef WEIGHT_PRED 2831 UInt uiAbsPartIdx = 0; 2832 Int iWidth = 0; 2833 Int iHeight = 0; 2834 //Int iRefIdx[2]; 2835 pcCU->getPartIndexAndSize( iPartIdx, uiAbsPartIdx, iWidth, iHeight ); 2836 2837 //??????????????????????????????????????????????????????????????????????????????????? 2838 //iRefIdx[0] = pcCU->getCUMvField( REF_PIC_LIST_0 )->getRefIdx( uiAbsPartIdx ); 2839 //iRefIdx[1] = pcCU->getCUMvField( REF_PIC_LIST_1 )->getRefIdx( uiAbsPartIdx ); 2840 //if ( iRefIdx[0]>=0 && iRefIdx[1]<1 ) 2841 // setWpScalingDistParam( pcCU, iRefIdx[0], iRefIdx[1], REF_PIC_LIST_0); 2842 //else 2843 // setWpScalingDistParam( pcCU, iRefIdx[0], iRefIdx[1], REF_PIC_LIST_1); 2844 setWpScalingDistParam( pcCU, -1, -1, REF_PIC_LIST_X);//??? 2845 //??????????????????????????????????????????????????????????????????????????????????? 2846 motionCompensation_EIVD( pcCU, &cYuvPred, REF_PIC_LIST_X, iPartIdx ); 2847 #else 2848 motionCompensation_EIVD( pcCU, &cYuvPred, REF_PIC_LIST_X, iPartIdx ); 2849 2850 UInt uiAbsPartIdx = 0; 2851 Int iWidth = 0; 2852 Int iHeight = 0; 2853 pcCU->getPartIndexAndSize( iPartIdx, uiAbsPartIdx, iWidth, iHeight ); 2854 #endif 2855 2856 DistParam cDistParam; 2857 #ifdef WEIGHT_PRED 2858 cDistParam.applyWeight = false; 2859 #endif 2860 m_pcRdCost->setDistParam( cDistParam, 2861 pcYuvOrg->getLumaAddr( uiAbsPartIdx ), pcYuvOrg->getStride(), 2862 cYuvPred .getLumaAddr( uiAbsPartIdx ), cYuvPred .getStride(), 2863 iWidth, iHeight, m_pcEncCfg->getUseHADME() ); 2864 ruiErr = cDistParam.DistFunc( &cDistParam ); 2865 2866 cYuvPred.destroy(); 2867 } 2868 #endif 2869 2816 2870 /** estimation of best merge coding 2817 2871 * \param pcCU … … 2875 2929 PartSize ePartSize = pcCU->getPartitionSize( 0 ); 2876 2930 2931 #if POZNAN_EIVD_CALC_PRED_DATA 2932 if(uiMergeCand==POZNAN_EIVD_MRG_CAND) 2933 { 2934 pcCU->getCUMvField2nd( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand].getMv(), cMvFieldNeighbours[0 + 2*uiMergeCand].getRefIdx(), ePartSize, uiAbsPartIdx, iPUIdx, 0 ); 2935 pcCU->getCUMvField2nd( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand].getMv(), cMvFieldNeighbours[1 + 2*uiMergeCand].getRefIdx(), ePartSize, uiAbsPartIdx, iPUIdx, 0 ); 2936 } 2937 else 2938 #endif 2939 { 2877 2940 pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand].getMv(), cMvFieldNeighbours[0 + 2*uiMergeCand].getRefIdx(), ePartSize, uiAbsPartIdx, iPUIdx, 0 ); 2878 2941 pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand].getMv(), cMvFieldNeighbours[1 + 2*uiMergeCand].getRefIdx(), ePartSize, uiAbsPartIdx, iPUIdx, 0 ); 2879 2942 } 2943 2944 #if POZNAN_EIVD 2945 if(uiMergeCand==POZNAN_EIVD_MRG_CAND) 2946 xGetInterPredictionError_EIVD( pcCU, pcYuvOrg, iPUIdx, uiCostCand, m_pcEncCfg->getUseHADME() ); 2947 else 2880 2948 xGetInterPredictionError( pcCU, pcYuvOrg, iPUIdx, uiCostCand, m_pcEncCfg->getUseHADME() ); 2949 #else 2950 xGetInterPredictionError( pcCU, pcYuvOrg, iPUIdx, uiCostCand, m_pcEncCfg->getUseHADME() ); 2951 #endif 2881 2952 2882 2953 if( uiNumCand == 1 ) … … 2886 2957 else 2887 2958 { 2888 if( uiMergeCand == 0 || uiNumCand == 2 ) 2959 UInt uiMergeCandIdx = uiMergeCand; 2960 #if POZNAN_EIVD 2961 if(pcCU->getSlice()->getMP()->isEIVDEnabled()) 2962 { 2963 if(uiMergeCand == POZNAN_EIVD_MRG_CAND) uiMergeCandIdx = POZNAN_EIVD_MERGE_POS; 2964 else if(uiMergeCand >= POZNAN_EIVD_MERGE_POS) uiMergeCandIdx++; 2965 } 2966 #endif 2967 2968 if( uiMergeCandIdx == 0 || uiNumCand == 2 ) 2889 2969 { 2890 2970 uiBitsCand = 2; 2891 2971 } 2892 else if( uiMergeCand == 1 || uiNumCand == 3 )2972 else if( uiMergeCandIdx == 1 || uiNumCand == 3 ) 2893 2973 { 2894 2974 uiBitsCand = 3; 2895 2975 } 2896 else if( uiMergeCand == 2 || uiNumCand == 4 )2976 else if( uiMergeCandIdx == 2 || uiNumCand == 4 ) 2897 2977 { 2898 2978 uiBitsCand = 4; 2899 2979 } 2980 else if( uiMergeCandIdx == 3 || uiNumCand == 5 ) 2981 { 2982 uiBitsCand = 5; 2983 } 2900 2984 else 2901 2985 { 2902 uiBitsCand = 5;2986 uiBitsCand = 6; 2903 2987 } 2904 2988 } … … 2910 2994 pacMvField[0] = cMvFieldNeighbours[0 + 2*uiMergeCand]; 2911 2995 pacMvField[1] = cMvFieldNeighbours[1 + 2*uiMergeCand]; 2996 2997 #if POZNAN_EIVD_CALC_PRED_DATA 2998 if(uiMergeCand==POZNAN_EIVD_MRG_CAND) 2999 { 3000 TComCUMvField* pcEIVDPredMvField; 3001 3002 pcEIVDPredMvField = pcCU->getSlice()->getMP()->getEIVDPredMVField(REF_PIC_LIST_0); 3003 pcEIVDPredMvField->setMv(pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(uiAbsPartIdx),0); 3004 pcEIVDPredMvField->setRefIdx(pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(uiAbsPartIdx),0); 3005 3006 pcEIVDPredMvField = pcCU->getSlice()->getMP()->getEIVDPredMVField(REF_PIC_LIST_1); 3007 pcEIVDPredMvField->setMv(pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(uiAbsPartIdx),0); 3008 pcEIVDPredMvField->setRefIdx(pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx(uiAbsPartIdx),0); 3009 } 3010 #endif 3011 2912 3012 uiInterDir = uhInterDirNeighbours[uiMergeCand]; 2913 3013 uiMergeIndex = uiMergeCand; … … 3604 3704 pcCU->setMergeIndexSubParts( uiMRGIndex, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 3605 3705 pcCU->setInterDirSubParts ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 3706 3707 #if POZNAN_EIVD_CALC_PRED_DATA 3708 if(uiMRGIndex==POZNAN_EIVD_MRG_CAND) 3709 { 3710 TComCUMvField* pcEIVDPredMvField; 3711 pcEIVDPredMvField = pcCU->getSlice()->getMP()->getEIVDPredMVField(REF_PIC_LIST_0); 3712 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( pcEIVDPredMvField->getMv(0), pcEIVDPredMvField->getRefIdx(0), ePartSize, uiPartAddr, iPartIdx, 0 ); 3713 pcEIVDPredMvField = pcCU->getSlice()->getMP()->getEIVDPredMVField(REF_PIC_LIST_1); 3714 pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( pcEIVDPredMvField->getMv(0), pcEIVDPredMvField->getRefIdx(0), ePartSize, uiPartAddr, iPartIdx, 0 ); 3715 3716 pcCU->getCUMvField2nd( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0].getMv(), cMRGMvField[0].getRefIdx(), ePartSize, uiPartAddr, iPartIdx, 0 ); 3717 pcCU->getCUMvField2nd( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1].getMv(), cMRGMvField[1].getRefIdx(), ePartSize, uiPartAddr, iPartIdx, 0 ); 3718 } 3719 else 3720 #endif 3606 3721 { 3607 3722 pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0].getMv(), cMRGMvField[0].getRefIdx(), ePartSize, uiPartAddr, iPartIdx, 0 ); … … 4998 5113 m_pcEntropyCoder->estimateBit(m_pcTrQuant->m_pcEstBitsSbac, 1<< uiLog2TrSize, TEXT_LUMA ); 4999 5114 } 5115 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 5116 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, false), false, pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 5117 #else 5000 5118 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 5119 #endif 5001 5120 m_pcTrQuant->transformNxN( pcCU, pcResi->getLumaAddr( uiAbsPartIdx ), pcResi->getStride (), pcCoeffCurrY, 1<< uiLog2TrSize, 1<< uiLog2TrSize, uiAbsSumY, TEXT_LUMA, uiAbsPartIdx ); 5002 5121 … … 5009 5128 m_pcEntropyCoder->estimateBit(m_pcTrQuant->m_pcEstBitsSbac, 1<<uiLog2TrSizeC, TEXT_CHROMA ); 5010 5129 } 5130 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 5131 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, false), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 5132 #else 5011 5133 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 5134 #endif 5012 5135 m_pcTrQuant->transformNxN( pcCU, pcResi->getCbAddr( uiAbsPartIdx ), pcResi->getCStride(), pcCoeffCurrU, 1<<uiLog2TrSizeC, 1<<uiLog2TrSizeC, uiAbsSumU, TEXT_CHROMA_U, uiAbsPartIdx ); 5013 5136 m_pcTrQuant->transformNxN( pcCU, pcResi->getCrAddr( uiAbsPartIdx ), pcResi->getCStride(), pcCoeffCurrV, 1<<uiLog2TrSizeC, 1<<uiLog2TrSizeC, uiAbsSumV, TEXT_CHROMA_V, uiAbsPartIdx ); … … 5072 5195 { 5073 5196 Pel *pcResiCurrY = m_pcQTTempTComYuv[uiQTTempAccessLayer].getLumaAddr( uiAbsPartIdx ); 5197 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 5198 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, false), false, pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 5199 #else 5074 5200 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_LUMA ); 5201 #endif 5075 5202 #if INTRA_DST_TYPE_7 // Inside Inter Encoder Search. So use conventional DCT. 5076 5203 m_pcTrQuant->invtransformNxN( TEXT_LUMA,REG_DCT, pcResiCurrY, m_pcQTTempTComYuv[uiQTTempAccessLayer].getStride(), pcCoeffCurrY, 1<< uiLog2TrSize, 1<< uiLog2TrSize );//this is for inter mode only … … 5150 5277 { 5151 5278 Pel *pcResiCurrU = m_pcQTTempTComYuv[uiQTTempAccessLayer].getCbAddr( uiAbsPartIdx ); 5279 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 5280 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, false), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 5281 #else 5152 5282 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 5283 #endif 5153 5284 #if INTRA_DST_TYPE_7 // Inside Inter Encoder Search. So use conventional DCT. 5154 5285 m_pcTrQuant->invtransformNxN( TEXT_CHROMA,REG_DCT, pcResiCurrU, m_pcQTTempTComYuv[uiQTTempAccessLayer].getCStride(), pcCoeffCurrU, 1<<uiLog2TrSizeC, 1<<uiLog2TrSizeC); … … 5195 5326 if( !uiAbsSumU ) 5196 5327 { 5328 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 5329 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ) + pcCU->getQpOffsetForTextCU(uiAbsPartIdx, false), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 5330 #else 5197 5331 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA ); 5332 #endif 5198 5333 } 5199 5334 #if INTRA_DST_TYPE_7 // Inside Inter Encoder Search. So use conventional DCT. -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncSearch.h
r5 r12 185 185 186 186 Void xGetInterPredictionError( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPartIdx, UInt& ruiSAD, Bool Hadamard ); 187 #if POZNAN_EIVD 188 Void xGetInterPredictionError_EIVD( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPartIdx, UInt& ruiSAD, Bool Hadamard ); 189 #endif 187 190 188 191 public: -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncSlice.cpp
r5 r12 475 475 m_pcEntropyCoder->setMaxAlfCtrlDepth(0); //unnecessary 476 476 477 #if POZNAN_STAT_JK 478 m_pcCuEncoder->setStatFileEnabled(false); 479 #endif 480 477 481 // for every CU in slice 478 482 for( uiCUAddr = uiStartCUAddr; uiCUAddr < uiBoundingCUAddr; uiCUAddr++ ) … … 611 615 #endif 612 616 617 #if POZNAN_STAT_JK 618 m_pcCuEncoder->setStatFileEnabled(true); 619 #endif 620 613 621 for( uiCUAddr = uiStartCUAddr; uiCUAddr<uiBoundingCUAddr; uiCUAddr++ ) 614 622 { … … 618 626 g_bJustDoIt = g_bEncDecTraceEnable; 619 627 #endif 628 629 // JK { 630 DTRACE_CABAC_V( g_nSymbolCounter++ ); 631 DTRACE_CABAC_T( "\tCU: " ); 632 DTRACE_CABAC_V( uiCUAddr ); 633 DTRACE_CABAC_T( "\n" ); 634 // JK } 635 620 636 if ( (m_pcCfg->getSliceMode()!=0 || m_pcCfg->getEntropySliceMode()!=0) && uiCUAddr==uiBoundingCUAddr-1 ) 621 637 { -
branches/0.2-poznan-univ/source/Lib/TLibEncoder/TEncTop.cpp
r11 r12 63 63 m_bSeqFirst = true; 64 64 m_iFrameNumInCodingOrder = 0; 65 66 #if POZNAN_MP 67 m_pcMP=NULL; 68 #endif 69 65 70 } 66 71 … … 98 103 #endif 99 104 105 #if POZNAN_MP 106 m_pcMP = NULL; 107 #endif 108 100 109 #if MQT_BA_RA && MQT_ALF_NPASS 101 110 if(m_bUseALF) … … 163 172 #endif 164 173 174 #if POZNAN_MP 175 m_pcMP=NULL; 176 #endif 177 165 178 // SBAC RD 166 179 if( m_bUseSBACRD ) … … 205 218 // initialize PPS 206 219 xInitPPS(); 220 #endif 221 222 #if POZNAN_MP 223 m_pcMP = pcTAppEncTop->getMP(); 207 224 #endif 208 225 … … 416 433 { 417 434 pcPic->removeOriginalBuffer (); 418 #if POZNAN_ AVAIL_MAP435 #if POZNAN_CU_SKIP 419 436 pcPic->removeAvailabilityBuffer(); 420 437 #endif 421 #if POZNAN_ SYNTH_VIEW438 #if POZNAN_CU_SYNTH 422 439 pcPic->removeSynthesisBuffer(); 440 #if POZNAN_TEXTURE_TU_DELTA_QP_ACCORDING_TO_DEPTH 441 pcPic->removeSynthesisDepthBuffer(); 442 #endif 423 443 #endif 424 444 #if HHI_INTER_VIEW_MOTION_PRED … … 514 534 // mark it should be extended 515 535 rpcPic->getPicYuvRec()->setBorderExtension(false); 536 537 #if POZNAN_MP 538 rpcPic->getSlice(0)->setMP(m_pcMP); 539 #endif 540 541 #if POZNAN_STAT_JK 542 rpcPic->getSlice(0)->setStatFile(m_pcStatFile); 543 #endif 516 544 } 517 545 … … 624 652 #if HHI_MPI 625 653