Changeset 294 in 3DVCSoftware
- Timestamp:
- 19 Feb 2013, 20:33:52 (12 years ago)
- Location:
- branches/HTM-5.1-dev0/source
- Files:
-
- 77 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-5.1-dev0/source/App/TAppDecoder/TAppDecTop.cpp
r289 r294 369 369 if(newPicture[viewDepthId]) 370 370 { 371 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER372 371 xWriteOutput( pcListPic[viewDepthId], viewDepthId, nalu.m_temporalId ); 373 #else374 xWriteOutput( pcListPic[viewDepthId], viewDepthId );375 #endif376 372 } 377 373 } … … 440 436 } 441 437 442 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER443 438 Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, Int viewDepthId, UInt tId ) 444 #else445 Void TAppDecTop::xWriteOutput( TComList<TComPic*>* pcListPic, Int viewDepthId )446 #endif447 439 { 448 440 TComList<TComPic*>::iterator iterPic = pcListPic->begin(); … … 463 455 { 464 456 TComPic* pcPic = *(iterPic); 465 #if PIC_CROPPING466 457 TComSPS *sps = pcPic->getSlice(0)->getSPS(); 467 #endif468 458 469 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER470 459 if ( pcPic->getOutputMark() && (not_displayed > pcPic->getSlice(0)->getSPS()->getNumReorderPics(tId) && pcPic->getPOC() > m_pocLastDisplay[viewDepthId])) 471 #else472 if ( pcPic->getOutputMark() && (not_displayed > pcPic->getSlice(0)->getSPS()->getNumReorderFrames() && pcPic->getPOC() > m_pocLastDisplay[viewDepthId]))473 #endif474 460 { 475 461 // write to file … … 477 463 if ( m_pchReconFile ) 478 464 { 479 #if PIC_CROPPING480 465 m_tVideoIOYuvReconFile[viewDepthId]->write( pcPic->getPicYuvRec(), sps->getPicCropLeftOffset(), sps->getPicCropRightOffset(), sps->getPicCropTopOffset(), sps->getPicCropBottomOffset() ); 481 #else482 m_tVideoIOYuvReconFile[viewDepthId]->write( pcPic->getPicYuvRec(), pcPic->getSlice(0)->getSPS()->getPad() );483 #endif484 466 } 485 467 … … 526 508 { 527 509 TComPic* pcPic = *(iterPic); 528 #if PIC_CROPPING529 510 TComSPS *sps = pcPic->getSlice(0)->getSPS(); 530 #endif531 511 532 512 if ( pcPic->getOutputMark() ) … … 535 515 if ( m_pchReconFile ) 536 516 { 537 #if PIC_CROPPING538 517 m_tVideoIOYuvReconFile[viewDepthId]->write( pcPic->getPicYuvRec(), sps->getPicCropLeftOffset(), sps->getPicCropRightOffset(), sps->getPicCropTopOffset(), sps->getPicCropBottomOffset() ); 539 #else540 m_tVideoIOYuvReconFile[viewDepthId]->write( pcPic->getPicYuvRec(), pcPic->getSlice(0)->getSPS()->getPad() );541 #endif542 518 } 543 519 -
branches/HTM-5.1-dev0/source/App/TAppDecoder/TAppDecTop.h
r231 r294 121 121 // Void xInitDecLib (); ///< initialize decoder class 122 122 123 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER124 123 Void xWriteOutput ( TComList<TComPic*>* pcListPic, Int viewDepthId, UInt tId); ///< write YUV to file 125 #else126 Void xWriteOutput ( TComList<TComPic*>* pcListPic, Int viewDepthId ); ///< write YUV to file127 #endif128 124 Void xFlushOutput ( TComList<TComPic*>* pcListPic, Int viewDepthId ); ///< flush all remaining decoded pictures to file 129 125 -
branches/HTM-5.1-dev0/source/App/TAppEncoder/TAppEncCfg.cpp
r292 r294 233 233 ("SourceWidth,-wdt", m_iSourceWidth, 0, "Source picture width") 234 234 ("SourceHeight,-hgt", m_iSourceHeight, 0, "Source picture height") 235 #if PIC_CROPPING236 235 ("CroppingMode", m_croppingMode, 0, "Cropping mode (0: no cropping, 1:automatic padding, 2: padding, 3:cropping") 237 236 ("CropLeft", m_cropLeft, 0, "Left cropping/padding for cropping mode 3") … … 241 240 ("HorizontalPadding,-pdx", m_aiPad[0], 0, "horizontal source padding for cropping mode 2") 242 241 ("VerticalPadding,-pdy", m_aiPad[1], 0, "vertical source padding for cropping mode 2") 243 #endif244 242 ("InputBitDepth", m_uiInputBitDepth, 8u, "bit-depth of input file") 245 243 ("BitDepth", m_uiInputBitDepth, 8u, "deprecated alias of InputBitDepth") 246 244 ("OutputBitDepth", m_uiOutputBitDepth, 0u, "bit-depth of output file") 247 245 ("InternalBitDepth", m_uiInternalBitDepth, 0u, "Internal bit-depth (BitDepth+BitIncrement)") 248 #if !PIC_CROPPING249 ("HorizontalPadding,-pdx",m_aiPad[0], 0, "horizontal source padding size")250 ("VerticalPadding,-pdy", m_aiPad[1], 0, "vertical source padding size")251 ("PAD", m_bUsePAD, false, "automatic source padding of multiple of 16" )252 #endif253 246 ("FrameRate,-fr", m_iFrameRate, 0, "Frame rate") 254 247 ("FrameSkip,-fs", m_FrameSkip, 0u, "Number of frames to skip at start of input YUV") … … 279 272 ("DecodingRefreshType,-dr",m_iDecodingRefreshType, 0, "intra refresh, (0:none 1:CRA 2:IDR)") 280 273 ("GOPSize,g", m_iGOPSize, 1, "GOP size of temporal structure") 281 #if !H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER282 ("MaxNumberOfReorderPictures", m_numReorderFrames, -1, "Max. number of reorder pictures: -1: encoder determines value, >=0: set explicitly")283 ("MaxNumberOfReferencePictures", m_maxNumberOfReferencePictures, 6, "Max. number of reference pictures")284 #endif285 274 ("ListCombination,-lc", m_bUseLComb, true, "combined reference list flag for uni-prediction in B-slices") 286 275 ("LCModification", m_bLCMod, false, "enables signalling of combined reference list derivation") … … 321 310 ("TemporalLayerQPOffset_L3,-tq3", m_aiTLayerQPOffset[3], MAX_QP + 1, "QP offset of temporal layer 3") 322 311 323 #if !H0566_TLA324 ("TLayeringBasedOnCodingStruct,-tl", m_bTLayering, false, "Temporal ID is set based on the hierarchical coding structure")325 326 ("TLayerSwitchingFlag_L0,-ts0", m_abTLayerSwitchingFlag[0], false, "Switching flag for temporal layer 0")327 ("TLayerSwitchingFlag_L1,-ts1", m_abTLayerSwitchingFlag[1], false, "Switching flag for temporal layer 1")328 ("TLayerSwitchingFlag_L2,-ts2", m_abTLayerSwitchingFlag[2], false, "Switching flag for temporal layer 2")329 ("TLayerSwitchingFlag_L3,-ts3", m_abTLayerSwitchingFlag[3], false, "Switching flag for temporal layer 3")330 #endif331 312 332 313 /* Entropy coding parameters */ … … 349 330 ("IVSEnable", m_bUseIVS , true , "Use inter-view vector scaling" ) 350 331 #endif 351 #if DBL_CONTROL352 332 ("DeblockingFilterControlPresent", m_DeblockingFilterControlPresent, true) 353 #endif354 333 355 334 /* Camera Paremetes */ … … 412 391 ("ALF", m_abUseALF, std::vector<Bool>(1,true), "Enables ALF") 413 392 ("SAO", m_abUseSAO, std::vector<Bool>(1, true), "SAO") 414 #if SAO_UNIT_INTERLEAVING415 393 ("MaxNumOffsetsPerPic", m_maxNumOffsetsPerPic, 2048, "2048: default") 416 394 ("SAOInterleaving", m_saoInterleavingFlag, false, "0: SAO Picture Mode, 1: SAO Interleaving ") 417 #endif418 395 419 396 ("ALFEncodePassReduction", m_iALFEncodePassReduction, 0, "0:Original 16-pass, 1: 1-pass, 2: 2-pass encoding") 420 397 421 398 ("ALFMaxNumFilter,-ALFMNF", m_iALFMaxNumberFilters, 16, "16: No Constrained, 1-15: Constrained max number of filter") 422 #if LCU_SYNTAX_ALF423 399 ("ALFParamInSlice", m_bALFParamInSlice, false, "ALF parameters in 0: APS, 1: slice header") 424 400 ("ALFPicBasedEncode", m_bALFPicBasedEncode, true, "ALF picture-based encoding 0: false, 1: true") 425 #endif426 401 427 402 ("SliceMode", m_iSliceMode, 0, "0: Disable all Recon slice limits, 1: Enforce max # of LCUs, 2: Enforce max # of bytes") … … 446 421 ("TileInfoPresentFlag", m_iColumnRowInfoPresent, 1, "0: tiles parameters are NOT present in the PPS. 1: tiles parameters are present in the PPS") 447 422 ("UniformSpacingIdc", m_iUniformSpacingIdr, 0, "Indicates if the column and row boundaries are distributed uniformly") 448 #if !REMOVE_TILE_DEPENDENCE449 ("TileBoundaryIndependenceIdc", m_iTileBoundaryIndependenceIdr, 1, "Indicates if the column and row boundaries break the prediction")450 #endif451 423 ("NumTileColumnsMinus1", m_iNumColumnsMinus1, 0, "Number of columns in a picture minus 1") 452 424 ("ColumnWidthArray", cfg_ColumnWidth, string(""), "Array containing ColumnWidth values in units of LCU") … … 463 435 ("ScalingList", m_useScalingListId, 0, "0: no scaling list, 1: default scaling lists, 2: scaling lists specified in ScalingListFile") 464 436 ("ScalingListFile", cfg_ScalingListFile, string(""), "Scaling list file name") 465 #if MULTIBITS_DATA_HIDING466 437 ("SignHideFlag,-SBH", m_signHideFlag, 1) 467 438 ("SignHideThreshold,-TSIG", m_signHidingThreshold, 4) 468 #endif469 439 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 470 440 ("DMM", m_bUseDMM, false, "depth model modes flag") … … 484 454 ("FEN", m_bUseFastEnc, false, "fast encoder setting") 485 455 ("ECU", m_bUseEarlyCU, false, "Early CU setting") 486 #if FAST_DECISION_FOR_MRG_RD_COST487 456 ("FDM", m_useFastDecisionForMerge, true, "Fast decision for Merge RD Cost") 488 #endif489 457 ("CFM", m_bUseCbfFastMode, false, "Cbf fast mode setting") 490 458 #if HHI_INTERVIEW_SKIP … … 624 592 } 625 593 626 #if PIC_CROPPING627 594 switch (m_croppingMode) 628 595 { … … 674 641 } 675 642 } 676 #else677 678 // compute source padding size679 if ( m_bUsePAD )680 {681 if ( m_iSourceWidth%MAX_PAD_SIZE )682 {683 m_aiPad[0] = (m_iSourceWidth/MAX_PAD_SIZE+1)*MAX_PAD_SIZE - m_iSourceWidth;684 }685 686 if ( m_iSourceHeight%MAX_PAD_SIZE )687 {688 m_aiPad[1] = (m_iSourceHeight/MAX_PAD_SIZE+1)*MAX_PAD_SIZE - m_iSourceHeight;689 }690 }691 m_iSourceWidth += m_aiPad[0];692 m_iSourceHeight += m_aiPad[1];693 #endif694 643 695 644 // allocate slice-based dQP values … … 897 846 xConfirmPara( (m_iIntraPeriod > 0 && m_iIntraPeriod < m_iGOPSize) || m_iIntraPeriod == 0, "Intra period must be more than GOP size, or -1 , not 0" ); 898 847 xConfirmPara( m_iDecodingRefreshType < 0 || m_iDecodingRefreshType > 2, "Decoding Refresh Type must be equal to 0, 1 or 2" ); 899 #if H0736_AVC_STYLE_QP_RANGE900 848 xConfirmPara( m_aiQP[0] < -6 * ((Int)m_uiInternalBitDepth - 8) || m_aiQP[0] > 51, "QP exceeds supported range (-QpBDOffsety to 51)" ); 901 849 if ( m_aiQP.size() >= 2 ) … … 903 851 xConfirmPara( m_aiQP[1] < -6 * ((Int)m_uiInternalBitDepth - 8) || m_aiQP[1] > 51, "QP depth exceeds supported range (-QpBDOffsety to 51)" ); 904 852 } 905 #else906 xConfirmPara( m_aiQP[0] < 0 || m_aiQP[0] > 51, "QP exceeds supported range (0 to 51)" );907 if ( m_aiQP.size() >= 2 )908 {909 xConfirmPara( m_aiQP[1] < 0 || m_aiQP[1] > 51, "QP Depth exceeds supported range (0 to 51)" );910 }911 #endif912 853 xConfirmPara( m_iALFEncodePassReduction < 0 || m_iALFEncodePassReduction > 2, "ALFEncodePassReduction must be equal to 0, 1 or 2"); 913 #if LCU_SYNTAX_ALF914 854 xConfirmPara( m_iALFMaxNumberFilters < 1, "ALFMaxNumFilter should be larger than 1"); 915 #else916 xConfirmPara( m_iALFMaxNumberFilters < 1 || m_iALFMaxNumberFilters > 16, "ALFMaxNumFilter exceeds supported range (1 to 16)");917 #endif918 855 xConfirmPara( m_loopFilterBetaOffsetDiv2 < -13 || m_loopFilterBetaOffsetDiv2 > 13, "Loop Filter Beta Offset div. 2 exceeds supported range (-13 to 13)"); 919 856 xConfirmPara( m_loopFilterTcOffsetDiv2 < -13 || m_loopFilterTcOffsetDiv2 > 13, "Loop Filter Tc Offset div. 2 exceeds supported range (-13 to 13)"); … … 941 878 xConfirmPara( m_uiMaxCUWidth < 16, "Maximum partition width size should be larger than or equal to 16"); 942 879 xConfirmPara( m_uiMaxCUHeight < 16, "Maximum partition height size should be larger than or equal to 16"); 943 #if PIC_CROPPING944 880 xConfirmPara( (m_iSourceWidth % (m_uiMaxCUWidth >> (m_uiMaxCUDepth-1)))!=0, "Resulting coded frame width must be a multiple of the minimum CU size"); 945 881 xConfirmPara( (m_iSourceHeight % (m_uiMaxCUHeight >> (m_uiMaxCUDepth-1)))!=0, "Resulting coded frame height must be a multiple of the minimum CU size"); 946 #else947 xConfirmPara( (m_iSourceWidth % (m_uiMaxCUWidth >> (m_uiMaxCUDepth-1)))!=0, "Frame width should be multiple of minimum CU size");948 xConfirmPara( (m_iSourceHeight % (m_uiMaxCUHeight >> (m_uiMaxCUDepth-1)))!=0, "Frame height should be multiple of minimum CU size");949 #endif950 882 951 883 xConfirmPara( m_uiQuadtreeTULog2MinSize < 2, "QuadtreeTULog2MinSize must be 2 or greater."); … … 1005 937 } 1006 938 #if ADAPTIVE_QP_SELECTION 1007 #if H0736_AVC_STYLE_QP_RANGE1008 939 xConfirmPara( m_bUseAdaptQpSelect == true && m_aiQP[0] < 0, "AdaptiveQpSelection must be disabled when QP < 0."); 1009 940 xConfirmPara( m_bUseAdaptQpSelect == true && m_aiQP[1] < 0, "AdaptiveQpSelection must be disabled when QP < 0."); 1010 941 xConfirmPara( m_bUseAdaptQpSelect == true && (m_iChromaQpOffset !=0 || m_iChromaQpOffset2nd != 0 ), "AdaptiveQpSelection must be disabled when ChromaQpOffset is not equal to 0."); 1011 #endif1012 942 #endif 1013 943 … … 1020 950 } 1021 951 1022 #if FIXED_NUMBER_OF_TILES_SLICE_MODE1023 952 xConfirmPara( m_iSliceMode < 0 || m_iSliceMode > 3, "SliceMode exceeds supported range (0 to 3)" ); 1024 #endif1025 953 if (m_iSliceMode!=0) 1026 954 { 1027 955 xConfirmPara( m_iSliceArgument < 1 , "SliceArgument should be larger than or equal to 1" ); 1028 956 } 1029 #if FIXED_NUMBER_OF_TILES_SLICE_MODE1030 957 if (m_iSliceMode==3) 1031 958 { 1032 959 xConfirmPara( m_iSliceGranularity > 0 , "When SliceMode == 3 is chosen, the SliceGranularity must be 0" ); 1033 960 } 1034 #endif1035 961 xConfirmPara( m_iEntropySliceMode < 0 || m_iEntropySliceMode > 2, "EntropySliceMode exceeds supported range (0 to 2)" ); 1036 962 if (m_iEntropySliceMode!=0) … … 1042 968 xConfirmPara( m_iSliceGranularity > m_iMaxCuDQPDepth, "SliceGranularity must be smaller smaller than or equal to maximum dqp depth" ); 1043 969 1044 #if NO_COMBINED_PARALLEL1045 970 bool tileFlag = (m_iNumColumnsMinus1 > 0 || m_iNumRowsMinus1 > 0 ); 1046 971 xConfirmPara( tileFlag && m_iEntropySliceMode, "Tile and Entropy Slice can not be applied together"); 1047 972 xConfirmPara( tileFlag && m_iWaveFrontSynchro, "Tile and Wavefront can not be applied together"); 1048 973 xConfirmPara( m_iWaveFrontSynchro && m_iEntropySliceMode, "Wavefront and Entropy Slice can not be applied together"); 1049 #endif1050 974 1051 975 // max CU width and height should be power of 2 … … 1239 1163 for( Int i = 0; i < MAX_GOP; i++ ) { isOK[i] = false; } 1240 1164 Int numOK = 0; 1241 #if !H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1242 Int numReorderFramesRequired=0;1243 m_maxNumberOfReferencePictures=0;1244 Int lastDisp = -1;1245 #endif1246 1165 m_extraRPSs[viewId] = 0; 1247 1166 //start looping through frames in coding order until we can verify that the GOP structure is correct. … … 1427 1346 } 1428 1347 } 1429 #if !H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1430 if(m_maxNumberOfReferencePictures<numRefs)1431 {1432 m_maxNumberOfReferencePictures=numRefs;1433 }1434 #endif1435 1348 refList[numRefs] = curPOC; 1436 1349 numRefs++; 1437 #if !H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1438 Int nonDisplayed=0;1439 for(Int i=0; i<numRefs; i++)1440 {1441 if(refList[i]==lastDisp+1)1442 {1443 lastDisp=refList[i];1444 i=0;1445 }1446 }1447 for(Int i=0; i<numRefs; i++)1448 {1449 if(refList[i]>lastDisp)1450 {1451 nonDisplayed++;1452 }1453 }1454 if(nonDisplayed>numReorderFramesRequired)1455 {1456 numReorderFramesRequired=nonDisplayed;1457 }1458 #endif1459 1350 } 1460 1351 checkGOP++; 1461 1352 } 1462 #if !H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1463 if (m_numReorderFrames == -1)1464 {1465 m_numReorderFrames = numReorderFramesRequired;1466 }1467 #endif1468 1353 xConfirmPara( errorGOP, "Invalid GOP structure given" ); 1469 #if H0566_TLA1470 1354 m_maxTempLayer[viewId] = 1; 1471 #endif1472 1355 for( Int i = 0; i < m_iGOPSize; i++ ) 1473 1356 { 1474 #if H0566_TLA1475 1357 if( m_GOPListsMvc[viewId][i].m_temporalId >= m_maxTempLayer[viewId] ) 1476 1358 { 1477 1359 m_maxTempLayer[viewId] = m_GOPListsMvc[viewId][i].m_temporalId + 1; 1478 1360 } 1479 #endif1480 1361 xConfirmPara( m_GOPListsMvc[viewId][i].m_sliceType != 'B' && m_GOPListsMvc[viewId][i].m_sliceType != 'P', "Slice type must be equal to B or P" ); 1481 1362 } 1482 1363 1483 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1484 1364 for( Int i = 0; i < MAX_TLAYER; i++ ) 1485 1365 { … … 1538 1418 m_maxDecPicBuffering[viewId][MAX_TLAYER-1] = m_numReorderPics[viewId][MAX_TLAYER-1]; 1539 1419 } 1540 #endif 1541 1542 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER 1420 1543 1421 xConfirmPara( m_bUseLComb == false && m_numReorderPics[viewId][MAX_TLAYER-1] != 0, "ListCombination can only be 0 in low delay coding (more precisely when L0 and L1 are identical)" ); // Note however this is not the full necessary condition as ref_pic_list_combination_flag can only be 0 if L0 == L1. 1544 #else1545 xConfirmPara( m_bUseLComb==false && m_numReorderFrames!=0, "ListCombination can only be 0 in low delay coding (more precisely when L0 and L1 are identical)" ); // Note however this is not the full necessary condition as ref_pic_list_combination_flag can only be 0 if L0 == L1.1546 xConfirmPara( m_numReorderFrames < numReorderFramesRequired, "For the used GOP the encoder requires more pictures for reordering than specified in MaxNumberOfReorderPictures" );1547 #endif1548 1422 } 1549 1423 } … … 1655 1529 } 1656 1530 } 1657 #if PIC_CROPPING1658 1531 printf("Real Format : %dx%d %dHz\n", m_iSourceWidth - m_cropLeft - m_cropRight, m_iSourceHeight - m_cropTop - m_cropBottom, m_iFrameRate ); 1659 #else1660 printf("Real Format : %dx%d %dHz\n", m_iSourceWidth - m_aiPad[0], m_iSourceHeight-m_aiPad[1], m_iFrameRate );1661 #endif1662 1532 printf("Internal Format : %dx%d %dHz\n", m_iSourceWidth, m_iSourceHeight, m_iFrameRate ); 1663 1533 printf("Frame index : %u - %d (%d frames)\n", m_FrameSkip, m_FrameSkip+m_iFrameToBeEncoded-1, m_iFrameToBeEncoded ); … … 1727 1597 1728 1598 printf("TOOL CFG General: "); 1729 #if LCU_SYNTAX_ALF1730 1599 printf("ALFMNF:%d ", m_iALFMaxNumberFilters); 1731 1600 printf("ALFInSlice:%d ", m_bALFParamInSlice); 1732 1601 printf("ALFPicEnc:%d ", m_bALFPicBasedEncode); 1733 #endif1734 1602 printf("IBD:%d ", !!g_uiBitIncrement); 1735 1603 printf("HAD:%d ", m_bUseHADME ); … … 1737 1605 printf("SQP:%d ", m_uiDeltaQpRD ); 1738 1606 printf("ASR:%d ", m_bUseASR ); 1739 #if !PIC_CROPPING1740 printf("PAD:%d ", m_bUsePAD );1741 #endif1742 1607 printf("LComb:%d ", m_bUseLComb ); 1743 1608 printf("LCMod:%d ", m_bLCMod ); 1744 1609 printf("FEN:%d ", m_bUseFastEnc ); 1745 1610 printf("ECU:%d ", m_bUseEarlyCU ); 1746 #if FAST_DECISION_FOR_MRG_RD_COST1747 1611 printf("FDM:%d ", m_useFastDecisionForMerge ); 1748 #endif1749 1612 printf("CFM:%d ", m_bUseCbfFastMode ); 1750 1613 printf("RQT:%d ", 1 ); … … 1761 1624 } 1762 1625 printf("CIP:%d ", m_bUseConstrainedIntraPred); 1763 #if BURST_IPCM1764 1626 printf("PCM:%d ", (m_usePCM && (1<<m_uiPCMLog2MinSize) <= m_uiMaxCUWidth)? 1 : 0); 1765 #else1766 printf("PCM:%d ", ((1<<m_uiPCMLog2MinSize) <= m_uiMaxCUWidth)? 1 : 0);1767 #endif1768 #if SAO_UNIT_INTERLEAVING1769 1627 printf("SAOInterleaving:%d ", (m_saoInterleavingFlag)?(1):(0)); 1770 #endif1771 1628 #if LOSSLESS_CODING 1772 1629 printf("LosslessCuEnabled:%d ", (m_useLossless)? 1:0 ); … … 1774 1631 printf("WPP:%d ", (Int)m_bUseWeightPred); 1775 1632 printf("WPB:%d ", m_uiBiPredIdc); 1776 #if !REMOVE_TILE_DEPENDENCE1777 printf("TileBoundaryIndependence:%d ", m_iTileBoundaryIndependenceIdr );1778 #endif1779 1633 printf("TileLocationInSliceHdr:%d ", m_iTileLocationInSliceHeaderFlag); 1780 1634 printf("TileMarker:%d", m_iTileMarkerFlag); … … 1799 1653 #endif 1800 1654 1801 #if MULTIBITS_DATA_HIDING1802 1655 printf(" SignBitHidingFlag:%d SignBitHidingThreshold:%d", m_signHideFlag, m_signHidingThreshold); 1803 #endif1804 1656 printf("\n"); 1805 1657 printf("TOOL CFG VIDEO : "); -
branches/HTM-5.1-dev0/source/App/TAppEncoder/TAppEncCfg.h
r292 r294 73 73 Int m_iSourceWidth; ///< source width in pixel 74 74 Int m_iSourceHeight; ///< source height in pixel 75 #if PIC_CROPPING76 75 Int m_croppingMode; 77 76 Int m_cropLeft; … … 79 78 Int m_cropTop; 80 79 Int m_cropBottom; 81 #endif82 80 Int m_iFrameToBeEncoded; ///< number of encoded frames 83 #if !PIC_CROPPING84 Bool m_bUsePAD; ///< flag for using source padding85 #endif86 81 Int m_aiPad[2]; ///< number of padded pixels for width and height 87 82 … … 100 95 Int m_extraRPSs[MAX_VIEW_NUM]; 101 96 GOPEntryMvc m_GOPListsMvc[MAX_VIEW_NUM][MAX_GOP+1]; 102 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER103 97 Int m_numReorderPics[MAX_VIEW_NUM][MAX_TLAYER]; ///< total number of reorder pictures 104 98 Int m_maxDecPicBuffering[MAX_VIEW_NUM][MAX_TLAYER]; ///< total number of reference pictures needed for decoding 105 #else106 Int m_numReorderFrames; ///< total number of reorder pictures107 Int m_maxNumberOfReferencePictures; ///< total number of reference pictures needed for decoding108 #endif109 99 Bool m_bUseLComb; ///< flag for using combined reference list for uni-prediction in B-slices (JCTVC-D421) 110 100 Bool m_bLCMod; ///< flag for specifying whether the combined reference list for uni-prediction in B-slices is uploaded explicitly … … 136 126 Int m_iQPAdaptationRange; ///< dQP range by QP adaptation 137 127 138 #if H0566_TLA139 128 Int m_maxTempLayer[MAX_VIEW_NUM]; ///< Max temporal layer 140 #else141 Bool m_bTLayering; ///< indicates whether temporal IDs are set based on the hierarchical coding structure142 Bool m_abTLayerSwitchingFlag[MAX_TLAYER]; ///< temporal layer switching flags corresponding to each temporal layer143 #endif144 129 145 130 // coding unit (CU) definition … … 179 164 Bool m_bUseIVS; ///< flag for using inter-view vector scaling 180 165 #endif 181 #if SAO_UNIT_INTERLEAVING182 166 Int m_maxNumOffsetsPerPic; ///< SAO maximun number of offset per picture 183 167 Bool m_saoInterleavingFlag; ///< SAO interleaving flag 184 #endif185 168 // coding tools (loop filter) 186 169 vector<Bool> m_abUseALF; ///< flag for using adaptive loop filter [0] - video, [1] - depth … … 188 171 189 172 Int m_iALFMaxNumberFilters; ///< ALF Max Number Filters in one picture 190 #if LCU_SYNTAX_ALF191 173 Bool m_bALFParamInSlice; 192 174 Bool m_bALFPicBasedEncode; 193 #endif194 175 195 176 vector<Bool> m_abLoopFilterDisable; ///< flag for using deblocking filter filter [0] - video, [1] - depth … … 197 178 Int m_loopFilterBetaOffsetDiv2; ///< beta offset for deblocking filter 198 179 Int m_loopFilterTcOffsetDiv2; ///< tc offset for deblocking filter 199 #if DBL_CONTROL200 180 Bool m_DeblockingFilterControlPresent; ///< deblocking filter control present flag in PPS 201 #endif202 181 203 182 Bool m_bUseLMChroma; ///< JL: Chroma intra prediction based on luma signal … … 242 221 #endif 243 222 244 #if FAST_DECISION_FOR_MRG_RD_COST245 223 Bool m_useFastDecisionForMerge; ///< flag for using Fast Decision Merge RD-Cost 246 #endif247 224 Bool m_bUseCbfFastMode; ///< flag for using Cbf Fast PU Mode Decision 248 225 Int m_iSliceMode; ///< 0: Disable all Recon slice limits, 1 : Maximum number of largest coding units per slice, 2: Maximum number of bytes in a slice … … 257 234 Int m_iColumnRowInfoPresent; 258 235 Int m_iUniformSpacingIdr; 259 #if !REMOVE_TILE_DEPENDENCE260 Int m_iTileBoundaryIndependenceIdr;261 #endif262 236 Int m_iNumColumnsMinus1; 263 237 char* m_pchColumnWidth; … … 287 261 #endif 288 262 289 #if MULTIBITS_DATA_HIDING290 263 Int m_signHideFlag; 291 264 Int m_signHidingThreshold; 292 #endif293 265 #if HHI_MPI 294 266 Bool m_bUseMVI; ///< flag for using Motion Vector Inheritance for depth map coding -
branches/HTM-5.1-dev0/source/App/TAppEncoder/TAppEncTop.cpp
r292 r294 97 97 m_acTEncTopList[iViewIdx]->setSourceWidth ( m_iSourceWidth ); 98 98 m_acTEncTopList[iViewIdx]->setSourceHeight ( m_iSourceHeight ); 99 #if PIC_CROPPING100 99 m_acTEncTopList[iViewIdx]->setCroppingMode ( m_croppingMode ); 101 100 m_acTEncTopList[iViewIdx]->setCropLeft ( m_cropLeft ); … … 103 102 m_acTEncTopList[iViewIdx]->setCropTop ( m_cropTop ); 104 103 m_acTEncTopList[iViewIdx]->setCropBottom ( m_cropBottom ); 105 #endif106 104 m_acTEncTopList[iViewIdx]->setFrameToBeEncoded ( m_iFrameToBeEncoded ); 107 105 m_acTEncTopList[iViewIdx]->setViewId ( iViewIdx ); … … 138 136 m_acTEncTopList[iViewIdx]->setGopList ( m_GOPListsMvc[iViewIdx] ); 139 137 m_acTEncTopList[iViewIdx]->setExtraRPSs ( m_extraRPSs[iViewIdx] ); 140 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER141 138 for(Int i = 0; i < MAX_TLAYER; i++) 142 139 { … … 144 141 m_acTEncTopList[iViewIdx]->setMaxDecPicBuffering ( m_maxDecPicBuffering[iViewIdx][i], i ); 145 142 } 146 #else147 m_acTEncTopList[iViewIdx]->setNumReorderFrames ( m_numReorderFrames );148 m_acTEncTopList[iViewIdx]->setMaxNumberOfReferencePictures ( m_maxNumberOfReferencePictures );149 #endif150 143 for( UInt uiLoop = 0; uiLoop < MAX_TLAYER; ++uiLoop ) 151 144 { … … 157 150 m_acTEncTopList[iViewIdx]->setPad ( m_aiPad ); 158 151 159 #if H0566_TLA160 152 m_acTEncTopList[iViewIdx]->setMaxTempLayer ( m_maxTempLayer[iViewIdx] ); 161 #else162 m_acTEncTopList[iViewIdx]->setTLayering ( m_bTLayering );163 m_acTEncTopList[iViewIdx]->setTLayerSwitchingFlag ( m_abTLayerSwitchingFlag );164 #endif165 153 166 154 m_acTEncTopList[iViewIdx]->setDisInter4x4 ( m_bDisInter4x4); … … 176 164 m_acTEncTopList[iViewIdx]->setLoopFilterBetaOffset ( m_loopFilterBetaOffsetDiv2 ); 177 165 m_acTEncTopList[iViewIdx]->setLoopFilterTcOffset ( m_loopFilterTcOffsetDiv2 ); 178 #if DBL_CONTROL179 166 m_acTEncTopList[iViewIdx]->setDeblockingFilterControlPresent( m_DeblockingFilterControlPresent); 180 #endif181 167 182 168 //====== Motion search ======== … … 201 187 #if LOSSLESS_CODING 202 188 Int lowestQP; 203 #if H0736_AVC_STYLE_QP_RANGE204 189 lowestQP = - ( (Int)(6*(g_uiBitDepth + g_uiBitIncrement - 8)) ); 205 #else206 lowestQP = 0;207 #endif208 190 if ((m_iMaxDeltaQP == 0 ) && (m_aiQP[0] == lowestQP) && (m_useLossless == true)) 209 191 { … … 260 242 m_acTEncTopList[iViewIdx]->setdQPs ( m_aidQP ); 261 243 m_acTEncTopList[iViewIdx]->setUseRDOQ ( m_abUseRDOQ[0] ); 262 #if !PIC_CROPPING263 m_acTEncTopList[iViewIdx]->setUsePAD ( m_bUsePAD );264 #endif265 244 m_acTEncTopList[iViewIdx]->setQuadtreeTULog2MaxSize ( m_uiQuadtreeTULog2MaxSize ); 266 245 m_acTEncTopList[iViewIdx]->setQuadtreeTULog2MinSize ( m_uiQuadtreeTULog2MinSize ); … … 269 248 m_acTEncTopList[iViewIdx]->setUseFastEnc ( m_bUseFastEnc ); 270 249 m_acTEncTopList[iViewIdx]->setUseEarlyCU ( m_bUseEarlyCU ); 271 #if FAST_DECISION_FOR_MRG_RD_COST272 250 m_acTEncTopList[iViewIdx]->setUseFastDecisionForMerge ( m_useFastDecisionForMerge ); 273 #endif274 251 m_acTEncTopList[iViewIdx]->setUseCbfFastMode ( m_bUseCbfFastMode ); 275 252 #if HHI_INTERVIEW_SKIP … … 304 281 m_acTEncTopList[iViewIdx]->setSliceArgument ( m_iSliceArgument * ( iNumPartInCU >> ( m_iSliceGranularity << 1 ) ) ); 305 282 } 306 #if FIXED_NUMBER_OF_TILES_SLICE_MODE307 283 if(m_iSliceMode==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE) 308 284 { 309 285 m_acTEncTopList[iViewIdx]->setSliceArgument ( m_iSliceArgument ); 310 286 } 311 #endif312 287 m_acTEncTopList[iViewIdx]->setSliceGranularity ( m_iSliceGranularity ); 313 288 if(m_iSliceMode == 0 ) … … 327 302 m_acTEncTopList[iViewIdx]->setUseIVS ( m_bUseIVS ); 328 303 #endif 329 #if SAO_UNIT_INTERLEAVING330 304 m_acTEncTopList[iViewIdx]->setMaxNumOffsetsPerPic (m_maxNumOffsetsPerPic); 331 305 m_acTEncTopList[iViewIdx]->setSaoInterleavingFlag (m_saoInterleavingFlag); 332 #endif333 306 m_acTEncTopList[iViewIdx]->setPCMInputBitDepthFlag ( m_bPCMInputBitDepthFlag); 334 307 m_acTEncTopList[iViewIdx]->setPCMFilterDisableFlag ( m_bPCMFilterDisableFlag); … … 338 311 m_acTEncTopList[iViewIdx]->setColumnRowInfoPresent ( m_iColumnRowInfoPresent ); 339 312 m_acTEncTopList[iViewIdx]->setUniformSpacingIdr ( m_iUniformSpacingIdr ); 340 #if !REMOVE_TILE_DEPENDENCE341 m_acTEncTopList[iViewIdx]->setTileBoundaryIndependenceIdr( m_iTileBoundaryIndependenceIdr );342 #endif343 313 m_acTEncTopList[iViewIdx]->setNumColumnsMinus1 ( m_iNumColumnsMinus1 ); 344 314 m_acTEncTopList[iViewIdx]->setNumRowsMinus1 ( m_iNumRowsMinus1 ); … … 357 327 m_acTEncTopList[iViewIdx]->setMaxTileMarkerOffset ( m_dMaxTileMarkerOffset ); 358 328 m_acTEncTopList[iViewIdx]->setTileBehaviorControlPresentFlag( m_iTileBehaviorControlPresentFlag ); 359 #if !REMOVE_TILE_DEPENDENCE360 if(m_iTileBoundaryIndependenceIdr == 0 || uiTilesCount == 1)361 #else362 329 if(uiTilesCount == 1) 363 #endif364 330 { 365 331 m_bLFCrossTileBoundaryFlag = true; … … 376 342 m_acTEncTopList[iViewIdx]->setUseScalingListId ( m_useScalingListId ); 377 343 m_acTEncTopList[iViewIdx]->setScalingListFile ( m_scalingListFile ); 378 #if MULTIBITS_DATA_HIDING379 344 m_acTEncTopList[iViewIdx]->setSignHideFlag(m_signHideFlag); 380 345 m_acTEncTopList[iViewIdx]->setTSIG(m_signHidingThreshold); 381 #endif 382 383 #if LCU_SYNTAX_ALF 346 384 347 if(uiTilesCount > 1) 385 348 { … … 389 352 m_acTEncTopList[iViewIdx]->setALFParamInSlice ( m_bALFParamInSlice); 390 353 m_acTEncTopList[iViewIdx]->setALFPicBasedEncode ( m_bALFPicBasedEncode); 391 #endif392 354 393 355 //====== Depth tools ======== … … 445 407 m_acTEncDepthTopList[iViewIdx]->setSourceWidth ( m_iSourceWidth ); 446 408 m_acTEncDepthTopList[iViewIdx]->setSourceHeight ( m_iSourceHeight ); 447 #if PIC_CROPPING448 409 m_acTEncDepthTopList[iViewIdx]->setCroppingMode ( m_croppingMode ); 449 410 m_acTEncDepthTopList[iViewIdx]->setCropLeft ( m_cropLeft ); … … 451 412 m_acTEncDepthTopList[iViewIdx]->setCropTop ( m_cropTop ); 452 413 m_acTEncDepthTopList[iViewIdx]->setCropBottom ( m_cropBottom ); 453 #endif454 414 m_acTEncDepthTopList[iViewIdx]->setFrameToBeEncoded ( m_iFrameToBeEncoded ); 455 415 m_acTEncDepthTopList[iViewIdx]->setViewId ( iViewIdx ); … … 480 440 m_acTEncDepthTopList[iViewIdx]->setGopList ( m_GOPListsMvc[iViewIdx] ); 481 441 m_acTEncDepthTopList[iViewIdx]->setExtraRPSs ( m_extraRPSs[iViewIdx] ); 482 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER483 442 for(Int i = 0; i < MAX_TLAYER; i++) 484 443 { … … 486 445 m_acTEncDepthTopList[iViewIdx]->setMaxDecPicBuffering ( m_maxDecPicBuffering[iViewIdx][i], i ); 487 446 } 488 #else489 m_acTEncDepthTopList[iViewIdx]->setNumReorderFrames ( m_numReorderFrames );490 m_acTEncDepthTopList[iViewIdx]->setMaxNumberOfReferencePictures ( m_maxNumberOfReferencePictures );491 #endif492 447 for( UInt uiLoop = 0; uiLoop < MAX_TLAYER; ++uiLoop ) 493 448 { … … 499 454 m_acTEncDepthTopList[iViewIdx]->setPad ( m_aiPad ); 500 455 501 #if H0566_TLA502 456 m_acTEncDepthTopList[iViewIdx]->setMaxTempLayer ( m_maxTempLayer[iViewIdx] ); 503 #else504 m_acTEncDepthTopList[iViewIdx]->setTLayering ( m_bTLayering );505 m_acTEncDepthTopList[iViewIdx]->setTLayerSwitchingFlag ( m_abTLayerSwitchingFlag );506 #endif507 457 508 458 m_acTEncDepthTopList[iViewIdx]->setDisInter4x4 ( m_bDisInter4x4); … … 518 468 m_acTEncDepthTopList[iViewIdx]->setLoopFilterBetaOffset ( m_loopFilterBetaOffsetDiv2 ); 519 469 m_acTEncDepthTopList[iViewIdx]->setLoopFilterTcOffset ( m_loopFilterTcOffsetDiv2 ); 520 #if DBL_CONTROL521 470 m_acTEncDepthTopList[iViewIdx]->setDeblockingFilterControlPresent( m_DeblockingFilterControlPresent); 522 #endif523 471 524 472 //====== Motion search ======== … … 560 508 m_acTEncDepthTopList[iViewIdx]->setdQPs ( m_aidQPdepth ); 561 509 m_acTEncDepthTopList[iViewIdx]->setUseRDOQ ( m_abUseRDOQ[1] ); 562 #if !PIC_CROPPING563 m_acTEncDepthTopList[iViewIdx]->setUsePAD ( m_bUsePAD );564 #endif565 510 m_acTEncDepthTopList[iViewIdx]->setQuadtreeTULog2MaxSize ( m_uiQuadtreeTULog2MaxSize ); 566 511 m_acTEncDepthTopList[iViewIdx]->setQuadtreeTULog2MinSize ( m_uiQuadtreeTULog2MinSize ); … … 569 514 m_acTEncDepthTopList[iViewIdx]->setUseFastEnc ( m_bUseFastEnc ); 570 515 m_acTEncDepthTopList[iViewIdx]->setUseEarlyCU ( m_bUseEarlyCU ); 571 #if FAST_DECISION_FOR_MRG_RD_COST572 516 m_acTEncDepthTopList[iViewIdx]->setUseFastDecisionForMerge ( m_useFastDecisionForMerge ); 573 #endif574 517 m_acTEncDepthTopList[iViewIdx]->setUseCbfFastMode ( m_bUseCbfFastMode ); 575 518 #if HHI_INTERVIEW_SKIP … … 633 576 m_acTEncDepthTopList[iViewIdx]->setSliceArgument ( m_iSliceArgument * ( iNumPartInCU >> ( m_iSliceGranularity << 1 ) ) ); 634 577 } 635 #if FIXED_NUMBER_OF_TILES_SLICE_MODE636 578 if(m_iSliceMode==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE) 637 579 { 638 580 m_acTEncDepthTopList[iViewIdx]->setSliceArgument ( m_iSliceArgument ); 639 581 } 640 #endif641 582 m_acTEncDepthTopList[iViewIdx]->setSliceGranularity ( m_iSliceGranularity ); 642 583 if(m_iSliceMode == 0 ) … … 652 593 m_acTEncDepthTopList[iViewIdx]->setUseIVS ( m_bUseIVS ); 653 594 #endif 654 #if SAO_UNIT_INTERLEAVING655 595 m_acTEncDepthTopList[iViewIdx]->setMaxNumOffsetsPerPic (m_maxNumOffsetsPerPic); 656 596 m_acTEncDepthTopList[iViewIdx]->setSaoInterleavingFlag (m_saoInterleavingFlag); 657 #endif658 597 m_acTEncDepthTopList[iViewIdx]->setPCMInputBitDepthFlag ( m_bPCMInputBitDepthFlag); 659 598 m_acTEncDepthTopList[iViewIdx]->setPCMFilterDisableFlag ( m_bPCMFilterDisableFlag); … … 663 602 m_acTEncDepthTopList[iViewIdx]->setColumnRowInfoPresent ( m_iColumnRowInfoPresent ); 664 603 m_acTEncDepthTopList[iViewIdx]->setUniformSpacingIdr ( m_iUniformSpacingIdr ); 665 #if !REMOVE_TILE_DEPENDENCE666 m_acTEncDepthTopList[iViewIdx]->setTileBoundaryIndependenceIdr( m_iTileBoundaryIndependenceIdr );667 #endif668 604 m_acTEncDepthTopList[iViewIdx]->setNumColumnsMinus1 ( m_iNumColumnsMinus1 ); 669 605 m_acTEncDepthTopList[iViewIdx]->setNumRowsMinus1 ( m_iNumRowsMinus1 ); … … 682 618 m_acTEncDepthTopList[iViewIdx]->setMaxTileMarkerOffset ( m_dMaxTileMarkerOffset ); 683 619 m_acTEncDepthTopList[iViewIdx]->setTileBehaviorControlPresentFlag( m_iTileBehaviorControlPresentFlag ); 684 #if !REMOVE_TILE_DEPENDENCE685 if(m_iTileBoundaryIndependenceIdr == 0 || uiTilesCount == 1)686 #else687 620 if(uiTilesCount == 1) 688 #endif689 621 { 690 622 m_bLFCrossTileBoundaryFlag = true; … … 701 633 m_acTEncDepthTopList[iViewIdx]->setUseScalingListId ( m_useScalingListId ); 702 634 m_acTEncDepthTopList[iViewIdx]->setScalingListFile ( m_scalingListFile ); 703 #if MULTIBITS_DATA_HIDING704 635 m_acTEncDepthTopList[iViewIdx]->setSignHideFlag(m_signHideFlag); 705 636 m_acTEncDepthTopList[iViewIdx]->setTSIG(m_signHidingThreshold); 706 #endif 707 708 #if LCU_SYNTAX_ALF 637 709 638 if(uiTilesCount > 1) 710 639 { … … 714 643 m_acTEncDepthTopList[iViewIdx]->setALFParamInSlice ( m_bALFParamInSlice); 715 644 m_acTEncDepthTopList[iViewIdx]->setALFPicBasedEncode ( m_bALFPicBasedEncode); 716 #endif717 645 718 646 //====== Depth tools ======== … … 1325 1253 if (m_pchReconFileList[iViewIdx]) 1326 1254 { 1327 #if PIC_CROPPING1328 1255 m_acTVideoIOYuvReconFileList[iViewIdx]->write( pcPicYuvRec, m_cropLeft, m_cropRight, m_cropTop, m_cropBottom ); 1329 #else1330 m_acTVideoIOYuvReconFileList[iViewIdx]->write( pcPicYuvRec, m_aiPad );1331 #endif1332 1256 } 1333 1257 } … … 1336 1260 if (m_pchDepthReconFileList[iViewIdx]) 1337 1261 { 1338 #if PIC_CROPPING1339 1262 m_acTVideoIOYuvDepthReconFileList[iViewIdx]->write( pcPicYuvRec, m_cropLeft, m_cropRight, m_cropTop, m_cropBottom ); 1340 #else1341 m_acTVideoIOYuvDepthReconFileList[iViewIdx]->write( pcPicYuvRec, m_aiPad );1342 #endif1343 1263 } 1344 1264 } … … 1393 1313 { 1394 1314 case NAL_UNIT_CODED_SLICE: 1395 #if H0566_TLA1396 1315 #if !QC_REM_IDV_B0046 1397 1316 case NAL_UNIT_CODED_SLICE_IDV: … … 1399 1318 case NAL_UNIT_CODED_SLICE_TLA: 1400 1319 case NAL_UNIT_CODED_SLICE_CRA: 1401 #else1402 case NAL_UNIT_CODED_SLICE_DATAPART_A:1403 case NAL_UNIT_CODED_SLICE_DATAPART_B:1404 case NAL_UNIT_CODED_SLICE_CDR:1405 #endif1406 1320 case NAL_UNIT_CODED_SLICE_IDR: 1407 1321 case NAL_UNIT_SPS: -
branches/HTM-5.1-dev0/source/App/TAppRenderer/TAppRendererTop.cpp
r210 r294 429 429 // Write Output 430 430 431 #if PIC_CROPPING432 431 m_apcTVideoIOYuvSynthOutput[m_bSweep ? 0 : iSynthViewIdx]->write( pcPicYuvSynthOut, 0, 0, 0, 0 ); 433 #else434 m_apcTVideoIOYuvSynthOutput[m_bSweep ? 0 : iSynthViewIdx]->write( pcPicYuvSynthOut, aiPad );435 #endif436 432 } 437 433 iFrame++; … … 665 661 666 662 // Write Output 667 #if PIC_CROPPING668 663 m_apcTVideoIOYuvSynthOutput[m_bSweep ? 0 : iModelNum]->write( pcPicYuvSynthOut, 0 ,0 ,0, 0 ); 669 #else670 m_apcTVideoIOYuvSynthOutput[m_bSweep ? 0 : iModelNum]->write( pcPicYuvSynthOut, aiPad );671 #endif672 664 } 673 665 } … … 867 859 868 860 // Write Output 869 #if PIC_CROPPING870 861 m_apcTVideoIOYuvSynthOutput[m_bSweep ? 0 : iSynthViewIdx]->write( pcPicYuvSynthOut, 0, 0, 0, 0 ); 871 #else872 m_apcTVideoIOYuvSynthOutput[m_bSweep ? 0 : iSynthViewIdx]->write( pcPicYuvSynthOut, aiPad );873 #endif874 862 } 875 863 iFrame++; … … 998 986 999 987 // Write Output 1000 #if PIC_CROPPING1001 988 m_apcTVideoIOYuvSynthOutput[iViewIdx-1]->write( pcPicYuvSynthOut, 0, 0, 0 ); 1002 #else1003 m_apcTVideoIOYuvSynthOutput[iViewIdx-1]->write( pcPicYuvSynthOut, aiPad );1004 #endif1005 989 1006 990 } -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/CommonDef.h
r292 r294 437 437 438 438 // Explicit temporal layer QP offset 439 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER440 439 #define MAX_TLAYER 8 ///< max number of temporal layer 441 #else442 #define MAX_TLAYER 4 ///< max number of temporal layer443 #endif444 440 #define HB_LAMBDA_FOR_LDC 1 ///< use of B-style lambda for non-key pictures in low-delay mode 445 441 … … 466 462 #define MAX_NUM_REF_PICS 16 467 463 468 #if !NAL_REF_FLAG469 enum NalRefIdc470 {471 NAL_REF_IDC_PRIORITY_LOWEST = 0,472 NAL_REF_IDC_PRIORITY_LOW,473 NAL_REF_IDC_PRIORITY_HIGH,474 NAL_REF_IDC_PRIORITY_HIGHEST475 };476 #endif477 464 478 465 enum NalUnitType … … 480 467 NAL_UNIT_UNSPECIFIED_0 = 0, 481 468 NAL_UNIT_CODED_SLICE, 482 #if H0566_TLA483 469 #if QC_REM_IDV_B0046 484 470 NAL_UNIT_RESERVED, … … 488 474 NAL_UNIT_CODED_SLICE_TLA, 489 475 NAL_UNIT_CODED_SLICE_CRA, 490 #else491 NAL_UNIT_CODED_SLICE_DATAPART_A,492 NAL_UNIT_CODED_SLICE_DATAPART_B,493 NAL_UNIT_CODED_SLICE_CDR,494 #endif495 476 NAL_UNIT_CODED_SLICE_IDR, 496 477 NAL_UNIT_SEI, -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/ContextModel.cpp
r56 r294 56 56 Void ContextModel::init( Int qp, Int initValue ) 57 57 { 58 #if H0736_AVC_STYLE_QP_RANGE59 58 qp = Clip3(0, 51, qp); 60 #endif61 59 62 #if CABAC_LINEAR_INIT63 60 Int slope = (initValue>>4)*5 - 45; 64 61 Int offset = ((initValue&15)<<3)-16; … … 66 63 UInt mpState = (initState >= 64 ); 67 64 m_ucState = ( (mpState? (initState - 64):(63 - initState)) <<1) + mpState; 68 #else69 Int m = m_slopes[initValue>>4];70 Int n = initValue & 15;71 72 Int val = max( 0, min( 3839, (n<<8) + m * (qp-26) + 128 ) );73 val -= 1920;74 Int valMps = val >= 0;75 val = ( val ^ (val>>11) ) + 128;76 Int segmentIdx = val >> 8;77 Int pStateIdx = m_accumulatedSegOffset[segmentIdx] + ( (val&255) * m_segOffset[segmentIdx] >> 8);78 79 m_ucState = (pStateIdx<<1) + valMps;80 #endif81 65 } 82 66 … … 143 127 #endif 144 128 }; 145 #if !CABAC_LINEAR_INIT146 const Int ContextModel::m_slopes[16] = { -239, -143, -85, -51, -31, -19, -11, 0, 11, 19, 31, 51, 85, 143, 239, 399 };147 const Int ContextModel::m_segOffset[8] = { 6, 7, 5, 7, 10, 14, 16, 1 };148 const Int ContextModel::m_accumulatedSegOffset[8] = { -3, 3, 10, 15, 22, 32, 46, 62 };149 #endif150 129 //! \} -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/ContextModel.h
r56 r294 103 103 static UChar m_nextState[128][2]; 104 104 #endif 105 #if !CABAC_LINEAR_INIT106 static const Int m_slopes[16];107 static const Int m_segOffset[8];108 static const Int m_accumulatedSegOffset[8];109 #endif110 105 #if CABAC_INIT_FLAG 111 106 UInt m_binsCoded; -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/ContextTables.h
r287 r294 57 57 58 58 #define NUM_MERGE_FLAG_EXT_CTX 1 ///< number of context models for merge flag of merge extended 59 #if MRG_IDX_CTX_RED60 59 #define NUM_MERGE_IDX_EXT_CTX 1 ///< number of context models for merge index of merge extended 61 #else62 #define NUM_MERGE_IDX_EXT_CTX 4 ///< number of context models for merge index of merge extended63 #endif64 60 65 61 #if HHI_INTER_VIEW_RESIDUAL_PRED … … 69 65 #define NUM_ALF_CTRL_FLAG_CTX 1 ///< number of context models for ALF control flag 70 66 #define NUM_PART_SIZE_CTX 4 ///< number of context models for partition size 71 #if AMP_CTX72 67 #define NUM_CU_AMP_CTX 1 ///< number of context models for partition size (AMP) 73 #else74 #define NUM_CU_X_POS_CTX 2 ///< number of context models for partition size (AMP)75 #define NUM_CU_Y_POS_CTX 2 ///< number of context models for partition size (AMP)76 #endif77 68 #define NUM_PRED_MODE_CTX 1 ///< number of context models for prediction mode 78 69 … … 95 86 #define NUM_SIG_FLAG_CTX_LUMA 27 ///< number of context models for luma sig flag 96 87 #define NUM_SIG_FLAG_CTX_CHROMA 21 ///< number of context models for chroma sig flag 97 #if LAST_CTX_REDUCTION98 88 #define NUM_CTX_LAST_FLAG_XY 15 ///< number of context models for last coefficient position 99 #else 100 #define NUM_CTX_LAST_FLAG_XY 18 ///< number of context models for last coefficient position 101 #endif 102 103 #if LEVEL_CTX_LUMA_RED 89 104 90 #define NUM_ONE_FLAG_CTX 24 ///< number of context models for greater than 1 flag 105 91 #define NUM_ONE_FLAG_CTX_LUMA 16 ///< number of context models for greater than 1 flag of luma 106 92 #define NUM_ONE_FLAG_CTX_CHROMA 8 ///< number of context models for greater than 1 flag of chroma 107 #if RESTRICT_GR1GR2FLAG_NUMBER108 93 #define NUM_ABS_FLAG_CTX 6 ///< number of context models for greater than 2 flag 109 94 #define NUM_ABS_FLAG_CTX_LUMA 4 ///< number of context models for greater than 2 flag of luma 110 95 #define NUM_ABS_FLAG_CTX_CHROMA 2 ///< number of context models for greater than 2 flag of chroma 111 #else112 #define NUM_ABS_FLAG_CTX 18 ///< number of context models for greater than 2 flag113 #define NUM_ABS_FLAG_CTX_LUMA 12 ///< number of context models for greater than 2 flag of luma114 #define NUM_ABS_FLAG_CTX_CHROMA 6 ///< number of context models for greater than 2 flag of chroma115 #endif116 #else117 #define NUM_ONE_FLAG_CTX 32 ///< number of context models for greater than 1 flag118 #define NUM_ONE_FLAG_CTX_LUMA 24 ///< number of context models for greater than 1 flag of luma119 #define NUM_ONE_FLAG_CTX_CHROMA 8 ///< number of context models for greater than 1 flag of chroma120 #if RESTRICT_GR1GR2FLAG_NUMBER121 #define NUM_ABS_FLAG_CTX 8 ///< number of context models for greater than 2 flag122 #define NUM_ABS_FLAG_CTX_LUMA 6 ///< number of context models for greater than 2 flag of luma123 #define NUM_ABS_FLAG_CTX_CHROMA 2 ///< number of context models for greater than 2 flag of chroma124 #else125 #define NUM_ABS_FLAG_CTX 24 ///< number of context models for greater than 2 flag126 #define NUM_ABS_FLAG_CTX_LUMA 18 ///< number of context models for greater than 2 flag of luma127 #define NUM_ABS_FLAG_CTX_CHROMA 6 ///< number of context models for greater than 2 flag of chroma128 #endif129 #endif130 96 131 97 #define NUM_MVP_IDX_CTX 2 ///< number of context models for MVP index … … 138 104 #define NUM_SAO_UVLC_CTX 2 ///< number of context models for SAO UVLC 139 105 #define NUM_SAO_SVLC_CTX 3 ///< number of context models for SAO SVLC 140 #if SAO_UNIT_INTERLEAVING141 106 #define NUM_SAO_RUN_CTX 3 ///< number of context models for AO SVLC (filter coeff.) 142 107 #define NUM_SAO_MERGE_LEFT_FLAG_CTX 3 ///< number of context models for AO SVLC (filter coeff.) 143 108 #define NUM_SAO_MERGE_UP_FLAG_CTX 1 ///< number of context models for AO SVLC (filter coeff.) 144 109 #define NUM_SAO_TYPE_IDX_CTX 2 ///< number of context models for AO SVLC (filter coeff.) 145 #endif146 #if CABAC_LINEAR_INIT147 110 #define CNU 154 ///< dummy initialization value for unused context models 'Context model Not Used' 148 #else149 #define CNU 119 ///< dummy initialization value for unused context models 'Context model Not Used'150 #endif151 111 152 112 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX … … 181 141 182 142 // initial probability for split flag 183 #if CABAC_LINEAR_INIT184 143 static const UChar 185 144 INIT_SPLIT_FLAG[3][NUM_SPLIT_FLAG_CTX] = … … 227 186 INIT_MERGE_IDX_EXT[3][NUM_MERGE_IDX_EXT_CTX] = 228 187 { 229 #if MRG_IDX_CTX_RED230 188 { CNU, }, 231 189 { 122, }, 232 190 { 137, }, 233 #else234 { CNU, CNU, CNU, CNU, },235 { 122, 138, 153, 182, },236 { 137, 139, 154, 139, },237 #endif238 191 }; 239 192 … … 256 209 }; 257 210 258 #if AMP_CTX259 211 static const UChar 260 212 INIT_CU_AMP_POS[3][NUM_CU_AMP_CTX] = … … 264 216 { 154, }, 265 217 }; 266 #else267 static const UChar268 INIT_CU_X_POS[3][NUM_CU_X_POS_CTX] =269 {270 { CNU, CNU, },271 { 154, 139, },272 { 154, 139, },273 };274 275 static const UChar276 INIT_CU_Y_POS[3][NUM_CU_Y_POS_CTX] =277 {278 { CNU, CNU, },279 { 154, 154, },280 { 154, 139, },281 };282 #endif283 218 284 219 static const UChar … … 358 293 }; 359 294 360 #if LAST_CTX_REDUCTION361 295 static const UChar 362 296 INIT_LAST[3][2*NUM_CTX_LAST_FLAG_XY] = … … 372 306 }, 373 307 }; 374 #else375 static const UChar376 INIT_LAST[3][2*NUM_CTX_LAST_FLAG_XY] =377 {378 { 110, 110, 124, 110, 140, 111, 124, 125, 111, 127, 111, 138, 111, 156, 127, 127, 111, 94,379 108, 123, 63, 63, 139, 124, 93, 108, 125, 111, 110, 63, CNU, CNU, CNU, CNU, CNU, CNU,380 },381 { 125, 110, 124, 110, 125, 110, 153, 125, 111, 111, 110, 153, 139, 111, 111, 111, 125, 139,382 108, 123, 108, 152, 124, 94, 123, 137, 139, 110, 110, 154, CNU, CNU, CNU, CNU, CNU, CNU,383 },384 { 125, 110, 124, 110, 125, 110, 153, 125, 111, 111, 110, 153, 139, 111, 111, 111, 125, 139,385 108, 123, 93, 152, 124, 94, 123, 152, 139, 110, 110, 154, CNU, CNU, CNU, CNU, CNU, CNU,386 },387 };388 #endif389 308 390 309 static const UChar … … 410 329 }; 411 330 412 #if LEVEL_CTX_LUMA_RED413 331 static const UChar 414 332 INIT_ONE_FLAG[3][NUM_ONE_FLAG_CTX] = … … 419 337 }; 420 338 421 #if RESTRICT_GR1GR2FLAG_NUMBER422 339 static const UChar 423 340 INIT_ABS_FLAG[3][NUM_ABS_FLAG_CTX] = … … 427 344 { 107, 167, 91, 107, 107, 167, }, 428 345 }; 429 #else430 static const UChar431 INIT_ABS_FLAG[3][NUM_ABS_FLAG_CTX] =432 {433 { 138, 139, 111, 153, 139, 111, 136, 167, 139, 167, 153, 139, 152, 139, 140, 152, 184, 141, },434 { 107, 153, 125, 167, 153, 140, 91, 137, 153, 122, 167, 139, 107, 153, 140, 167, 183, 140, },435 { 107, 153, 125, 167, 153, 140, 91, 137, 153, 107, 167, 139, 107, 153, 140, 167, 183, 140, },436 };437 #endif438 #else439 static const UChar440 INIT_ONE_FLAG[3][NUM_ONE_FLAG_CTX] =441 {442 { 140, 92, 137, 138, 140, 152, 138, 139, 126, 168, 139, 139, 153, 74, 149, 92, 139, 107, 122, 152, 110, 93, 152, 138, 140, 179, 166, 182, 140, 227, 122, 197, },443 { 154, 196, 196, 167, 154, 152, 167, 182, 155, 139, 139, 139, 182, 134, 149, 136, 153, 121, 136, 137, 139, 122, 152, 167, 169, 194, 166, 167, 154, 167, 137, 182, },444 { 154, 196, 167, 167, 154, 152, 167, 182, 155, 139, 139, 139, 182, 134, 149, 136, 153, 121, 136, 122, 139, 107, 152, 152, 169, 208, 166, 167, 154, 152, 167, 182, },445 };446 447 #if RESTRICT_GR1GR2FLAG_NUMBER448 static const UChar449 INIT_ABS_FLAG[3][NUM_ABS_FLAG_CTX] =450 {451 { 138, 153, 139, 136, 167, 153, 152, 152, },452 { 107, 167, 139, 91, 122, 152, 107, 167, },453 { 107, 167, 139, 91, 107, 93, 107, 167, },454 };455 #else456 static const UChar457 INIT_ABS_FLAG[3][NUM_ABS_FLAG_CTX] =458 {459 { 138, 139, 111, 153, 139, 111, 139, 125, 111, 136, 167, 139, 167, 153, 139, 153, 139, 110, 152, 139, 140, 152, 184, 141, },460 { 107, 153, 125, 167, 153, 140, 139, 154, 155, 91, 137, 153, 122, 167, 139, 152, 138, 139, 107, 153, 140, 167, 183, 140, },461 { 107, 153, 125, 167, 153, 140, 139, 154, 155, 91, 137, 153, 107, 167, 139, 93, 138, 139, 107, 153, 140, 167, 183, 140, },462 };463 #endif464 #endif465 346 466 347 static const UChar … … 520 401 }; 521 402 522 #if SAO_UNIT_INTERLEAVING523 403 static const UChar 524 404 INIT_SAO_MERGE_LEFT_FLAG[3][NUM_SAO_MERGE_LEFT_FLAG_CTX] = … … 544 424 { 200, 140, }, 545 425 }; 546 #endif547 426 548 427 static const UChar … … 553 432 { CNU, 153, 138, 138, CNU, CNU, CNU, CNU, CNU, CNU, }, 554 433 }; 555 #else556 static const UChar557 INIT_SPLIT_FLAG[3][NUM_SPLIT_FLAG_CTX] =558 {559 {560 87, 74, 107,561 562 },563 {564 84, 103, 105,565 566 },567 {568 84, 103, 105,569 570 },571 };572 573 // initial probability for skip flag574 static const UChar575 INIT_SKIP_FLAG[3][NUM_SKIP_FLAG_CTX] =576 {577 {578 CNU, CNU, CNU,579 580 },581 {582 165, 168, 154,583 584 },585 {586 165, 168, 154,587 588 },589 };590 591 // initial probability for skip flag592 static const UChar593 INIT_ALF_CTRL_FLAG[3][NUM_ALF_CTRL_FLAG_CTX] =594 {595 {596 153,597 598 },599 {600 87,601 602 },603 {604 135,605 606 },607 };608 609 // initial probability for merge flag610 static const UChar611 INIT_MERGE_FLAG_EXT[3][NUM_MERGE_FLAG_EXT_CTX] =612 {613 {614 CNU,615 616 },617 {618 72,619 620 },621 {622 119,623 624 },625 };626 627 static const UChar628 INIT_MERGE_IDX_EXT[3][NUM_MERGE_IDX_EXT_CTX] =629 {630 #if MRG_IDX_CTX_RED631 {632 CNU,633 634 },635 {636 100,637 638 },639 {640 116,641 },642 #else643 {644 CNU, CNU, CNU, CNU,645 646 },647 {648 100, 86, 102, 133,649 650 },651 {652 116, 87, 119, 103,653 654 },655 #endif656 };657 658 // initial probability for PU size659 static const UChar660 INIT_PART_SIZE[3][NUM_PART_SIZE_CTX] =661 {662 {663 167, CNU, CNU, CNU,664 665 },666 {667 119, 87, CNU, CNU,668 669 },670 {671 119, 87, CNU, CNU,672 673 },674 };675 #if AMP_CTX676 static const UChar677 INIT_CU_AMP_POS[3][NUM_CU_AMP_CTX] =678 {679 {680 CNU,681 },682 {683 119,684 },685 {686 119,687 },688 };689 #else690 // initial probability for AMP split position (X)691 static const UChar692 INIT_CU_X_POS[3][NUM_CU_X_POS_CTX] =693 {694 {695 CNU, CNU,696 697 },698 {699 119, 103,700 701 },702 {703 119, 103,704 705 },706 };707 708 // initial probability for AMP split position (Y)709 static const UChar710 INIT_CU_Y_POS[3][NUM_CU_Y_POS_CTX] =711 {712 {713 CNU, CNU,714 715 },716 {717 119, 119,718 719 },720 {721 119, 103,722 723 },724 };725 #endif726 // initial probability for prediction mode727 static const UChar728 INIT_PRED_MODE[3][NUM_PRED_MODE_CTX] =729 {730 {731 CNU,732 733 },734 {735 114,736 737 },738 {739 98,740 741 },742 };743 744 // initial probability for intra direction of luma745 static const UChar746 INIT_INTRA_PRED_MODE[3][NUM_ADI_CTX] =747 {748 {749 167,750 751 },752 {753 119,754 755 },756 {757 150,758 759 },760 };761 762 // initial probability for intra direction of chroma763 static const UChar764 INIT_CHROMA_PRED_MODE[3][NUM_CHROMA_PRED_CTX] =765 {766 {767 53, 103,768 769 },770 {771 85, 87,772 773 },774 {775 101, 87,776 777 },778 };779 780 // initial probability for temporal direction781 static const UChar782 INIT_INTER_DIR[3][NUM_INTER_DIR_CTX] =783 {784 {785 CNU, CNU, CNU, CNU,786 787 },788 {789 CNU, CNU, CNU, CNU,790 791 },792 {793 41, 39, 38, 36,794 795 },796 };797 798 // initial probability for motion vector difference799 static const UChar800 INIT_MVD[3][NUM_MV_RES_CTX] =801 {802 {803 CNU, CNU,804 805 },806 {807 120, 166,808 809 },810 {811 135, 166,812 813 },814 };815 816 // initial probability for reference frame index817 static const UChar818 INIT_REF_PIC[3][NUM_REF_NO_CTX] =819 {820 {821 CNU, CNU, CNU, CNU,822 823 },824 {825 102, 118, 103, CNU,826 827 },828 {829 118, 118, 134, CNU,830 831 },832 };833 834 // initial probability for dQP835 static const UChar836 INIT_DQP[3][NUM_DELTA_QP_CTX] =837 {838 {839 CNU, CNU, CNU,840 841 },842 {843 CNU, CNU, CNU,844 845 },846 {847 CNU, CNU, CNU,848 849 },850 };851 852 static const UChar853 INIT_QT_CBF[3][2*NUM_QT_CBF_CTX] =854 {855 {856 73, 74, CNU, CNU, CNU,857 55, 86, 133, CNU, CNU,858 859 },860 {861 102, 89, CNU, CNU, CNU,862 114, 84, 117, CNU, CNU,863 864 },865 {866 102, 89, CNU, CNU, CNU,867 114, 68, 117, CNU, CNU,868 869 },870 };871 872 static const UChar873 INIT_QT_ROOT_CBF[3][NUM_QT_ROOT_CBF_CTX] =874 {875 {876 CNU,877 878 },879 {880 39,881 882 },883 {884 39,885 886 },887 };888 889 #if LAST_CTX_REDUCTION890 static const UChar891 INIT_LAST[3][2*NUM_CTX_LAST_FLAG_XY] =892 {893 {894 72, 72, 71, 72, 104, 89, 88, 89, 59, 73, 89, 106, 60, 59, 43,895 54, 70, 53, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU,896 },897 {898 57, 72, 55, 72, 57, 72, 88, 73, 73, 72, 103, 73, 89, 73, 57,899 54, 70, 54, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU,900 },901 {902 88, 72, 71, 72, 57, 72, 88, 73, 73, 72, 103, 73, 89, 73, 57,903 54, 70, 69, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU, CNU,904 },905 };906 #else907 static const UChar908 INIT_LAST[3][2*NUM_CTX_LAST_FLAG_XY] =909 {910 {911 72, 72, 71, 72, 104, 89, 71, 88, 89, 59, 73, 86, 89, 106, 60, 59, 43, 55,912 54, 70, 53, 53, 87, 71, 69, 54, 88, 73, 72, 53, CNU, CNU, CNU, CNU, CNU, CNU,913 914 },915 {916 57, 72, 71, 72, 57, 72, 102, 88, 73, 73, 72, 102, 103, 73, 89, 73, 57, 87,917 54, 70, 54, 101, 71, 55, 70, 116, 103, 72, 72, 119, CNU, CNU, CNU, CNU, CNU, CNU,918 919 },920 {921 88, 72, 71, 72, 57, 72, 102, 88, 73, 73, 72, 118, 103, 73, 89, 73, 57, 87,922 54, 70, 69, 85, 71, 55, 70, 85, 103, 72, 72, 119, CNU, CNU, CNU, CNU, CNU, CNU,923 924 },925 };926 #endif927 928 static const UChar929 INIT_SIG_CG_FLAG[3][2 * NUM_SIG_CG_FLAG_CTX] =930 {931 {932 83, 122,933 98, 121,934 935 },936 {937 99, 120,938 67, 119,939 940 },941 {942 99, 120,943 67, 119,944 945 },946 };947 948 static const UChar949 INIT_SIG_FLAG[3][NUM_SIG_FLAG_CTX] =950 {951 {952 74, 73, 88, 72, 72, 55, 71, 54, 71, 88, 103, 71, 53, 87, 134, 86, 84, 70, 68, 89, 90, 84, 88, 74, 130, 118, 88,953 120, 87, 149, 70, 52, 118, 133, 116, 114, 129, 132, 162, 115, 51, 115, 66, 120, 74, 115, 87, 89,954 },955 {956 152, 119, 103, 118, 87, 70, 70, 53, 118, 134, 118, 101, 68, 85, 101, 116, 100, 68, 67, 136, 168, 147, 150, 120, 115, 118, 119,957 136, 102, 70, 53, 67, 117, 102, 117, 115, 114, 84, 115, 99, 100, 83, 114, 152, 168, 131, 150, 120,958 },959 {960 152, 119, 103, 118, 87, 70, 70, 53, 71, 103, 118, 101, 68, 85, 101, 116, 116, 68, 67, 152, 168, 147, 150, 120, 115, 118, 119,961 136, 102, 86, 84, 67, 117, 102, 117, 115, 99, 100, 115, 99, 100, 83, 114, 152, 152, 131, 150, 120,962 },963 };964 965 #if LEVEL_CTX_LUMA_RED966 static const UChar967 INIT_ONE_FLAG[3][NUM_ONE_FLAG_CTX] =968 {969 {970 104, 68, 116, 86, 104, 132, 86, 87, 102, 66, 114, 68, 87, 84, 100, 101,971 104, 130, 147, 149, 104, 196, 100, 165,972 },973 {974 119, 179, 179, 164, 119, 85, 117, 149, 133, 98, 114, 115, 118, 99, 115, 116,975 135, 146, 147, 164, 119, 148, 116, 133,976 },977 {978 119, 179, 148, 164, 119, 85, 117, 149, 133, 98, 114, 115, 118, 99, 115, 100,979 135, 177, 147, 164, 119, 132, 148, 149,980 },981 };982 983 #if RESTRICT_GR1GR2FLAG_NUMBER984 static const UChar985 INIT_ABS_FLAG[3][NUM_ABS_FLAG_CTX] =986 {987 {988 86, 102, 115, 117, 101, 101,989 },990 {991 84, 117, 83, 100, 84, 117,992 },993 {994 84, 117, 83, 84, 84, 117,995 },996 };997 #else998 static const UChar999 INIT_ABS_FLAG[3][NUM_ABS_FLAG_CTX] =1000 {1001 {1002 86, 103, 73, 102, 103, 73, 115, 117, 103, 117, 118, 103,1003 101, 103, 104, 101, 167, 121,1004 },1005 {1006 84, 102, 88, 117, 118, 104, 83, 116, 118, 100, 117, 87,1007 84, 118, 120, 117, 150, 120,1008 },1009 {1010 84, 102, 88, 117, 118, 104, 83, 116, 118, 84, 117, 87,1011 84, 118, 120, 117, 150, 120,1012 },1013 };1014 #endif1015 #else1016 static const UChar1017 INIT_ONE_FLAG[3][NUM_ONE_FLAG_CTX] =1018 {1019 {1020 104, 68, 116, 86, 104, 132, 86, 87, 105, 134, 87, 103, 102, 66, 114, 68, 87, 84, 100, 101, 72, 69, 101, 86,1021 104, 130, 147, 149, 104, 196, 100, 165,1022 },1023 {1024 119, 179, 179, 164, 119, 85, 117, 149, 136, 103, 103, 103, 133, 98, 114, 115, 118, 99, 115, 116, 87, 100, 85, 117,1025 135, 146, 147, 164, 119, 148, 116, 133,1026 },1027 {1028 119, 179, 148, 164, 119, 85, 117, 149, 136, 87, 103, 103, 133, 98, 114, 115, 118, 99, 115, 100, 87, 84, 85, 85,1029 135, 177, 147, 164, 119, 132, 148, 149,1030 },1031 };1032 1033 #if RESTRICT_GR1GR2FLAG_NUMBER1034 static const UChar1035 INIT_ABS_FLAG[3][NUM_ABS_FLAG_CTX] =1036 {1037 {1038 86, 102, 103, 115, 117, 102, 101, 101,1039 },1040 {1041 84, 117, 103, 83, 100, 85, 84, 117,1042 },1043 {1044 84, 117, 87, 83, 84, 69, 84, 117,1045 },1046 };1047 #else1048 static const UChar1049 INIT_ABS_FLAG[3][NUM_ABS_FLAG_CTX] =1050 {1051 {1052 86, 103, 73, 102, 103, 73, 103, 88, 89, 115, 117, 103, 117, 118, 103, 102, 103, 72,1053 101, 103, 104, 101, 167, 121,1054 },1055 {1056 84, 102, 88, 117, 118, 104, 103, 119, 136, 83, 116, 118, 100, 117, 87, 85, 86, 103,1057 84, 118, 120, 117, 150, 120,1058 },1059 {1060 84, 102, 88, 117, 118, 104, 87, 119, 136, 83, 116, 118, 84, 117, 87, 69, 86, 87,1061 84, 118, 120, 117, 150, 120,1062 },1063 };1064 #endif1065 #endif1066 // initial probability for motion vector predictor index1067 static const UChar1068 INIT_MVP_IDX[3][NUM_MVP_IDX_CTX] =1069 {1070 {1071 CNU, CNU,1072 1073 },1074 {1075 134, CNU,1076 1077 },1078 {1079 134, CNU,1080 1081 },1082 };1083 1084 // initial probability for ALF flag1085 static const UChar1086 INIT_ALF_FLAG[3][NUM_ALF_FLAG_CTX] =1087 {1088 {1089 118,1090 1091 },1092 {1093 102,1094 1095 },1096 {1097 102,1098 1099 },1100 };1101 1102 // initial probability for ALF side information (unsigned)1103 static const UChar1104 INIT_ALF_UVLC[3][NUM_ALF_UVLC_CTX] =1105 {1106 {1107 120, 119,1108 1109 },1110 {1111 119, 119,1112 1113 },1114 {1115 119, 119,1116 1117 },1118 };1119 1120 // initial probability for ALF side information (signed)1121 static const UChar1122 INIT_ALF_SVLC[3][NUM_ALF_SVLC_CTX] =1123 {1124 {1125 139, 119, 124,1126 1127 },1128 {1129 90, 119, 140,1130 1131 },1132 {1133 90, 119, 124,1134 1135 },1136 };1137 1138 // initial probability for SAO flag1139 static const UChar1140 INIT_SAO_FLAG[3][NUM_SAO_FLAG_CTX] =1141 {1142 {1143 119,1144 1145 },1146 {1147 102,1148 1149 },1150 {1151 102,1152 1153 },1154 };1155 1156 // initial probability for SAO side information (unsigned)1157 static const UChar1158 INIT_SAO_UVLC[3][NUM_SAO_UVLC_CTX] =1159 {1160 {1161 61, 104,1162 1163 },1164 {1165 168, 120,1166 1167 },1168 {1169 184, 120,1170 1171 },1172 };1173 1174 // initial probability for SAO side information (signed)1175 static const UChar1176 INIT_SAO_SVLC[3][NUM_SAO_SVLC_CTX] =1177 {1178 {1179 171, 119, 199,1180 1181 },1182 {1183 169, 119, 151,1184 1185 },1186 {1187 169, 119, 151,1188 1189 },1190 };1191 1192 #if SAO_UNIT_INTERLEAVING1193 static const UChar1194 INIT_SAO_MERGE_LEFT_FLAG[3][NUM_SAO_MERGE_LEFT_FLAG_CTX] =1195 {1196 {1197 118, 118, 118,1198 },1199 {1200 102, 102, 102,1201 },1202 {1203 102, 102, 102,1204 },1205 };1206 1207 static const UChar1208 INIT_SAO_MERGE_UP_FLAG[3][NUM_SAO_MERGE_UP_FLAG_CTX] =1209 {1210 {1211 109,1212 },1213 {1214 102,1215 },1216 {1217 102,1218 },1219 };1220 static const UChar1221 INIT_SAO_TYPE_IDX[3][NUM_SAO_TYPE_IDX_CTX] =1222 {1223 {1224 64, 1041225 },1226 {1227 168, 1201228 },1229 {1230 184, 1201231 },1232 };1233 static const Short1234 INIT_SAO_RUN[3][NUM_SAO_RUN_CTX][2] =1235 {1236 {1237 { 11, 57 }, { -1, 62 }, { 0, 64 }1238 },1239 {1240 { 6, 66 }, { -1, 64 }, { 0, 64 }1241 },1242 {1243 { 1, 73 }, { 2, 61 }, { 0, 64 }1244 }1245 };1246 #endif1247 1248 static const UChar1249 INIT_TRANS_SUBDIV_FLAG[3][NUM_TRANS_SUBDIV_FLAG_CTX] =1250 {1251 {1252 CNU, 162, 148, 100, CNU, CNU, CNU, CNU, CNU, CNU,1253 1254 },1255 {1256 CNU, 71, 86, 55, CNU, CNU, CNU, CNU, CNU, CNU,1257 1258 },1259 {1260 CNU, 102, 86, 86, CNU, CNU, CNU, CNU, CNU, CNU,1261 1262 },1263 };1264 #endif1265 434 1266 435 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/NAL.h
r210 r294 46 46 { 47 47 NalUnitType m_nalUnitType; ///< nal_unit_type 48 #if NAL_REF_FLAG49 48 Bool m_nalRefFlag; ///< nal_ref_flag 50 #else51 NalRefIdc m_nalRefIDC; ///< nal_ref_idc52 #endif53 49 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 54 50 unsigned m_layerId; … … 58 54 Bool m_isDepth; ///< is_depth 59 55 unsigned m_temporalId; ///< temporal_id 60 #if !H038861 bool m_OutputFlag; ///< output_flag62 #endif63 56 #endif 64 57 65 58 /** construct an NALunit structure with given header values. */ 66 #if H038867 #if NAL_REF_FLAG68 59 NALUnit( 69 60 NalUnitType nalUnitType, … … 86 77 ,m_temporalId (temporalId) 87 78 {} 88 #else89 NALUnit(90 NalUnitType nalUnitType,91 NalRefIdc nalRefIDC,92 Int viewId,93 Bool isDepth,94 unsigned temporalID = 0)95 {96 m_nalUnitType = nalUnitType;97 m_nalRefIDC = nalRefIDC;98 #if !VIDYO_VPS_INTEGRATION99 m_viewId = viewId;100 m_isDepth = isDepth;101 #else102 m_layerId = layerId;103 #endif104 m_temporalId = temporalID;105 }106 #endif107 #else108 NALUnit(109 NalUnitType nalUnitType,110 NalRefIdc nalRefIDC,111 #if !VIDYO_VPS_INTEGRATION112 Int viewId,113 Bool isDepth,114 #else115 unsigned layerId,116 #endif117 unsigned temporalID = 0,118 bool outputFlag = true)119 {120 m_nalUnitType = nalUnitType;121 m_nalRefIDC = nalRefIDC;122 #if !VIDYO_VPS_INTEGRATION123 m_viewId = viewId;124 m_isDepth = isDepth;125 #else126 m_layerId = layerId;127 #endif128 m_temporalId = temporalID;129 m_OutputFlag = outputFlag;130 }131 #endif132 79 133 80 /** default constructor - no initialization; must be perfomed by user */ … … 138 85 { 139 86 return m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR 140 #if H0566_TLA141 87 #if !QC_REM_IDV_B0046 142 88 || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDV … … 144 90 || m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA 145 91 || m_nalUnitType == NAL_UNIT_CODED_SLICE_TLA 146 #else147 || m_nalUnitType == NAL_UNIT_CODED_SLICE_CDR148 #endif149 92 || m_nalUnitType == NAL_UNIT_CODED_SLICE; 150 93 } -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComAdaptiveLoopFilter.cpp
r56 r294 46 46 47 47 48 #if !LCU_SYNTAX_ALF49 ALFParam::~ALFParam()50 {51 if (coeff_chroma != NULL)52 {53 delete[] coeff_chroma;54 }55 if (coeffmulti)56 {57 for (Int i=0; i<NO_VAR_BINS; i++)58 {59 if (coeffmulti[i] != NULL)60 {61 delete[] coeffmulti[i];62 }63 }64 delete[] coeffmulti;65 }66 67 if (nbSPred != NULL)68 {69 delete[] nbSPred;70 }71 if (filterPattern != NULL)72 {73 delete[] filterPattern;74 }75 }76 #endif77 48 78 49 // ==================================================================================================================== … … 80 51 // ==================================================================================================================== 81 52 82 #if ALF_SINGLE_FILTER_SHAPE83 53 Int TComAdaptiveLoopFilter::weightsShape1Sym[ALF_MAX_NUM_COEF+1] = 84 54 { … … 109 79 depthIntShape1Sym 110 80 }; 111 #else 112 //Shape0: Star5x5 113 Int TComAdaptiveLoopFilter::weightsShape0Sym[10] = 114 { 115 2, 2, 2, 116 2, 2, 2, 117 2, 2, 1, 1 118 }; 119 120 121 //Shape1: Cross9x9 122 Int TComAdaptiveLoopFilter::weightsShape1Sym[10] = 123 { 124 2, 125 2, 126 2, 127 2, 128 2, 2, 2, 2, 1, 129 1 130 }; 131 132 133 Int* TComAdaptiveLoopFilter::weightsTabShapes[NUM_ALF_FILTER_SHAPE] = 134 { 135 weightsShape0Sym, weightsShape1Sym 136 }; 137 138 Int TComAdaptiveLoopFilter::m_sqrFiltLengthTab[NUM_ALF_FILTER_SHAPE] = 139 { 140 9, 9 141 }; 142 143 // Shape0 144 Int depthIntShape0Sym[10] = 145 { 146 1, 3, 1, 147 3, 4, 3, 148 3, 4, 5, 5 149 }; 150 // Shape1 151 Int depthIntShape1Sym[10] = 152 { 153 5, 154 6, 155 7, 156 8, 157 5, 6, 7, 8, 9, 158 9 159 }; 160 161 162 Int* pDepthIntTabShapes[NUM_ALF_FILTER_SHAPE] = 163 { 164 depthIntShape0Sym, depthIntShape1Sym 165 }; 166 #endif 167 168 #if LCU_SYNTAX_ALF 81 169 82 Int kTableShape1[ALF_MAX_NUM_COEF+1] = 170 83 { … … 179 92 kTableShape1 180 93 }; 181 #endif182 94 183 95 // ==================================================================================================================== … … 194 106 } 195 107 196 #if LCU_SYNTAX_ALF197 108 /// AlfCUCtrlInfo 198 109 Void AlfCUCtrlInfo::reset() … … 530 441 } 531 442 532 #endif533 443 534 444 … … 543 453 m_pvpAlfLCU = NULL; 544 454 m_pvpSliceTileAlfLCU = NULL; 545 #if LCU_SYNTAX_ALF546 455 for(Int c=0; c< NUM_ALF_COMPONENT; c++) 547 456 { … … 550 459 m_varImg = NULL; 551 460 m_filterCoeffSym = NULL; 552 #endif553 461 554 462 } … … 755 663 Void TComAdaptiveLoopFilter::create( Int iPicWidth, Int iPicHeight, UInt uiMaxCUWidth, UInt uiMaxCUHeight, UInt uiMaxCUDepth ) 756 664 { 757 #if LCU_SYNTAX_ALF758 665 destroy(); 759 #endif760 666 if ( !m_pcTempPicYuv ) 761 667 { … … 765 671 m_img_height = iPicHeight; 766 672 m_img_width = iPicWidth; 767 #if LCU_SYNTAX_ALF768 673 initMatrix_Pel(&(m_varImg), m_img_height, m_img_width); 769 #else770 for(Int i=0; i< NUM_ALF_CLASS_METHOD; i++)771 {772 initMatrix_Pel(&(m_varImgMethods[i]), m_img_height, m_img_width);773 }774 #endif775 674 initMatrix_int(&m_filterCoeffSym, NO_VAR_BINS, ALF_MAX_NUM_COEF); 776 675 UInt uiNumLCUsInWidth = m_img_width / uiMaxCUWidth; … … 782 681 m_uiNumCUsInFrame = uiNumLCUsInWidth* uiNumLCUsInHeight; 783 682 784 #if LCU_SYNTAX_ALF785 683 m_numLCUInPicWidth = uiNumLCUsInWidth; 786 684 m_numLCUInPicHeight= uiNumLCUsInHeight; 787 685 m_lcuHeight = uiMaxCUHeight; 788 #if ALF_SINGLE_FILTER_SHAPE789 686 m_lineIdxPadBot = m_lcuHeight - 4 - 3; // DFRegion, Vertical Taps 790 #else791 m_lineIdxPadBot = m_lcuHeight - 4 - 4; // DFRegion, Vertical Taps792 #endif793 687 m_lineIdxPadTop = m_lcuHeight - 4; // DFRegion 794 688 795 689 m_lcuHeightChroma = m_lcuHeight>>1; 796 #if ALF_SINGLE_FILTER_SHAPE797 690 m_lineIdxPadBotChroma = m_lcuHeightChroma - 2 - 3; // DFRegion, Vertical Taps 798 #else799 m_lineIdxPadBotChroma = m_lcuHeightChroma - 2 - 4; // DFRegion, Vertical Taps800 #endif801 691 m_lineIdxPadTopChroma = m_lcuHeightChroma - 2 ; // DFRegion 802 692 803 693 createLCUAlfInfo(); 804 #else805 createRegionIndexMap(m_varImgMethods[ALF_RA], m_img_width, m_img_height);806 #endif807 694 } 808 695 … … 813 700 m_pcTempPicYuv->destroy(); 814 701 delete m_pcTempPicYuv; 815 #if LCU_SYNTAX_ALF816 702 m_pcTempPicYuv = NULL; 817 #endif 818 } 819 #if LCU_SYNTAX_ALF 703 } 820 704 if(m_varImg != NULL) 821 705 { … … 828 712 m_filterCoeffSym = NULL; 829 713 } 830 #else831 for(Int i=0; i< NUM_ALF_CLASS_METHOD; i++)832 {833 destroyMatrix_Pel(m_varImgMethods[i]);834 }835 destroyMatrix_int(m_filterCoeffSym);836 #endif837 #if LCU_SYNTAX_ALF838 714 destroyLCUAlfInfo(); 839 #endif 840 841 } 842 843 #if !LCU_SYNTAX_ALF 844 // -------------------------------------------------------------------------------------------------------------------- 845 // allocate / free / copy functions 846 // -------------------------------------------------------------------------------------------------------------------- 847 Void TComAdaptiveLoopFilter::allocALFParam(ALFParam* pAlfParam) 848 { 849 pAlfParam->alf_flag = 0; 850 pAlfParam->coeff_chroma = new Int[ALF_MAX_NUM_COEF]; 851 ::memset(pAlfParam->coeff_chroma, 0, sizeof(Int)*ALF_MAX_NUM_COEF ); 852 pAlfParam->coeffmulti = new Int*[NO_VAR_BINS]; 853 for (int i=0; i<NO_VAR_BINS; i++) 854 { 855 pAlfParam->coeffmulti[i] = new Int[ALF_MAX_NUM_COEF]; 856 ::memset(pAlfParam->coeffmulti[i], 0, sizeof(Int)*ALF_MAX_NUM_COEF ); 857 } 858 pAlfParam->nbSPred = new Int[NO_VAR_BINS]; 859 ::memset(pAlfParam->nbSPred, 0, sizeof(Int)*NO_VAR_BINS); 860 pAlfParam->filterPattern = new Int[NO_VAR_BINS]; 861 ::memset(pAlfParam->filterPattern, 0, sizeof(Int)*NO_VAR_BINS); 862 pAlfParam->alf_pcr_region_flag = 0; 863 } 864 865 Void TComAdaptiveLoopFilter::freeALFParam(ALFParam* pAlfParam) 866 { 867 assert(pAlfParam != NULL); 868 if (pAlfParam->coeff_chroma != NULL) 869 { 870 delete[] pAlfParam->coeff_chroma; 871 pAlfParam->coeff_chroma = NULL; 872 } 873 for (int i=0; i<NO_VAR_BINS; i++) 874 { 875 delete[] pAlfParam->coeffmulti[i]; 876 pAlfParam->coeffmulti[i] = NULL; 877 } 878 delete[] pAlfParam->coeffmulti; 879 pAlfParam->coeffmulti = NULL; 880 881 delete[] pAlfParam->nbSPred; 882 pAlfParam->nbSPred = NULL; 883 884 delete[] pAlfParam->filterPattern; 885 pAlfParam->filterPattern = NULL; 886 } 887 888 889 Void TComAdaptiveLoopFilter::copyALFParam(ALFParam* pDesAlfParam, ALFParam* pSrcAlfParam) 890 { 891 pDesAlfParam->alf_flag = pSrcAlfParam->alf_flag; 892 pDesAlfParam->chroma_idc = pSrcAlfParam->chroma_idc; 893 pDesAlfParam->num_coeff = pSrcAlfParam->num_coeff; 894 pDesAlfParam->filter_shape_chroma = pSrcAlfParam->filter_shape_chroma; 895 pDesAlfParam->num_coeff_chroma = pSrcAlfParam->num_coeff_chroma; 896 pDesAlfParam->alf_pcr_region_flag = pSrcAlfParam->alf_pcr_region_flag; 897 ::memcpy(pDesAlfParam->coeff_chroma, pSrcAlfParam->coeff_chroma, sizeof(Int)*ALF_MAX_NUM_COEF); 898 pDesAlfParam->filter_shape = pSrcAlfParam->filter_shape; 899 ::memcpy(pDesAlfParam->filterPattern, pSrcAlfParam->filterPattern, sizeof(Int)*NO_VAR_BINS); 900 pDesAlfParam->startSecondFilter = pSrcAlfParam->startSecondFilter; 901 902 //Coeff send related 903 pDesAlfParam->filters_per_group = pSrcAlfParam->filters_per_group; //this can be updated using codedVarBins 904 pDesAlfParam->predMethod = pSrcAlfParam->predMethod; 905 ::memcpy(pDesAlfParam->nbSPred, pSrcAlfParam->nbSPred, sizeof(Int)*NO_VAR_BINS); 906 for (int i=0; i<NO_VAR_BINS; i++) 907 { 908 ::memcpy(pDesAlfParam->coeffmulti[i], pSrcAlfParam->coeffmulti[i], sizeof(Int)*ALF_MAX_NUM_COEF); 909 } 910 } 911 // -------------------------------------------------------------------------------------------------------------------- 912 // prediction of filter coefficients 913 // -------------------------------------------------------------------------------------------------------------------- 914 915 Void TComAdaptiveLoopFilter::predictALFCoeffChroma( ALFParam* pAlfParam ) 916 { 917 Int i, sum, pred, N; 918 const Int* pFiltMag = NULL; 919 pFiltMag = weightsTabShapes[pAlfParam->filter_shape_chroma]; 920 N = pAlfParam->num_coeff_chroma; 921 sum=0; 922 for(i=0; i<N;i++) 923 { 924 sum+=pFiltMag[i]*pAlfParam->coeff_chroma[i]; 925 } 926 pred=(1<<ALF_NUM_BIT_SHIFT)-(sum-pAlfParam->coeff_chroma[N-1]); 927 #if ALF_CHROMA_COEF_PRED_HARMONIZATION 928 pAlfParam->coeff_chroma[N-1]=pAlfParam->coeff_chroma[N-1] - pred; 929 #else 930 pAlfParam->coeff_chroma[N-1]=pred-pAlfParam->coeff_chroma[N-1]; 931 #endif 932 } 933 934 #if ALF_CHROMA_COEF_PRED_HARMONIZATION 935 Void TComAdaptiveLoopFilter::reconstructALFCoeffChroma( ALFParam* pAlfParam ) 936 { 937 Int i, sum, pred, N; 938 const Int* pFiltMag = NULL; 939 pFiltMag = weightsTabShapes[pAlfParam->filter_shape_chroma]; 940 N = pAlfParam->num_coeff_chroma; 941 sum=0; 942 for(i=0; i<N;i++) 943 { 944 sum+=pFiltMag[i]*pAlfParam->coeff_chroma[i]; 945 } 946 pred=(1<<ALF_NUM_BIT_SHIFT)-(sum-pAlfParam->coeff_chroma[N-1]); 947 pAlfParam->coeff_chroma[N-1]=pred+ pAlfParam->coeff_chroma[N-1]; 948 } 949 #endif 950 #endif 715 716 } 717 951 718 952 719 // -------------------------------------------------------------------------------------------------------------------- … … 954 721 // -------------------------------------------------------------------------------------------------------------------- 955 722 956 #if LCU_SYNTAX_ALF957 723 /** ALF reconstruction process for one picture 958 724 * \param [in, out] pcPic the decoded/filtered picture (input: decoded picture; output filtered picture) … … 1113 879 } 1114 880 1115 #else1116 1117 /**1118 \param [in, out] pcPic picture (TComPic) class (input/output)1119 \param [in] pcAlfParam ALF parameter1120 \param [in,out] vAlfCUCtrlParam ALF CU control parameters1121 \todo for temporal buffer, it uses residual picture buffer, which may not be safe. Make it be safer.1122 */1123 Void TComAdaptiveLoopFilter::ALFProcess(TComPic* pcPic, ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam)1124 {1125 assert(m_uiNumSlicesInPic == vAlfCUCtrlParam.size());1126 if(!pcAlfParam->alf_flag)1127 {1128 return;1129 }1130 1131 m_lcuHeight = pcPic->getSlice(0)->getSPS()->getMaxCUHeight();1132 #if ALF_SINGLE_FILTER_SHAPE1133 m_lineIdxPadBot = m_lcuHeight - 4 - 3; // DFRegion, Vertical Taps1134 #else1135 m_lineIdxPadBot = m_lcuHeight - 4 - 4; // DFRegion, Vertical Taps1136 #endif1137 m_lineIdxPadTop = m_lcuHeight - 4; // DFRegion1138 1139 m_lcuHeightChroma = m_lcuHeight>>1;1140 #if ALF_SINGLE_FILTER_SHAPE1141 m_lineIdxPadBotChroma = m_lcuHeightChroma - 2 - 3; // DFRegion, Vertical Taps1142 #else1143 m_lineIdxPadBotChroma = m_lcuHeightChroma - 2 - 4; // DFRegion, Vertical Taps1144 #endif1145 m_lineIdxPadTopChroma = m_lcuHeightChroma - 2 ; // DFRegion1146 1147 TComPicYuv* pcPicYuvRec = pcPic->getPicYuvRec();1148 TComPicYuv* pcPicYuvExtRec = m_pcTempPicYuv;1149 pcPicYuvRec ->copyToPic ( pcPicYuvExtRec );1150 pcPicYuvExtRec->setBorderExtension ( false );1151 pcPicYuvExtRec->extendPicBorder ();1152 1153 if(m_uiNumSlicesInPic == 1)1154 {1155 AlfCUCtrlInfo* pcAlfCtrlParam = &(vAlfCUCtrlParam[0]);1156 if(pcAlfCtrlParam->cu_control_flag)1157 {1158 UInt idx = 0;1159 for(UInt uiCUAddr = 0; uiCUAddr < pcPic->getNumCUsInFrame(); uiCUAddr++)1160 {1161 TComDataCU *pcCU = pcPic->getCU(uiCUAddr);1162 setAlfCtrlFlags(pcAlfCtrlParam, pcCU, 0, 0, idx);1163 }1164 }1165 }1166 else1167 {1168 transferCtrlFlagsFromAlfParam(vAlfCUCtrlParam);1169 }1170 xALFLuma(pcPic, pcAlfParam, vAlfCUCtrlParam, pcPicYuvExtRec, pcPicYuvRec);1171 if(pcAlfParam->chroma_idc)1172 {1173 #if ALF_CHROMA_COEF_PRED_HARMONIZATION1174 reconstructALFCoeffChroma(pcAlfParam);1175 #else1176 predictALFCoeffChroma(pcAlfParam);1177 #endif1178 checkFilterCoeffValue(pcAlfParam->coeff_chroma, pcAlfParam->num_coeff_chroma, true );1179 1180 xALFChroma( pcAlfParam, pcPicYuvExtRec, pcPicYuvRec);1181 }1182 }1183 #endif1184 881 // ==================================================================================================================== 1185 882 // Protected member functions … … 1216 913 } 1217 914 1218 #if !LCU_SYNTAX_ALF1219 1220 Void TComAdaptiveLoopFilter::xALFLuma(TComPic* pcPic, ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam,TComPicYuv* pcPicDec, TComPicYuv* pcPicRest)1221 {1222 Int LumaStride = pcPicDec->getStride();1223 Pel* pDec = pcPicDec->getLumaAddr();1224 Pel* pRest = pcPicRest->getLumaAddr();1225 1226 decodeFilterSet(pcAlfParam, m_varIndTab, m_filterCoeffSym);1227 1228 m_uiVarGenMethod = pcAlfParam->alf_pcr_region_flag;1229 m_varImg = m_varImgMethods[m_uiVarGenMethod];1230 calcVar(m_varImg, pRest, LumaStride, pcAlfParam->alf_pcr_region_flag);1231 1232 if(!m_bUseNonCrossALF)1233 {1234 Bool bCUCtrlEnabled = false;1235 for(UInt s=0; s< m_uiNumSlicesInPic; s++)1236 {1237 if(!pcPic->getValidSlice(s))1238 {1239 continue;1240 }1241 if( vAlfCUCtrlParam[s].cu_control_flag == 1)1242 {1243 bCUCtrlEnabled = true;1244 }1245 }1246 1247 if(bCUCtrlEnabled)1248 {1249 xCUAdaptive(pcPic, pcAlfParam->filter_shape, pRest, pDec, LumaStride);1250 }1251 else1252 {1253 filterLuma(pRest, pDec, LumaStride, 0, m_img_height-1, 0, m_img_width-1, pcAlfParam->filter_shape, m_filterCoeffSym, m_varIndTab, m_varImg);1254 }1255 }1256 else1257 {1258 Pel* pTemp = m_pcSliceYuvTmp->getLumaAddr();1259 for(UInt s=0; s< m_uiNumSlicesInPic; s++)1260 {1261 if(!pcPic->getValidSlice(s))1262 {1263 continue;1264 }1265 std::vector< std::vector<AlfLCUInfo*> > & vpSliceTileAlfLCU = m_pvpSliceTileAlfLCU[s];1266 1267 for(Int t=0; t< (Int)vpSliceTileAlfLCU.size(); t++)1268 {1269 std::vector<AlfLCUInfo*> & vpAlfLCU = vpSliceTileAlfLCU[t];1270 1271 copyRegion(vpAlfLCU, pTemp, pDec, LumaStride);1272 extendRegionBorder(vpAlfLCU, pTemp, LumaStride);1273 if(vAlfCUCtrlParam[s].cu_control_flag == 1)1274 {1275 xCUAdaptiveRegion(vpAlfLCU, pTemp, pRest, LumaStride, pcAlfParam->filter_shape, m_filterCoeffSym, m_varIndTab, m_varImg);1276 }1277 else1278 {1279 filterLumaRegion(vpAlfLCU, pTemp, pRest, LumaStride, pcAlfParam->filter_shape, m_filterCoeffSym, m_varIndTab, m_varImg);1280 }1281 }1282 }1283 }1284 }1285 1286 Void TComAdaptiveLoopFilter::decodeFilterSet(ALFParam* pcAlfParam, Int* varIndTab, Int** filterCoeff)1287 {1288 // reconstruct merge table1289 memset(m_varIndTab, 0, NO_VAR_BINS * sizeof(Int));1290 if(pcAlfParam->filters_per_group > 1)1291 {1292 for(Int i = 1; i < NO_VAR_BINS; ++i)1293 {1294 if(pcAlfParam->filterPattern[i])1295 {1296 varIndTab[i] = varIndTab[i-1] + 1;1297 }1298 else1299 {1300 varIndTab[i] = varIndTab[i-1];1301 }1302 }1303 }1304 predictALFCoeffLuma( pcAlfParam);1305 // reconstruct filter sets1306 reconstructFilterCoeffs( pcAlfParam, filterCoeff);1307 1308 }1309 1310 1311 Void TComAdaptiveLoopFilter::filterLuma(Pel *pImgRes, Pel *pImgPad, Int stride,1312 Int ypos, Int yposEnd, Int xpos, Int xposEnd,1313 Int filtNo, Int** filterSet, Int* mergeTable, Pel** ppVarImg)1314 {1315 static Int numBitsMinus1= (Int)ALF_NUM_BIT_SHIFT;1316 static Int offset = (1<<( (Int)ALF_NUM_BIT_SHIFT-1));1317 static Int shiftHeight = (Int)(log((double)VAR_SIZE_H)/log(2.0));1318 static Int shiftWidth = (Int)(log((double)VAR_SIZE_W)/log(2.0));1319 1320 Pel *pImgPad1,*pImgPad2,*pImgPad3,*pImgPad4;1321 Pel *pVar;1322 Int i, j, pixelInt;1323 Int *coef = NULL;1324 1325 pImgPad += (ypos*stride);1326 pImgRes += (ypos*stride);1327 1328 Int yLineInLCU;1329 Int paddingLine;1330 #if !ALF_SINGLE_FILTER_SHAPE1331 Int varInd = 0;1332 #endif1333 Int newCenterCoeff[4][NO_VAR_BINS];1334 1335 for(i=0; i< 4; i++)1336 {1337 ::memset(&(newCenterCoeff[i][0]), 0, sizeof(Int)*NO_VAR_BINS);1338 }1339 1340 #if ALF_SINGLE_FILTER_SHAPE1341 if(filtNo == ALF_CROSS9x7_SQUARE3x3)1342 #else1343 if(filtNo == ALF_CROSS9x9)1344 #endif1345 {1346 for (i=0; i<NO_VAR_BINS; i++)1347 {1348 coef = filterSet[i];1349 //VB line 11350 newCenterCoeff[0][i] = coef[8] + ((coef[0] + coef[1] + coef[2] + coef[3])<<1);1351 //VB line 21352 newCenterCoeff[1][i] = coef[8] + ((coef[0] + coef[1] + coef[2])<<1);1353 //VB line 31354 newCenterCoeff[2][i] = coef[8] + ((coef[0] + coef[1])<<1);1355 //VB line 41356 newCenterCoeff[3][i] = coef[8] + ((coef[0])<<1);1357 }1358 }1359 1360 1361 switch(filtNo)1362 {1363 #if !ALF_SINGLE_FILTER_SHAPE1364 case ALF_STAR5x5:1365 {1366 for(i= ypos; i<= yposEnd; i++)1367 {1368 1369 yLineInLCU = i % m_lcuHeight;1370 1371 if (yLineInLCU<m_lineIdxPadBot || i-yLineInLCU+m_lcuHeight >= m_img_height)1372 {1373 pImgPad1 = pImgPad + stride;1374 pImgPad2 = pImgPad - stride;1375 pImgPad3 = pImgPad + 2*stride;1376 pImgPad4 = pImgPad - 2*stride;1377 }1378 else if (yLineInLCU<m_lineIdxPadTop)1379 {1380 paddingLine = - yLineInLCU + m_lineIdxPadTop - 1;1381 pImgPad1 = pImgPad + min(paddingLine, 1)*stride;1382 pImgPad2 = pImgPad - stride;1383 pImgPad3 = pImgPad + min(paddingLine, 2)*stride;1384 pImgPad4 = pImgPad - 2*stride;1385 }1386 else1387 {1388 paddingLine = yLineInLCU - m_lineIdxPadTop ;1389 pImgPad1 = pImgPad + stride;1390 pImgPad2 = pImgPad - min(paddingLine, 1)*stride;1391 pImgPad3 = pImgPad + 2*stride;1392 pImgPad4 = pImgPad - min(paddingLine, 2)*stride;1393 }1394 1395 pVar = ppVarImg[i>>shiftHeight] + (xpos>>shiftWidth);1396 1397 if ( (yLineInLCU == m_lineIdxPadTop || yLineInLCU == m_lineIdxPadTop-1) && i-yLineInLCU+m_lcuHeight < m_img_height )1398 {1399 for(j= xpos; j<= xposEnd; j++)1400 {1401 pImgRes[j] = pImgPad[j];1402 }1403 }1404 else if ( (yLineInLCU == m_lineIdxPadTop+1 || yLineInLCU == m_lineIdxPadTop-2) && i-yLineInLCU+m_lcuHeight < m_img_height )1405 {1406 for(j= xpos; j<= xposEnd ; j++)1407 {1408 if (j % VAR_SIZE_W==0)1409 {1410 coef = filterSet[mergeTable[*(pVar++)]];1411 }1412 1413 pixelInt = 0;1414 1415 pixelInt += coef[0]* (pImgPad3[j+2]+pImgPad4[j-2]);1416 pixelInt += coef[1]* (pImgPad3[j ]+pImgPad4[j ]);1417 pixelInt += coef[2]* (pImgPad3[j-2]+pImgPad4[j+2]);1418 1419 pixelInt += coef[3]* (pImgPad1[j+1]+pImgPad2[j-1]);1420 pixelInt += coef[4]* (pImgPad1[j ]+pImgPad2[j ]);1421 pixelInt += coef[5]* (pImgPad1[j-1]+pImgPad2[j+1]);1422 1423 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);1424 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);1425 pixelInt += coef[8]* (pImgPad[j ]);1426 1427 pixelInt=(int)((pixelInt+offset) >> numBitsMinus1);1428 pImgRes[j] = ( Clip( pixelInt ) + pImgPad[j] ) >> 1;1429 }1430 }1431 else1432 {1433 1434 for(j= xpos; j<= xposEnd ; j++)1435 {1436 if (j % VAR_SIZE_W==0)1437 {1438 coef = filterSet[mergeTable[*(pVar++)]];1439 }1440 1441 pixelInt = 0;1442 1443 pixelInt += coef[0]* (pImgPad3[j+2]+pImgPad4[j-2]);1444 pixelInt += coef[1]* (pImgPad3[j ]+pImgPad4[j ]);1445 pixelInt += coef[2]* (pImgPad3[j-2]+pImgPad4[j+2]);1446 1447 pixelInt += coef[3]* (pImgPad1[j+1]+pImgPad2[j-1]);1448 pixelInt += coef[4]* (pImgPad1[j ]+pImgPad2[j ]);1449 pixelInt += coef[5]* (pImgPad1[j-1]+pImgPad2[j+1]);1450 1451 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);1452 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);1453 pixelInt += coef[8]* (pImgPad[j ]);1454 1455 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);1456 pImgRes[j] = Clip( pixelInt );1457 }1458 1459 }1460 1461 pImgPad += stride;1462 pImgRes += stride;1463 }1464 }1465 break;1466 case ALF_CROSS9x9:1467 {1468 Pel *pImgPad5, *pImgPad6, *pImgPad7, *pImgPad8;1469 #else1470 case ALF_CROSS9x7_SQUARE3x3:1471 {1472 Pel *pImgPad5, *pImgPad6;1473 #endif1474 for(i= ypos; i<= yposEnd; i++)1475 {1476 yLineInLCU = i % m_lcuHeight;1477 1478 if (yLineInLCU<m_lineIdxPadBot || i-yLineInLCU+m_lcuHeight >= m_img_height)1479 {1480 pImgPad1 = pImgPad + stride;1481 pImgPad2 = pImgPad - stride;1482 pImgPad3 = pImgPad + 2*stride;1483 pImgPad4 = pImgPad - 2*stride;1484 pImgPad5 = pImgPad + 3*stride;1485 pImgPad6 = pImgPad - 3*stride;1486 #if !ALF_SINGLE_FILTER_SHAPE1487 pImgPad7 = pImgPad + 4*stride;1488 pImgPad8 = pImgPad - 4*stride;1489 #endif1490 }1491 else if (yLineInLCU<m_lineIdxPadTop)1492 {1493 paddingLine = - yLineInLCU + m_lineIdxPadTop - 1;1494 #if ALF_SINGLE_FILTER_SHAPE1495 pImgPad1 = (paddingLine < 1) ? pImgPad : pImgPad + min(paddingLine, 1)*stride;1496 pImgPad2 = (paddingLine < 1) ? pImgPad : pImgPad - stride;1497 pImgPad3 = (paddingLine < 2) ? pImgPad : pImgPad + min(paddingLine, 2)*stride;1498 pImgPad4 = (paddingLine < 2) ? pImgPad : pImgPad - 2*stride;1499 pImgPad5 = (paddingLine < 3) ? pImgPad : pImgPad + min(paddingLine, 3)*stride;1500 pImgPad6 = (paddingLine < 3) ? pImgPad : pImgPad - 3*stride;1501 #else1502 pImgPad1 = pImgPad + min(paddingLine, 1)*stride;1503 pImgPad2 = pImgPad - stride;1504 pImgPad3 = pImgPad + min(paddingLine, 2)*stride;1505 pImgPad4 = pImgPad - 2*stride;1506 pImgPad5 = pImgPad + min(paddingLine, 3)*stride;1507 pImgPad6 = pImgPad - 3*stride;1508 pImgPad7 = pImgPad + min(paddingLine, 4)*stride;1509 pImgPad8 = pImgPad - 4*stride;1510 #endif1511 }1512 else1513 {1514 paddingLine = yLineInLCU - m_lineIdxPadTop ;1515 #if ALF_SINGLE_FILTER_SHAPE1516 pImgPad1 = (paddingLine < 1) ? pImgPad : pImgPad + stride;1517 pImgPad2 = (paddingLine < 1) ? pImgPad : pImgPad - min(paddingLine, 1)*stride;1518 pImgPad3 = (paddingLine < 2) ? pImgPad : pImgPad + 2*stride;1519 pImgPad4 = (paddingLine < 2) ? pImgPad : pImgPad - min(paddingLine, 2)*stride;1520 pImgPad5 = (paddingLine < 3) ? pImgPad : pImgPad + 3*stride;1521 pImgPad6 = (paddingLine < 3) ? pImgPad : pImgPad - min(paddingLine, 3)*stride;1522 #else1523 pImgPad1 = pImgPad + stride;1524 pImgPad2 = pImgPad - min(paddingLine, 1)*stride;1525 pImgPad3 = pImgPad + 2*stride;1526 pImgPad4 = pImgPad - min(paddingLine, 2)*stride;1527 pImgPad5 = pImgPad + 3*stride;1528 pImgPad6 = pImgPad - min(paddingLine, 3)*stride;1529 pImgPad7 = pImgPad + 4*stride;1530 pImgPad8 = pImgPad - min(paddingLine, 4)*stride;1531 #endif1532 }1533 1534 pVar = ppVarImg[i>>shiftHeight] + (xpos>>shiftWidth);1535 1536 #if ALF_SINGLE_FILTER_SHAPE1537 {1538 for(j= xpos; j<= xposEnd ; j++)1539 {1540 if (j % VAR_SIZE_W==0)1541 {1542 coef = filterSet[mergeTable[*(pVar++)]];1543 }1544 1545 pixelInt = 0;1546 1547 pixelInt += coef[0]* (pImgPad5[j]+pImgPad6[j]);1548 pixelInt += coef[1]* (pImgPad3[j]+pImgPad4[j]);1549 pixelInt += coef[2]* (pImgPad1[j-1]+pImgPad2[j+1]);1550 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);1551 pixelInt += coef[4]* (pImgPad1[j+1]+pImgPad2[j-1]);1552 pixelInt += coef[5]* (pImgPad[j+4]+pImgPad[j-4]);1553 pixelInt += coef[6]* (pImgPad[j+3]+pImgPad[j-3]);1554 pixelInt += coef[7]* (pImgPad[j+2]+pImgPad[j-2]);1555 pixelInt += coef[8]* (pImgPad[j+1]+pImgPad[j-1]);1556 pixelInt += coef[9]* (pImgPad[j ]);1557 1558 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);1559 pImgRes[j] = Clip( pixelInt );1560 }1561 }1562 #else1563 if ( (yLineInLCU == m_lineIdxPadTop || yLineInLCU == m_lineIdxPadTop-1) && i-yLineInLCU+m_lcuHeight < m_img_height )1564 {1565 for(j= xpos; j<= xposEnd ; j++)1566 {1567 if (j % VAR_SIZE_W==0)1568 {1569 varInd = *(pVar++);1570 coef = filterSet[mergeTable[varInd]];1571 }1572 1573 pixelInt = 0;1574 1575 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);1576 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);1577 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);1578 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);1579 pixelInt += newCenterCoeff[0][mergeTable[varInd]]* (pImgPad[j]);1580 1581 pixelInt=(int)((pixelInt+offset) >> numBitsMinus1);1582 pImgRes[j] = Clip( pixelInt );1583 }1584 }1585 else if ( (yLineInLCU == m_lineIdxPadTop+1 || yLineInLCU == m_lineIdxPadTop-2) && i-yLineInLCU+m_lcuHeight < m_img_height )1586 {1587 for(j= xpos; j<= xposEnd ; j++)1588 {1589 if (j % VAR_SIZE_W==0)1590 {1591 varInd = *(pVar++);1592 coef = filterSet[mergeTable[varInd]];1593 }1594 1595 pixelInt = 0;1596 1597 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);1598 1599 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);1600 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);1601 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);1602 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);1603 pixelInt += newCenterCoeff[1][mergeTable[varInd]]* (pImgPad[j]);1604 1605 pixelInt=(int)((pixelInt+offset) >> numBitsMinus1);1606 pImgRes[j] = Clip( pixelInt );1607 }1608 }1609 else if ( (yLineInLCU == m_lineIdxPadTop+2 || yLineInLCU == m_lineIdxPadTop-3) && i-yLineInLCU+m_lcuHeight < m_img_height )1610 {1611 for(j= xpos; j<= xposEnd ; j++)1612 {1613 if (j % VAR_SIZE_W==0)1614 {1615 varInd = *(pVar++);1616 coef = filterSet[mergeTable[varInd]];1617 }1618 1619 pixelInt = 0;1620 1621 pixelInt += coef[2]* (pImgPad3[j]+pImgPad4[j]);1622 1623 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);1624 1625 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);1626 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);1627 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);1628 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);1629 pixelInt += newCenterCoeff[2][mergeTable[varInd]]* (pImgPad[j ]);1630 1631 pixelInt=(int)((pixelInt+offset) >> numBitsMinus1);1632 pImgRes[j] = Clip( pixelInt );1633 }1634 }1635 else if ( (yLineInLCU == m_lineIdxPadTop+3 || yLineInLCU == m_lineIdxPadTop-4) && i-yLineInLCU+m_lcuHeight < m_img_height )1636 {1637 for(j= xpos; j<= xposEnd ; j++)1638 {1639 if (j % VAR_SIZE_W==0)1640 {1641 varInd = *(pVar++);1642 coef = filterSet[mergeTable[varInd]];1643 }1644 1645 pixelInt = 0;1646 1647 pixelInt += coef[1]* (pImgPad5[j]+pImgPad6[j]);1648 1649 pixelInt += coef[2]* (pImgPad3[j]+pImgPad4[j]);1650 1651 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);1652 1653 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);1654 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);1655 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);1656 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);1657 pixelInt += newCenterCoeff[3][mergeTable[varInd]]* (pImgPad[j ]);1658 1659 pixelInt=(int)((pixelInt+offset) >> numBitsMinus1);1660 pImgRes[j] = Clip( pixelInt );1661 }1662 }1663 else1664 {1665 for(j= xpos; j<= xposEnd ; j++)1666 {1667 if (j % VAR_SIZE_W==0)1668 {1669 coef = filterSet[mergeTable[*(pVar++)]];1670 }1671 1672 pixelInt = 0;1673 1674 pixelInt += coef[0]* (pImgPad7[j]+pImgPad8[j]);1675 1676 pixelInt += coef[1]* (pImgPad5[j]+pImgPad6[j]);1677 1678 pixelInt += coef[2]* (pImgPad3[j]+pImgPad4[j]);1679 1680 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);1681 1682 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);1683 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);1684 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);1685 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);1686 pixelInt += coef[8]* (pImgPad[j ]);1687 1688 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);1689 pImgRes[j] = Clip( pixelInt );1690 }1691 }1692 #endif1693 pImgPad += stride;1694 pImgRes += stride;1695 }1696 }1697 break;1698 default:1699 {1700 printf("Not a supported filter shape\n");1701 assert(0);1702 exit(1);1703 }1704 }1705 }1706 1707 1708 1709 Void TComAdaptiveLoopFilter::xCUAdaptive(TComPic* pcPic, Int filtNo, Pel *imgYFilt, Pel *imgYRec, Int Stride)1710 {1711 // for every CU, call CU-adaptive ALF process1712 for( UInt uiCUAddr = 0; uiCUAddr < pcPic->getNumCUsInFrame() ; uiCUAddr++ )1713 {1714 TComDataCU* pcCU = pcPic->getCU( uiCUAddr );1715 xSubCUAdaptive(pcCU, filtNo, imgYFilt, imgYRec, 0, 0, Stride);1716 }1717 }1718 1719 Void TComAdaptiveLoopFilter::xSubCUAdaptive(TComDataCU* pcCU, Int filtNo, Pel *imgYFilt, Pel *imgYRec, UInt uiAbsPartIdx, UInt uiDepth, Int Stride)1720 {1721 TComPic* pcPic = pcCU->getPic();1722 1723 if(pcPic==NULL)1724 {1725 return;1726 }1727 Bool bBoundary = false;1728 UInt uiLPelX = pcCU->getCUPelX() + g_auiRasterToPelX[ g_auiZscanToRaster[uiAbsPartIdx] ];1729 UInt uiRPelX = uiLPelX + (g_uiMaxCUWidth>>uiDepth) - 1;1730 UInt uiTPelY = pcCU->getCUPelY() + g_auiRasterToPelY[ g_auiZscanToRaster[uiAbsPartIdx] ];1731 UInt uiBPelY = uiTPelY + (g_uiMaxCUHeight>>uiDepth) - 1;1732 1733 // check picture boundary1734 if ( ( uiRPelX >= m_img_width ) || ( uiBPelY >= m_img_height ) )1735 {1736 bBoundary = true;1737 }1738 1739 if ( ( ( uiDepth < pcCU->getDepth( uiAbsPartIdx ) ) && ( uiDepth < (g_uiMaxCUDepth-g_uiAddCUDepth) ) ) || bBoundary )1740 {1741 UInt uiQNumParts = ( pcPic->getNumPartInCU() >> (uiDepth<<1) )>>2;1742 for ( UInt uiPartUnitIdx = 0; uiPartUnitIdx < 4; uiPartUnitIdx++, uiAbsPartIdx+=uiQNumParts )1743 {1744 uiLPelX = pcCU->getCUPelX() + g_auiRasterToPelX[ g_auiZscanToRaster[uiAbsPartIdx] ];1745 uiTPelY = pcCU->getCUPelY() + g_auiRasterToPelY[ g_auiZscanToRaster[uiAbsPartIdx] ];1746 1747 if( ( uiLPelX < m_img_width ) && ( uiTPelY < m_img_height ) )1748 xSubCUAdaptive(pcCU, filtNo, imgYFilt, imgYRec, uiAbsPartIdx, uiDepth+1, Stride);1749 }1750 return;1751 }1752 1753 if ( pcCU->getAlfCtrlFlag(uiAbsPartIdx) )1754 {1755 filterLuma(imgYFilt, imgYRec, Stride, uiTPelY, min(uiBPelY,(unsigned int)(m_img_height-1)), uiLPelX, min(uiRPelX,(unsigned int)(m_img_width-1))1756 ,filtNo, m_filterCoeffSym, m_varIndTab, m_varImg);1757 }1758 }1759 1760 /** Predict ALF luma filter coefficients. Centre coefficient is always predicted. Left neighbour is predicted according to flag.1761 */1762 Void TComAdaptiveLoopFilter::predictALFCoeffLuma(ALFParam* pcAlfParam)1763 {1764 Int sum, coeffPred, ind;1765 const Int* pFiltMag = NULL;1766 pFiltMag = weightsTabShapes[pcAlfParam->filter_shape];1767 for(ind = 0; ind < pcAlfParam->filters_per_group; ++ind)1768 {1769 sum = 0;1770 for(Int i = 0; i < pcAlfParam->num_coeff-2; i++)1771 {1772 sum += pFiltMag[i]*pcAlfParam->coeffmulti[ind][i];1773 }1774 if(pcAlfParam->nbSPred[ind]==0)1775 {1776 if((pcAlfParam->predMethod==0)|(ind==0))1777 {1778 coeffPred = ((1<<ALF_NUM_BIT_SHIFT)-sum) >> 2;1779 }1780 else1781 {1782 coeffPred = (0-sum) >> 2;1783 }1784 pcAlfParam->coeffmulti[ind][pcAlfParam->num_coeff-2] = coeffPred + pcAlfParam->coeffmulti[ind][pcAlfParam->num_coeff-2];1785 }1786 sum += pFiltMag[pcAlfParam->num_coeff-2]*pcAlfParam->coeffmulti[ind][pcAlfParam->num_coeff-2];1787 if((pcAlfParam->predMethod==0)|(ind==0))1788 {1789 coeffPred = (1<<ALF_NUM_BIT_SHIFT)-sum;1790 }1791 else1792 {1793 coeffPred = -sum;1794 }1795 pcAlfParam->coeffmulti[ind][pcAlfParam->num_coeff-1] = coeffPred + pcAlfParam->coeffmulti[ind][pcAlfParam->num_coeff-1];1796 }1797 }1798 1799 Void TComAdaptiveLoopFilter::reconstructFilterCoeffs(ALFParam* pcAlfParam,int **pfilterCoeffSym)1800 {1801 int i, ind;1802 1803 // Copy non zero filters in filterCoeffTmp1804 for(ind = 0; ind < pcAlfParam->filters_per_group; ++ind)1805 {1806 for(i = 0; i < pcAlfParam->num_coeff; i++)1807 {1808 pfilterCoeffSym[ind][i] = pcAlfParam->coeffmulti[ind][i];1809 }1810 }1811 // Undo prediction1812 for(ind = 1; ind < pcAlfParam->filters_per_group; ++ind)1813 {1814 if(pcAlfParam->predMethod)1815 {1816 // Prediction1817 for(i = 0; i < pcAlfParam->num_coeff; ++i)1818 {1819 pfilterCoeffSym[ind][i] = (int)(pfilterCoeffSym[ind][i] + pfilterCoeffSym[ind - 1][i]);1820 }1821 }1822 }1823 1824 for(ind = 0; ind < pcAlfParam->filters_per_group; ind++)1825 {1826 checkFilterCoeffValue(pfilterCoeffSym[ind], pcAlfParam->num_coeff, false );1827 }1828 }1829 1830 1831 #endif1832 915 1833 916 static Pel Clip_post(int high, int val) … … 1836 919 } 1837 920 1838 #if !LCU_SYNTAX_ALF1839 1840 /** Calculate ALF grouping indices for block-based (BA) mode1841 * \param [out] imgYvar grouping indices buffer1842 * \param [in] imgYpad picture buffer1843 * \param [in] stride picture stride size1844 * \param [in] adaptationMode ALF_BA or ALF_RA mode1845 */1846 Void TComAdaptiveLoopFilter::calcVar(Pel **imgYvar, Pel *imgYpad, Int stride, Int adaptationMode)1847 {1848 if(adaptationMode == ALF_RA)1849 {1850 return;1851 }1852 static Int shiftH = (Int)(log((double)VAR_SIZE_H)/log(2.0));1853 static Int shiftW = (Int)(log((double)VAR_SIZE_W)/log(2.0));1854 static Int varmax = (Int)NO_VAR_BINS-1;1855 #if ALF_16_BA_GROUPS1856 static Int th[NO_VAR_BINS] = {0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5};1857 static Int avgVarTab[3][6] = { {0, 1, 2, 3, 4, 5,},1858 {0, 6, 7, 8, 9, 10,},1859 {0, 11, 12, 13, 14, 15} };1860 #else1861 static Int step1 = (Int)((Int)(NO_VAR_BINS)/3) - 1;1862 static Int th[NO_VAR_BINS] = {0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4};1863 #endif1864 Int i, j, avgvar, vertical, horizontal,direction, yoffset;1865 Pel *pimgYpad, *pimgYpadup, *pimgYpaddown;1866 1867 for(i = 0; i < m_img_height - 3; i=i+4)1868 {1869 yoffset = ((i)*stride) + stride;1870 pimgYpad = &imgYpad [yoffset];1871 pimgYpadup = &imgYpad [yoffset + stride];1872 pimgYpaddown = &imgYpad [yoffset - stride];1873 1874 for(j = 0; j < m_img_width - 3 ; j=j+4)1875 {1876 // Compute at sub-sample by 21877 vertical = abs((pimgYpad[j+1]<<1 ) - pimgYpaddown[j+1] - pimgYpadup[j+1]);1878 horizontal = abs((pimgYpad[j+1]<<1 ) - pimgYpad [j+2] - pimgYpad [j ]);1879 1880 vertical += abs((pimgYpad[j+2]<<1 ) - pimgYpaddown[j+2] - pimgYpadup[j+2]);1881 horizontal += abs((pimgYpad[j+2]<<1 ) - pimgYpad [j+3] - pimgYpad [j+1]);1882 1883 vertical += abs((pimgYpad[j+1+stride]<<1) - pimgYpaddown[j+1+stride] - pimgYpadup[j+1+stride]);1884 horizontal += abs((pimgYpad[j+1+stride]<<1) - pimgYpad [j+2+stride] - pimgYpad [j+stride ]);1885 1886 vertical += abs((pimgYpad[j+2+stride]<<1) - pimgYpaddown[j+2+stride] - pimgYpadup[j+2+stride]);1887 horizontal += abs((pimgYpad[j+2+stride]<<1) - pimgYpad [j+3+stride] - pimgYpad [j+1+stride]);1888 1889 direction = 0;1890 if (vertical > 2*horizontal)1891 {1892 direction = 1; //vertical1893 }1894 if (horizontal > 2*vertical)1895 {1896 direction = 2; //horizontal1897 }1898 1899 avgvar = (vertical + horizontal) >> 2;1900 avgvar = (Pel) Clip_post(varmax, avgvar >>(g_uiBitIncrement+1));1901 avgvar = th[avgvar];1902 #if ALF_16_BA_GROUPS1903 avgvar = avgVarTab[direction][avgvar];1904 #else1905 avgvar = Clip_post(step1, (Int) avgvar ) + (step1+1)*direction;1906 #endif1907 imgYvar[(i )>>shiftH][(j)>>shiftW] = avgvar;1908 }1909 }1910 }1911 1912 Void TComAdaptiveLoopFilter::createRegionIndexMap(Pel **imgYVar, Int imgWidth, Int imgHeight)1913 {1914 int varStepSizeWidth = VAR_SIZE_W;1915 int varStepSizeHeight = VAR_SIZE_H;1916 int shiftHeight = (int)(log((double)varStepSizeHeight)/log(2.0));1917 int shiftWidth = (int)(log((double)varStepSizeWidth)/log(2.0));1918 1919 int i, j;1920 int regionTable[NO_VAR_BINS] = {0, 1, 4, 5, 15, 2, 3, 6, 14, 11, 10, 7, 13, 12, 9, 8};1921 int xInterval;1922 int yInterval;1923 int yIndex;1924 int yIndexOffset;1925 int yStartLine;1926 int yEndLine;1927 1928 xInterval = ((( (imgWidth+63)/64) + 1) / 4 * 64)>>shiftWidth;1929 yInterval = ((((imgHeight+63)/64) + 1) / 4 * 64)>>shiftHeight;1930 1931 for (yIndex = 0; yIndex < 4 ; yIndex++)1932 {1933 yIndexOffset = yIndex * 4;1934 yStartLine = yIndex * yInterval;1935 yEndLine = (yIndex == 3) ? imgHeight>>shiftHeight : (yStartLine+yInterval);1936 1937 for(i = yStartLine; i < yEndLine ; i++)1938 {1939 for(j = 0; j < xInterval ; j++)1940 {1941 imgYVar[i][j] = regionTable[yIndexOffset+0];1942 }1943 1944 for(j = xInterval; j < xInterval*2 ; j++)1945 {1946 imgYVar[i][j] = regionTable[yIndexOffset+1];1947 }1948 1949 for(j = xInterval*2; j < xInterval*3 ; j++)1950 {1951 imgYVar[i][j] = regionTable[yIndexOffset+2];1952 }1953 1954 for(j = xInterval*3; j < imgWidth>>shiftWidth ; j++)1955 {1956 imgYVar[i][j] = regionTable[yIndexOffset+3];1957 }1958 }1959 }1960 1961 }1962 1963 // --------------------------------------------------------------------------------------------------------------------1964 // ALF for chroma1965 // --------------------------------------------------------------------------------------------------------------------1966 1967 /**1968 \param pcPicDec picture before ALF1969 \param pcPicRest picture after ALF1970 \param qh filter coefficient1971 \param iTap filter tap1972 \param iColor 0 for Cb and 1 for Cr1973 */1974 Void TComAdaptiveLoopFilter::filterChroma(Pel *pImgRes, Pel *pImgPad, Int stride,1975 Int ypos, Int yposEnd, Int xpos, Int xposEnd,1976 Int filtNo, Int* coef)1977 {1978 static Int numBitsMinus1= (Int)ALF_NUM_BIT_SHIFT;1979 static Int offset = (1<<( (Int)ALF_NUM_BIT_SHIFT-1));1980 1981 Pel *pImgPad1,*pImgPad2,*pImgPad3,*pImgPad4;1982 Int i, j, pixelInt;1983 1984 pImgPad += (ypos*stride);1985 pImgRes += (ypos*stride);1986 1987 Int imgHeightChroma = m_img_height>>1;1988 Int yLineInLCU;1989 Int paddingline;1990 Int newCenterCoeff[4];1991 1992 ::memset(newCenterCoeff, 0, sizeof(Int)*4);1993 #if ALF_SINGLE_FILTER_SHAPE1994 if(filtNo == ALF_CROSS9x7_SQUARE3x3)1995 #else1996 if (filtNo == ALF_CROSS9x9)1997 #endif1998 {1999 //VB line 12000 newCenterCoeff[0] = coef[8] + ((coef[0] + coef[1] + coef[2] + coef[3])<<1);2001 //VB line 22002 newCenterCoeff[1] = coef[8] + ((coef[0] + coef[1] + coef[2])<<1);2003 //VB line 32004 newCenterCoeff[2] = coef[8] + ((coef[0] + coef[1])<<1);2005 //VB line 42006 newCenterCoeff[3] = coef[8] + ((coef[0])<<1);2007 }2008 2009 switch(filtNo)2010 {2011 #if !ALF_SINGLE_FILTER_SHAPE2012 case ALF_STAR5x5:2013 {2014 for(i= ypos; i<= yposEnd; i++)2015 {2016 yLineInLCU = i % m_lcuHeightChroma;2017 2018 if (yLineInLCU < m_lineIdxPadBotChroma || i-yLineInLCU+m_lcuHeightChroma >= imgHeightChroma )2019 {2020 pImgPad1 = pImgPad + stride;2021 pImgPad2 = pImgPad - stride;2022 pImgPad3 = pImgPad + 2*stride;2023 pImgPad4 = pImgPad - 2*stride;2024 }2025 else if (yLineInLCU < m_lineIdxPadTopChroma)2026 {2027 paddingline = - yLineInLCU + m_lineIdxPadTopChroma - 1;2028 pImgPad1 = pImgPad + min(paddingline, 1)*stride;2029 pImgPad2 = pImgPad - stride;2030 pImgPad3 = pImgPad + min(paddingline, 2)*stride;2031 pImgPad4 = pImgPad - 2*stride;2032 }2033 else2034 {2035 paddingline = yLineInLCU - m_lineIdxPadTopChroma ;2036 pImgPad1 = pImgPad + stride;2037 pImgPad2 = pImgPad - min(paddingline, 1)*stride;2038 pImgPad3 = pImgPad + 2*stride;2039 pImgPad4 = pImgPad - min(paddingline, 2)*stride;2040 }2041 2042 if ( (yLineInLCU == m_lineIdxPadTopChroma || yLineInLCU == m_lineIdxPadTopChroma-1) && i-yLineInLCU+m_lcuHeightChroma < imgHeightChroma )2043 {2044 for(j= xpos; j<= xposEnd ; j++)2045 {2046 pImgRes[j] = pImgPad[j];2047 }2048 }2049 else if ( (yLineInLCU == m_lineIdxPadTopChroma+1 || yLineInLCU == m_lineIdxPadTopChroma-2) && i-yLineInLCU+m_lcuHeightChroma < imgHeightChroma )2050 {2051 for(j= xpos; j<= xposEnd ; j++)2052 {2053 pixelInt = 0;2054 2055 pixelInt += coef[0]* (pImgPad3[j+2]+pImgPad4[j-2]);2056 pixelInt += coef[1]* (pImgPad3[j ]+pImgPad4[j ]);2057 pixelInt += coef[2]* (pImgPad3[j-2]+pImgPad4[j+2]);2058 2059 pixelInt += coef[3]* (pImgPad1[j+1]+pImgPad2[j-1]);2060 pixelInt += coef[4]* (pImgPad1[j ]+pImgPad2[j ]);2061 pixelInt += coef[5]* (pImgPad1[j-1]+pImgPad2[j+1]);2062 2063 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);2064 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);2065 pixelInt += coef[8]* (pImgPad[j ]);2066 2067 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);2068 2069 pImgRes[j] = (Clip( pixelInt ) + pImgPad[j]) >> 1;2070 }2071 }2072 else2073 {2074 2075 for(j= xpos; j<= xposEnd ; j++)2076 {2077 pixelInt = 0;2078 2079 pixelInt += coef[0]* (pImgPad3[j+2]+pImgPad4[j-2]);2080 pixelInt += coef[1]* (pImgPad3[j ]+pImgPad4[j ]);2081 pixelInt += coef[2]* (pImgPad3[j-2]+pImgPad4[j+2]);2082 2083 pixelInt += coef[3]* (pImgPad1[j+1]+pImgPad2[j-1]);2084 pixelInt += coef[4]* (pImgPad1[j ]+pImgPad2[j ]);2085 pixelInt += coef[5]* (pImgPad1[j-1]+pImgPad2[j+1]);2086 2087 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);2088 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);2089 pixelInt += coef[8]* (pImgPad[j ]);2090 2091 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);2092 2093 pImgRes[j] = Clip( pixelInt );2094 }2095 2096 }2097 pImgPad += stride;2098 pImgRes += stride;2099 }2100 }2101 break;2102 case ALF_CROSS9x9:2103 {2104 Pel *pImgPad5, *pImgPad6, *pImgPad7, *pImgPad8;2105 #else2106 case ALF_CROSS9x7_SQUARE3x3:2107 {2108 Pel *pImgPad5, *pImgPad6;2109 #endif2110 for(i= ypos; i<= yposEnd; i++)2111 {2112 yLineInLCU = i % m_lcuHeightChroma;2113 #if ALF_SINGLE_FILTER_SHAPE2114 if (yLineInLCU<2 && i> 2)2115 #else2116 if (yLineInLCU<2)2117 #endif2118 {2119 paddingline = yLineInLCU + 2 ;2120 pImgPad1 = pImgPad + stride;2121 pImgPad2 = pImgPad - stride;2122 pImgPad3 = pImgPad + 2*stride;2123 pImgPad4 = pImgPad - 2*stride;2124 #if ALF_SINGLE_FILTER_SHAPE2125 pImgPad5 = (paddingline < 3) ? pImgPad : pImgPad + 3*stride;2126 pImgPad6 = (paddingline < 3) ? pImgPad : pImgPad - min(paddingline, 3)*stride;2127 #else2128 pImgPad5 = pImgPad + 3*stride;2129 pImgPad6 = pImgPad - min(paddingline, 3)*stride;2130 pImgPad7 = pImgPad + 4*stride;2131 pImgPad8 = pImgPad - min(paddingline, 4)*stride;2132 #endif2133 }2134 else if (yLineInLCU < m_lineIdxPadBotChroma || i-yLineInLCU+m_lcuHeightChroma >= imgHeightChroma )2135 {2136 pImgPad1 = pImgPad + stride;2137 pImgPad2 = pImgPad - stride;2138 pImgPad3 = pImgPad + 2*stride;2139 pImgPad4 = pImgPad - 2*stride;2140 pImgPad5 = pImgPad + 3*stride;2141 pImgPad6 = pImgPad - 3*stride;2142 #if !ALF_SINGLE_FILTER_SHAPE2143 pImgPad7 = pImgPad + 4*stride;2144 pImgPad8 = pImgPad - 4*stride;2145 #endif2146 }2147 else if (yLineInLCU < m_lineIdxPadTopChroma)2148 {2149 paddingline = - yLineInLCU + m_lineIdxPadTopChroma - 1;2150 #if ALF_SINGLE_FILTER_SHAPE2151 pImgPad1 = (paddingline < 1) ? pImgPad : pImgPad + min(paddingline, 1)*stride;2152 pImgPad2 = (paddingline < 1) ? pImgPad : pImgPad - stride;2153 pImgPad3 = (paddingline < 2) ? pImgPad : pImgPad + min(paddingline, 2)*stride;2154 pImgPad4 = (paddingline < 2) ? pImgPad : pImgPad - 2*stride;2155 pImgPad5 = (paddingline < 3) ? pImgPad : pImgPad + min(paddingline, 3)*stride;2156 pImgPad6 = (paddingline < 3) ? pImgPad : pImgPad - 3*stride;2157 #else2158 pImgPad1 = pImgPad + min(paddingline, 1)*stride;2159 pImgPad2 = pImgPad - stride;2160 pImgPad3 = pImgPad + min(paddingline, 2)*stride;2161 pImgPad4 = pImgPad - 2*stride;2162 pImgPad5 = pImgPad + min(paddingline, 3)*stride;2163 pImgPad6 = pImgPad - 3*stride;2164 pImgPad7 = pImgPad + min(paddingline, 4)*stride;2165 pImgPad8 = pImgPad - 4*stride;2166 #endif2167 }2168 else2169 {2170 paddingline = yLineInLCU - m_lineIdxPadTopChroma ;2171 #if ALF_SINGLE_FILTER_SHAPE2172 pImgPad1 = (paddingline < 1) ? pImgPad : pImgPad + stride;2173 pImgPad2 = (paddingline < 1) ? pImgPad : pImgPad - min(paddingline, 1)*stride;2174 pImgPad3 = (paddingline < 2) ? pImgPad : pImgPad + 2*stride;2175 pImgPad4 = (paddingline < 2) ? pImgPad : pImgPad - min(paddingline, 2)*stride;2176 pImgPad5 = (paddingline < 3) ? pImgPad : pImgPad + 3*stride;2177 pImgPad6 = (paddingline < 3) ? pImgPad : pImgPad - min(paddingline, 3)*stride;2178 #else2179 pImgPad1 = pImgPad + stride;2180 pImgPad2 = pImgPad - min(paddingline, 1)*stride;2181 pImgPad3 = pImgPad + 2*stride;2182 pImgPad4 = pImgPad - min(paddingline, 2)*stride;2183 pImgPad5 = pImgPad + 3*stride;2184 pImgPad6 = pImgPad - min(paddingline, 3)*stride;2185 pImgPad7 = pImgPad + 4*stride;2186 pImgPad8 = pImgPad - min(paddingline, 4)*stride;2187 #endif2188 }2189 2190 #if ALF_SINGLE_FILTER_SHAPE2191 for(j= xpos; j<= xposEnd ; j++)2192 {2193 pixelInt = 0;2194 2195 pixelInt += coef[0]* (pImgPad5[j]+pImgPad6[j]);2196 pixelInt += coef[1]* (pImgPad3[j]+pImgPad4[j]);2197 pixelInt += coef[2]* (pImgPad1[j-1]+pImgPad2[j+1]);2198 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);2199 pixelInt += coef[4]* (pImgPad1[j+1]+pImgPad2[j-1]);2200 pixelInt += coef[5]* (pImgPad[j+4]+pImgPad[j-4]);2201 pixelInt += coef[6]* (pImgPad[j+3]+pImgPad[j-3]);2202 pixelInt += coef[7]* (pImgPad[j+2]+pImgPad[j-2]);2203 pixelInt += coef[8]* (pImgPad[j+1]+pImgPad[j-1]);2204 pixelInt += coef[9]* (pImgPad[j ]);2205 2206 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);2207 2208 pImgRes[j] = Clip( pixelInt );2209 }2210 #else2211 if ( (yLineInLCU == m_lineIdxPadTopChroma || yLineInLCU == m_lineIdxPadTopChroma-1) && i-yLineInLCU+m_lcuHeightChroma < imgHeightChroma )2212 {2213 for(j= xpos; j<= xposEnd ; j++)2214 {2215 pixelInt = 0;2216 2217 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);2218 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);2219 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);2220 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);2221 pixelInt += newCenterCoeff[0]* (pImgPad[j ]);2222 2223 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);2224 2225 pImgRes[j] = Clip( pixelInt );2226 }2227 }2228 else if ( (yLineInLCU == m_lineIdxPadTopChroma+1 || yLineInLCU == m_lineIdxPadTopChroma-2) && i-yLineInLCU+m_lcuHeightChroma < imgHeightChroma )2229 {2230 for(j= xpos; j<= xposEnd ; j++)2231 {2232 pixelInt = 0;2233 2234 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);2235 2236 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);2237 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);2238 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);2239 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);2240 pixelInt += newCenterCoeff[1]* (pImgPad[j ]);2241 2242 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);2243 2244 pImgRes[j] = Clip( pixelInt );2245 }2246 }2247 else if ( (yLineInLCU == 0 && i>0) || (yLineInLCU == m_lineIdxPadTopChroma-3 && i-yLineInLCU+m_lcuHeightChroma < imgHeightChroma) )2248 {2249 for(j= xpos; j<= xposEnd ; j++)2250 {2251 pixelInt = 0;2252 2253 pixelInt += coef[2]* (pImgPad3[j]+pImgPad4[j]);2254 2255 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);2256 2257 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);2258 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);2259 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);2260 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);2261 pixelInt += newCenterCoeff[2]* (pImgPad[j ]);2262 2263 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);2264 2265 pImgRes[j] = Clip( pixelInt );2266 }2267 }2268 else if ( (yLineInLCU == 1 && i>1) || (yLineInLCU == m_lineIdxPadTopChroma-4 && i-yLineInLCU+m_lcuHeightChroma < imgHeightChroma) )2269 {2270 for(j= xpos; j<= xposEnd ; j++)2271 {2272 pixelInt = 0;2273 2274 pixelInt += coef[1]* (pImgPad5[j]+pImgPad6[j]);2275 2276 pixelInt += coef[2]* (pImgPad3[j]+pImgPad4[j]);2277 2278 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);2279 2280 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);2281 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);2282 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);2283 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);2284 pixelInt += newCenterCoeff[3]* (pImgPad[j ]);2285 2286 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);2287 2288 pImgRes[j] = Clip( pixelInt );2289 }2290 }2291 else2292 {2293 for(j= xpos; j<= xposEnd ; j++)2294 {2295 pixelInt = 0;2296 2297 pixelInt += coef[0]* (pImgPad7[j]+pImgPad8[j]);2298 2299 pixelInt += coef[1]* (pImgPad5[j]+pImgPad6[j]);2300 2301 pixelInt += coef[2]* (pImgPad3[j]+pImgPad4[j]);2302 2303 pixelInt += coef[3]* (pImgPad1[j]+pImgPad2[j]);2304 2305 pixelInt += coef[4]* (pImgPad[j+4]+pImgPad[j-4]);2306 pixelInt += coef[5]* (pImgPad[j+3]+pImgPad[j-3]);2307 pixelInt += coef[6]* (pImgPad[j+2]+pImgPad[j-2]);2308 pixelInt += coef[7]* (pImgPad[j+1]+pImgPad[j-1]);2309 pixelInt += coef[8]* (pImgPad[j ]);2310 2311 pixelInt=(Int)((pixelInt+offset) >> numBitsMinus1);2312 2313 pImgRes[j] = Clip( pixelInt );2314 }2315 }2316 #endif2317 pImgPad += stride;2318 pImgRes += stride;2319 2320 }2321 }2322 2323 break;2324 default:2325 {2326 printf("Not a supported filter shape\n");2327 assert(0);2328 exit(1);2329 }2330 }2331 2332 }2333 2334 /** Chroma filtering for multi-slice picture2335 * \param componentID slice parameters2336 * \param pcPicDecYuv original picture2337 * \param pcPicRestYuv picture before filtering2338 * \param coeff filter coefficients2339 * \param filtNo filter shape2340 * \param chromaFormatShift size adjustment for chroma (1 for 4:2:0 format)2341 */2342 Void TComAdaptiveLoopFilter::xFilterChromaSlices(Int componentID, TComPicYuv* pcPicDecYuv, TComPicYuv* pcPicRestYuv, Int *coeff, Int filtNo, Int chromaFormatShift)2343 {2344 Pel* pPicDec = (componentID == ALF_Cb)?( pcPicDecYuv->getCbAddr()):( pcPicDecYuv->getCrAddr());2345 Pel* pPicSlice = (componentID == ALF_Cb)?(m_pcSliceYuvTmp->getCbAddr()):(m_pcSliceYuvTmp->getCrAddr());2346 Pel* pRest = (componentID == ALF_Cb)?( pcPicRestYuv->getCbAddr()):( pcPicRestYuv->getCrAddr());2347 Int stride = pcPicDecYuv->getCStride();2348 2349 for(UInt s=0; s< m_uiNumSlicesInPic; s++)2350 {2351 if(!m_pcPic->getValidSlice(s))2352 {2353 continue;2354 }2355 std::vector< std::vector<AlfLCUInfo*> > & vpSliceTileAlfLCU = m_pvpSliceTileAlfLCU[s];2356 2357 for(Int t=0; t< (Int)vpSliceTileAlfLCU.size(); t++)2358 {2359 std::vector<AlfLCUInfo*> & vpAlfLCU = vpSliceTileAlfLCU[t];2360 2361 copyRegion(vpAlfLCU, pPicSlice, pPicDec, stride, chromaFormatShift);2362 extendRegionBorder(vpAlfLCU, pPicSlice, stride, chromaFormatShift);2363 filterChromaRegion(vpAlfLCU, pPicSlice, pRest, stride, coeff, filtNo, chromaFormatShift);2364 }2365 }2366 }2367 2368 /** Chroma filtering for one component in multi-slice picture2369 * \param componentID slice parameters2370 * \param pcPicDecYuv original picture2371 * \param pcPicRestYuv picture before filtering2372 * \param shape filter shape2373 * \param pCoeff filter coefficients2374 */2375 Void TComAdaptiveLoopFilter::xFilterChromaOneCmp(Int componentID, TComPicYuv *pDecYuv, TComPicYuv *pRestYuv, Int shape, Int *pCoeff)2376 {2377 Int chromaFormatShift = 1;2378 if(!m_bUseNonCrossALF)2379 {2380 Pel* pDec = (componentID == ALF_Cb)?(pDecYuv->getCbAddr()): (pDecYuv->getCrAddr());2381 Pel* pRest = (componentID == ALF_Cb)?(pRestYuv->getCbAddr()):(pRestYuv->getCrAddr());2382 Int iStride = pDecYuv->getCStride();2383 filterChroma(pRest, pDec, iStride, 0, (Int)(m_img_height>>1) -1, 0, (Int)(m_img_width>>1)-1, shape, pCoeff);2384 }2385 else2386 {2387 xFilterChromaSlices(componentID, pDecYuv, pRestYuv, pCoeff, shape, chromaFormatShift);2388 }2389 }2390 2391 /** Chroma filtering for multi-slice picture2392 * \param pcAlfParam ALF parameters2393 * \param pcPicDec to-be-filtered picture buffer2394 * \param pcPicRest filtered picture buffer2395 */2396 Void TComAdaptiveLoopFilter::xALFChroma(ALFParam* pcAlfParam, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest)2397 {2398 if((pcAlfParam->chroma_idc>>1)&0x01)2399 {2400 xFilterChromaOneCmp(ALF_Cb, pcPicDec, pcPicRest, pcAlfParam->filter_shape_chroma, pcAlfParam->coeff_chroma);2401 }2402 2403 if(pcAlfParam->chroma_idc&0x01)2404 {2405 xFilterChromaOneCmp(ALF_Cr, pcPicDec, pcPicRest, pcAlfParam->filter_shape_chroma, pcAlfParam->coeff_chroma);2406 }2407 }2408 2409 #endif2410 921 2411 922 Void TComAdaptiveLoopFilter::setAlfCtrlFlags(AlfCUCtrlInfo* pAlfParam, TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt &idx) … … 2498 1009 * \param numSlicesInPic number of slices in picture 2499 1010 */ 2500 #if LCU_SYNTAX_ALF2501 1011 Void TComAdaptiveLoopFilter::createPicAlfInfo(TComPic* pcPic, Int numSlicesInPic, Int alfQP) 2502 #else2503 Void TComAdaptiveLoopFilter::createPicAlfInfo(TComPic* pcPic, Int numSlicesInPic)2504 #endif2505 1012 { 2506 1013 m_uiNumSlicesInPic = numSlicesInPic; … … 2510 1017 m_pcPic = pcPic; 2511 1018 2512 #if LCU_SYNTAX_ALF2513 1019 m_isNonCrossSlice = pcPic->getIndependentSliceBoundaryForNDBFilter(); 2514 1020 m_suWidth = pcPic->getMinCUWidth(); 2515 1021 m_suHeight= pcPic->getMinCUHeight(); 2516 1022 m_alfQP = alfQP; 2517 #endif2518 #if !LCU_SYNTAX_ALF2519 if(m_uiNumSlicesInPic > 1 || m_bUseNonCrossALF)2520 {2521 #endif2522 1023 m_ppSliceAlfLCUs = new AlfLCUInfo*[m_uiNumSlicesInPic]; 2523 1024 m_pvpAlfLCU = new std::vector< AlfLCUInfo* >[m_uiNumSlicesInPic]; … … 2584 1085 m_pcSliceYuvTmp = pcPic->getYuvPicBufferForIndependentBoundaryProcessing(); 2585 1086 } 2586 #if !LCU_SYNTAX_ALF2587 }2588 #endif2589 1087 2590 1088 } … … 2594 1092 Void TComAdaptiveLoopFilter::destroyPicAlfInfo() 2595 1093 { 2596 #if !LCU_SYNTAX_ALF2597 if(m_bUseNonCrossALF)2598 {2599 #endif2600 1094 for(Int s=0; s< m_uiNumSlicesInPic; s++) 2601 1095 { … … 2614 1108 delete[] m_pvpSliceTileAlfLCU; 2615 1109 m_pvpSliceTileAlfLCU = NULL; 2616 #if !LCU_SYNTAX_ALF 2617 } 2618 #endif 2619 } 2620 2621 #if !LCU_SYNTAX_ALF 2622 /** ALF for cu-on/off-controlled region 2623 * \param vpAlfLCU ALF LCU information container 2624 * \param imgDec to-be-filtered picture buffer 2625 * \param imgRest filtered picture buffer 2626 * \param stride picture buffer stride size 2627 * \param filtNo filter shape 2628 * \param filterCoeff filter coefficients 2629 * \param mergeTable merge table for filter set 2630 * \param varImg BA index 2631 */ 2632 Void TComAdaptiveLoopFilter::xCUAdaptiveRegion(std::vector<AlfLCUInfo*> &vpAlfLCU, Pel* imgDec, Pel* imgRest, Int stride, Int filtNo, Int** filterCoeff, Int* mergeTable, Pel** varImg) 2633 { 2634 UInt SUWidth = m_pcPic->getMinCUWidth(); 2635 UInt SUHeight = m_pcPic->getMinCUHeight(); 2636 UInt idx, startSU, endSU, currSU, LCUX, LCUY, LPelX, TPelY; 2637 TComDataCU* pcCU; 2638 2639 for(idx=0; idx< vpAlfLCU.size(); idx++) 2640 { 2641 AlfLCUInfo& rAlfLCU = *(vpAlfLCU[idx]); 2642 pcCU = rAlfLCU.pcCU; 2643 startSU = rAlfLCU.startSU; 2644 endSU = rAlfLCU.endSU; 2645 LCUX = pcCU->getCUPelX(); 2646 LCUY = pcCU->getCUPelY(); 2647 2648 for(currSU= startSU; currSU<= endSU; currSU++) 2649 { 2650 LPelX = LCUX + g_auiRasterToPelX[ g_auiZscanToRaster[currSU] ]; 2651 TPelY = LCUY + g_auiRasterToPelY[ g_auiZscanToRaster[currSU] ]; 2652 if( !( LPelX < m_img_width ) || !( TPelY < m_img_height ) ) 2653 { 2654 continue; 2655 } 2656 if(pcCU->getAlfCtrlFlag(currSU)) 2657 { 2658 filterLuma(imgRest, imgDec, stride, TPelY, TPelY+ SUHeight-1, LPelX, LPelX+ SUWidth-1, filtNo, m_filterCoeffSym, m_varIndTab, m_varImg); 2659 } 2660 } 2661 } 2662 2663 } 2664 2665 /** ALF for "non" cu-on/off-controlled region 2666 * \param vpAlfLCU ALF LCU information container 2667 * \param imgDec to-be-filtered picture buffer 2668 * \param imgRest filtered picture buffer 2669 * \param stride picture buffer stride size 2670 * \param filtNo filter shape 2671 * \param filterCoeff filter coefficients 2672 * \param mergeTable merge table for filter set 2673 * \param varImg BA index 2674 */ 2675 Void TComAdaptiveLoopFilter::filterLumaRegion(std::vector<AlfLCUInfo*> &vpAlfLCU, Pel* imgDec, Pel* imgRest, Int stride, Int filtNo, Int** filterCoeff, Int* mergeTable, Pel** varImg) 2676 { 2677 2678 Int height, width; 2679 Int ypos, xpos; 2680 2681 for(Int i=0; i< vpAlfLCU.size(); i++) 2682 { 2683 AlfLCUInfo& rAlfLCU = *(vpAlfLCU[i]); 2684 for(UInt j=0; j< rAlfLCU.numSGU; j++) 2685 { 2686 ypos = (Int)(rAlfLCU[j].posY ); 2687 xpos = (Int)(rAlfLCU[j].posX ); 2688 height = (Int)(rAlfLCU[j].height); 2689 width = (Int)(rAlfLCU[j].width ); 2690 2691 filterLuma(imgRest, imgDec, stride, ypos, ypos+ height-1, xpos, xpos+ width-1, filtNo, filterCoeff, mergeTable, varImg); 2692 } 2693 } 2694 } 2695 2696 2697 /** Perform ALF for one chroma region 2698 * \param vpAlfLCU ALF LCU data container 2699 * \param pDec to-be-filtered picture buffer 2700 * \param pRest filtered picture buffer 2701 * \param stride picture buffer stride 2702 * \param coeff filter coefficients 2703 * \param filtNo filter shape 2704 * \param chromaFormatShift chroma component size adjustment (1 for 4:2:0) 2705 */ 2706 Void TComAdaptiveLoopFilter::filterChromaRegion(std::vector<AlfLCUInfo*> &vpAlfLCU, Pel* pDec, Pel* pRest, Int stride, Int *coeff, Int filtNo, Int chromaFormatShift) 2707 { 2708 Int height, width; 2709 Int ypos, xpos; 2710 2711 for(Int i=0; i< vpAlfLCU.size(); i++) 2712 { 2713 AlfLCUInfo& cAlfLCU = *(vpAlfLCU[i]); 2714 for(Int j=0; j< cAlfLCU.numSGU; j++) 2715 { 2716 ypos = (Int)(cAlfLCU[j].posY >> chromaFormatShift); 2717 xpos = (Int)(cAlfLCU[j].posX >> chromaFormatShift); 2718 height = (Int)(cAlfLCU[j].height >> chromaFormatShift); 2719 width = (Int)(cAlfLCU[j].width >> chromaFormatShift); 2720 2721 filterChroma(pRest, pDec, stride, ypos, ypos+ height -1, xpos, xpos+ width-1, filtNo, coeff); 2722 } 2723 } 2724 } 2725 2726 #endif 1110 } 1111 2727 1112 2728 1113 /** Copy ALF CU control flags from ALF parameters for slices … … 2846 1231 { 2847 1232 NDBFBlockInfo& rSGU = rAlfLCU[n]; 2848 #if LCU_SYNTAX_ALF2849 1233 if(rSGU.allBordersAvailable) 2850 1234 { 2851 1235 continue; 2852 1236 } 2853 #endif2854 1237 posX = rSGU.posX >> formatShift; 2855 1238 posY = rSGU.posY >> formatShift; … … 3127 1510 } 3128 1511 3129 #if LCU_SYNTAX_ALF3130 1512 /** reconstruct ALF luma coefficient 3131 1513 * \param [in] alfLCUParam ALF parameters … … 3232 1614 coeffPred = (1<<ALF_NUM_BIT_SHIFT) - sum; 3233 1615 #endif 3234 #if ALF_CHROMA_COEF_PRED_HARMONIZATION3235 1616 filterCoeff[0][alfLCUParam->num_coeff-1] = coeffPred + alfLCUParam->coeffmulti[0][alfLCUParam->num_coeff-1]; 3236 #else3237 filterCoeff[0][alfLCUParam->num_coeff-1] = coeffPred - alfLCUParam->coeffmulti[0][alfLCUParam->num_coeff-1];3238 #endif3239 1617 } 3240 1618 … … 3444 1822 Int pred = (1<<ALF_NUM_BIT_SHIFT) - (sum); 3445 1823 #endif 3446 #if ALF_CHROMA_COEF_PRED_HARMONIZATION3447 1824 coeff[numCoef-1] = coeff[numCoef-1] - pred; 3448 #else 3449 coeff[numCoef-1] = pred- coeff[numCoef-1]; 3450 #endif 3451 } 3452 3453 #if ALF_SINGLE_FILTER_SHAPE 1825 } 1826 3454 1827 /** filtering pixels 3455 1828 * \param [out] imgRes filtered picture … … 3576 1949 } 3577 1950 } 3578 #endif3579 1951 3580 1952 #if LCUALF_QP_DEPENDENT_BITS … … 3623 1995 static Int shiftW = (Int)(log((double)VAR_SIZE_W)/log(2.0)); 3624 1996 static Int varMax = (Int)NO_VAR_BINS-1; 3625 #if ALF_16_BA_GROUPS3626 1997 static Int th[NO_VAR_BINS] = {0, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5}; 3627 1998 static Int avgVarTab[3][6] = { {0, 1, 2, 3, 4, 5,}, 3628 1999 {0, 6, 7, 8, 9, 10,}, 3629 2000 {0, 11, 12, 13, 14, 15} }; 3630 #else3631 static Int step = (Int)((Int)(NO_VAR_BINS)/3) - 1;3632 static Int th[NO_VAR_BINS] = {0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4};3633 #endif3634 2001 3635 2002 Int i, j, avgVar, vertical, horizontal, direction, yOffset; … … 3683 2050 avgVar = (Pel) Clip_post( varMax, avgVar>>(g_uiBitIncrement+1) ); 3684 2051 avgVar = th[avgVar]; 3685 #if ALF_16_BA_GROUPS3686 2052 avgVar = avgVarTab[direction][avgVar]; 3687 #else3688 avgVar = Clip_post(step, (Int)avgVar) + (step+1)*direction;3689 #endif3690 2053 imgYvar[i>>shiftH][j>>shiftW] = avgVar; 3691 2054 } … … 3767 2130 return pBuf; 3768 2131 } 3769 #endif3770 2132 3771 2133 -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComAdaptiveLoopFilter.h
r56 r294 49 49 // ==================================================================================================================== 50 50 51 #if LCU_SYNTAX_ALF52 51 #define LCUALF_QP_DEPENDENT_BITS 1 53 #endif 54 55 #if ALF_SINGLE_FILTER_SHAPE 52 56 53 #define ALF_FILTER_LEN 10 57 54 #define ALF_MAX_NUM_COEF ALF_FILTER_LEN //!< maximum number of filter coefficients 58 #else59 #define ALF_MAX_NUM_COEF 9 //!< maximum number of filter coefficients60 #endif61 55 #define MAX_SQR_FILT_LENGTH 41 //!< ((max_horizontal_tap * max_vertical_tap) / 2 + 1) = ((11 * 5) / 2 + 1) 62 56 63 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS57 #if LCUALF_QP_DEPENDENT_BITS 64 58 #define ALF_QP1 28 65 59 #define ALF_QP2 34 … … 78 72 79 73 80 #if LCU_SYNTAX_ALF81 74 /// Luma/Chroma component ID 82 75 enum ALFComponentID … … 96 89 NUM_ALF_MERGE_TYPE 97 90 }; 98 #else99 ///100 /// Chroma component ID101 ///102 enum AlfChromaID103 {104 ALF_Cb = 0,105 ALF_Cr = 1106 };107 108 109 ///110 /// Adaptation mode ID111 ///112 enum ALFClassficationMethod113 {114 ALF_BA =0,115 ALF_RA,116 NUM_ALF_CLASS_METHOD117 };118 #endif119 91 /// 120 92 /// Filter shape … … 122 94 enum ALFFilterShape 123 95 { 124 #if ALF_SINGLE_FILTER_SHAPE125 96 ALF_CROSS9x7_SQUARE3x3 = 0, 126 #else127 ALF_STAR5x5 = 0,128 ALF_CROSS9x9,129 #endif130 97 NUM_ALF_FILTER_SHAPE 131 98 }; 132 99 133 #if LCU_SYNTAX_ALF134 100 extern Int* kTableTabShapes[NUM_ALF_FILTER_SHAPE]; 135 #endif136 #if ALF_SINGLE_FILTER_SHAPE137 101 extern Int depthIntShape1Sym[ALF_MAX_NUM_COEF+1]; 138 #else139 extern Int depthIntShape0Sym[10];140 extern Int depthIntShape1Sym[10];141 #endif142 102 extern Int *pDepthIntTabShapes[NUM_ALF_FILTER_SHAPE]; 143 103 … … 156 116 const AlfCUCtrlInfo& operator= (const AlfCUCtrlInfo& src); //!< "=" operator 157 117 AlfCUCtrlInfo():cu_control_flag(0), num_alf_cu_flag(0), alf_max_depth(0) {} //!< constructor 158 #if LCU_SYNTAX_ALF159 118 Void reset(); 160 #endif161 119 }; 162 120 … … 190 148 191 149 // filter shape information 192 #if ALF_SINGLE_FILTER_SHAPE193 150 static Int weightsShape1Sym[ALF_MAX_NUM_COEF+1]; 194 #else195 static Int weightsShape0Sym[10];196 static Int weightsShape1Sym[10];197 #endif198 151 static Int *weightsTabShapes[NUM_ALF_FILTER_SHAPE]; 199 152 static Int m_sqrFiltLengthTab[NUM_ALF_FILTER_SHAPE]; … … 209 162 //classification 210 163 Int m_varIndTab[NO_VAR_BINS]; 211 #if !LCU_SYNTAX_ALF212 UInt m_uiVarGenMethod;213 Pel** m_varImgMethods[NUM_ALF_CLASS_METHOD];214 #endif215 164 Pel** m_varImg; 216 165 … … 237 186 std::vector< std::vector< AlfLCUInfo* > > *m_pvpSliceTileAlfLCU; 238 187 239 #if LCU_SYNTAX_ALF240 188 Int m_suWidth; 241 189 Int m_suHeight; … … 245 193 Bool m_isNonCrossSlice; 246 194 Int m_alfQP; 247 #endif248 195 249 196 private: //private member variables … … 252 199 protected: //protected methods 253 200 254 #if LCU_SYNTAX_ALF255 201 Void createLCUAlfInfo(); 256 202 Void destroyLCUAlfInfo(); … … 266 212 Bool isEnabledComponent(ALFParam** alfLCUParam); 267 213 Int getAlfPrecisionBit(Int qp); 268 #if ALF_SINGLE_FILTER_SHAPE269 214 Void filterOneCompRegion(Pel *imgRes, Pel *imgPad, Int stride, Bool isChroma, Int yPos, Int yPosEnd, Int xPos, Int xPosEnd, Int** filterSet, Int* mergeTable, Pel** varImg); 270 #endif271 215 Void calcOneRegionVar(Pel **imgYvar, Pel *imgYpad, Int stride, Bool isOnlyOneGroup, Int yPos, Int yPosEnd, Int xPos, Int xPosEnd); 272 #endif273 216 274 217 275 218 Void InitAlfLCUInfo(AlfLCUInfo& rAlfLCU, Int sliceID, Int tileID, TComDataCU* pcCU, UInt maxNumSUInLCU); 276 #if !LCU_SYNTAX_ALF277 Void createRegionIndexMap(Pel **imgY_var, Int img_width, Int img_height); //!< create RA index for regions278 Void calcVar(Pel **imgYvar, Pel *imgYpad, Int stride, Int adaptationMode); //!< Calculate ALF grouping indices for block-based (BA) mode279 Void filterLuma(Pel *pImgYRes, Pel *pImgYPad, Int stride, Int ypos, Int yposEnd, Int xpos, Int xposEnd, Int filtNo, Int** filterSet, Int* mergeTable, Pel** ppVarImg); //!< filtering operation for luma region280 Void filterChroma(Pel *pImgRes, Pel *pImgPad, Int stride, Int ypos, Int yposEnd, Int xpos, Int xposEnd, Int filtNo, Int* coef);281 Void filterChromaRegion(std::vector<AlfLCUInfo*> &vpAlfLCU, Pel* pDec, Pel* pRest, Int stride, Int *coeff, Int filtNo, Int chromaFormatShift); //!< filtering operation for chroma region282 Void xCUAdaptive (TComPic* pcPic, Int filtNo, Pel *imgYFilt, Pel *imgYRec, Int Stride);283 Void xSubCUAdaptive(TComDataCU* pcCU, Int filtNo, Pel *imgYFilt, Pel *imgYRec, UInt uiAbsPartIdx, UInt uiDepth, Int Stride);284 Void reconstructFilterCoeffs(ALFParam* pcAlfParam,int **pfilterCoeffSym);285 Void predictALFCoeffLuma ( ALFParam* pAlfParam ); //!< prediction of luma ALF coefficients286 #endif287 219 Void checkFilterCoeffValue( Int *filter, Int filterLength, Bool isChroma ); 288 #if !LCU_SYNTAX_ALF289 Void decodeFilterSet(ALFParam* pcAlfParam, Int* varIndTab, Int** filterCoeff);290 Void xALFChroma ( ALFParam* pcAlfParam, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest );291 Void xFilterChromaSlices(Int componentID, TComPicYuv* pcPicDecYuv, TComPicYuv* pcPicRestYuv, Int *coeff, Int filtNo, Int chromaFormatShift);292 Void xFilterChromaOneCmp(Int componentID, TComPicYuv *pDecYuv, TComPicYuv *pRestYuv, Int shape, Int *pCoeff);293 Void xALFLuma( TComPic* pcPic, ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest );294 #endif295 220 Void setAlfCtrlFlags(AlfCUCtrlInfo* pAlfParam, TComDataCU *pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt &idx); 296 221 Void transferCtrlFlagsFromAlfParam(std::vector<AlfCUCtrlInfo>& vAlfParamSlices); //!< Copy ALF CU control flags from ALF parameters for slices … … 299 224 Void copyRegion(std::vector<AlfLCUInfo*> &vpAlfLCU, Pel* pPicDst, Pel* pPicSrc, Int stride, Int formatShift = 0); 300 225 Void extendRegionBorder(std::vector<AlfLCUInfo*> &vpAlfLCU, Pel* pPelSrc, Int stride, Int formatShift = 0); 301 #if !LCU_SYNTAX_ALF302 Void filterLumaRegion (std::vector<AlfLCUInfo*> &vpAlfLCU, Pel* imgDec, Pel* imgRest, Int stride, Int filtNo, Int** filterCoeff, Int* mergeTable, Pel** varImg);303 Void xCUAdaptiveRegion(std::vector<AlfLCUInfo*> &vpAlfLCU, Pel* imgDec, Pel* imgRest, Int stride, Int filtNo, Int** filterCoeff, Int* mergeTable, Pel** varImg);304 #endif305 226 Int getCtrlFlagsFromAlfParam(AlfLCUInfo* pcAlfLCU, Int iAlfDepth, UInt* puiFlags); 306 227 … … 317 238 Void destroy (); 318 239 319 #if LCU_SYNTAX_ALF320 240 Void ALFProcess (TComPic* pcPic, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam, Bool isAlfCoefInSlice); 321 241 Void resetLCUAlfInfo (); … … 324 244 325 245 ALFParam*** getAlfLCUParam() {return m_alfFiltInfo;} 326 #else327 Void predictALFCoeffChroma ( ALFParam* pAlfParam ); //!< prediction of chroma ALF coefficients328 #if ALF_CHROMA_COEF_PRED_HARMONIZATION329 Void reconstructALFCoeffChroma( ALFParam* pAlfParam );330 #endif331 Void ALFProcess ( TComPic* pcPic, ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam ); ///< interface function for ALF process332 333 Void allocALFParam ( ALFParam* pAlfParam ); //!< allocate ALF parameters334 Void freeALFParam ( ALFParam* pAlfParam ); //!< free ALF parameters335 Void copyALFParam ( ALFParam* pDesAlfParam, ALFParam* pSrcAlfParam ); //!< copy ALF parameters336 #endif337 246 Int getNumCUsInPic() {return m_uiNumCUsInFrame;} //!< get number of LCU in picture for ALF process 338 #if LCU_SYNTAX_ALF339 247 Void createPicAlfInfo (TComPic* pcPic, Int uiNumSlicesInPic = 1, Int alfQP = 26); 340 #else341 Void createPicAlfInfo (TComPic* pcPic, Int numSlicesInPic = 1);342 #endif343 248 Void destroyPicAlfInfo(); 344 249 -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComBitStream.cpp
r56 r294 73 73 m_puiTileMarkerLocation = new UInt[MAX_MARKER_PER_NALU]; 74 74 m_uiTileMarkerLocationCount = 0; 75 #if TILES_WPP_ENTRY_POINT_SIGNALLING76 75 m_numBitsRead = 0; 77 #endif78 76 } 79 77 … … 212 210 assert( uiNumberOfBits <= 32 ); 213 211 214 #if TILES_WPP_ENTRY_POINT_SIGNALLING215 212 m_numBitsRead += uiNumberOfBits; 216 #endif217 213 218 214 /* NB, bits are extracted from the MSB of each byte. */ … … 334 330 buf->push_back(uiByte); 335 331 } 336 #if OL_FLUSH &&!OL_FLUSH_ALIGN332 #if !OL_FLUSH_ALIGN 337 333 buf->push_back(0); // The final chunk might not start byte aligned. 338 334 #endif -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComBitStream.h
r56 r294 176 176 UInt m_uiTileMarkerLocationCount; 177 177 UInt *m_puiTileMarkerLocation; 178 #if TILES_WPP_ENTRY_POINT_SIGNALLING179 178 UInt m_numBitsRead; 180 #endif181 179 182 180 public: … … 192 190 Void pseudoRead ( UInt uiNumberOfBits, UInt& ruiBits ); 193 191 Void read ( UInt uiNumberOfBits, UInt& ruiBits ); 194 #if OL_FLUSH &&!OL_FLUSH_ALIGN192 #if !OL_FLUSH_ALIGN 195 193 Void readByte ( UInt &ruiBits ) 196 194 { … … 228 226 Void backupByte() { m_fifo_idx--; } 229 227 #endif 230 #if TILES_WPP_ENTRY_POINT_SIGNALLING231 228 UInt getNumBitsRead() { return m_numBitsRead; } 229 }; 230 231 //! \} 232 232 233 #endif 233 };234 235 //! \}236 237 #endif -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComDataCU.cpp
r293 r294 105 105 } 106 106 iVSPIndexTrue[idx] = iCount; 107 #if SIMP_MRG_PRUN108 107 if ( mrgCandIdx == iCount ) 109 108 { 110 109 return false; 111 110 } 112 #endif113 111 iCount ++; 114 112 } … … 257 255 if ( !bDecSubCu ) 258 256 { 259 #if H0736_AVC_STYLE_QP_RANGE260 257 m_phQP = (Char* )xMalloc(Char, uiNumPartition); 261 #else262 m_phQP = (UChar* )xMalloc(UChar, uiNumPartition);263 #endif264 258 m_puhDepth = (UChar* )xMalloc(UChar, uiNumPartition); 265 259 #if HHI_MPI … … 550 544 this->height = src.height; 551 545 ::memcpy(this->isBorderAvailable, src.isBorderAvailable, sizeof(Bool)*((Int)NUM_SGU_BORDER)); 552 #if LCU_SYNTAX_ALF553 546 this->allBordersAvailable = src.allBordersAvailable; 554 #endif555 547 556 548 return *this; … … 587 579 m_uiTotalBins = 0; 588 580 m_uiNumPartition = pcPic->getNumPartInCU(); 589 #if BURST_IPCM590 581 m_numSucIPCM = 0; 591 582 m_lastCUSucIPCMFlag = false; 592 #endif593 583 594 584 for(int i=0; i<pcPic->getNumPartInCU(); i++) … … 816 806 } 817 807 818 #if H0736_AVC_STYLE_QP_RANGE819 808 /** initialize prediction data with enabling sub-LCU-level delta QP 820 809 *\param uiDepth depth of the current CU … … 825 814 */ 826 815 Void TComDataCU::initEstData( UInt uiDepth, Int qp ) 827 #else828 /** initialize prediction data with enabling sub-LCU-level delta QP829 *\param uiDepth depth of the current CU830 *\param uiQP QP for the current CU831 *- set CU width and CU height according to depth832 *- set QP value according to input QP833 *- set last-coded QP value according to input last-coded QP834 */835 Void TComDataCU::initEstData( UInt uiDepth, UInt uiQP )836 #endif837 816 { 838 817 m_dTotalCost = MAX_DOUBLE; … … 866 845 m_pePredMode[ui] = MODE_NONE; 867 846 m_pbIPCMFlag[ui] = 0; 868 #if H0736_AVC_STYLE_QP_RANGE869 847 m_phQP[ui] = qp; 870 #else871 m_phQP[ui] = uiQP;872 #endif873 848 m_puiAlfCtrlFlag[ui]= false; 874 849 m_pbMergeFlag[ui] = 0; … … 947 922 948 923 // initialize Sub partition 949 #if H0736_AVC_STYLE_QP_RANGE950 924 Void TComDataCU::initSubCU( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth, Int qp ) 951 #else952 Void TComDataCU::initSubCU( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth, UInt uiQP )953 #endif954 925 { 955 926 assert( uiPartUnitIdx<4 ); … … 971 942 m_uiNumPartition = pcCU->getTotalNumPart() >> 2; 972 943 973 #if BURST_IPCM974 944 m_numSucIPCM = 0; 975 945 m_lastCUSucIPCMFlag = false; 976 #endif977 946 978 947 Int iSizeInUchar = sizeof( UChar ) * m_uiNumPartition; … … 982 951 #endif 983 952 984 #if H0736_AVC_STYLE_QP_RANGE985 953 Int sizeInChar = sizeof( Char ) * m_uiNumPartition; 986 954 memset( m_phQP, qp, sizeInChar ); 987 #else988 memset( m_phQP, uiQP, iSizeInUchar );989 #endif990 955 991 956 memset( m_puiAlfCtrlFlag, 0, iSizeInBool ); … … 1418 1383 #endif 1419 1384 1420 #if H0736_AVC_STYLE_QP_RANGE1421 1385 Int sizeInChar = sizeof( Char ) * uiNumPartition; 1422 1386 memcpy( m_phQP + uiOffset, pcCU->getQP(), sizeInChar ); 1423 #else1424 memcpy( m_phQP + uiOffset, pcCU->getQP(), iSizeInUchar );1425 #endif1426 1387 memcpy( m_pePartSize + uiOffset, pcCU->getPartitionSize(), sizeof( *m_pePartSize ) * uiNumPartition ); 1427 1388 memcpy( m_pePredMode + uiOffset, pcCU->getPredictionMode(), sizeof( *m_pePredMode ) * uiNumPartition ); … … 1558 1519 #endif 1559 1520 1560 #if H0736_AVC_STYLE_QP_RANGE1561 1521 Int sizeInChar = sizeof( Char ) * m_uiNumPartition; 1562 1522 memcpy( rpcCU->getQP() + m_uiAbsIdxInLCU, m_phQP, sizeInChar ); 1563 #else1564 memcpy( rpcCU->getQP() + m_uiAbsIdxInLCU, m_phQP, iSizeInUchar );1565 #endif1566 1523 1567 1524 memcpy( rpcCU->getPartitionSize() + m_uiAbsIdxInLCU, m_pePartSize, sizeof( *m_pePartSize ) * m_uiNumPartition ); … … 1695 1652 #endif 1696 1653 1697 #if H0736_AVC_STYLE_QP_RANGE1698 1654 Int sizeInChar = sizeof( Char ) * uiQNumPart; 1699 1655 memcpy( rpcCU->getQP() + uiPartOffset, m_phQP, sizeInChar ); 1700 #else1701 memcpy( rpcCU->getQP() + uiPartOffset, m_phQP, iSizeInUchar );1702 #endif1703 1656 memcpy( rpcCU->getPartitionSize() + uiPartOffset, m_pePartSize, sizeof( *m_pePartSize ) * uiQNumPart ); 1704 1657 #if HHI_INTERVIEW_SKIP … … 1857 1810 (bEnforceEntropySliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || m_pcCULeft->getSCUAddr()+uiLPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx))) 1858 1811 || 1859 #if !REMOVE_TILE_DEPENDENCE1860 (bEnforceTileRestriction && ( m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) ) )1861 #else1862 1812 (bEnforceTileRestriction && ( m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) ) ) 1863 #endif1864 1813 ) 1865 1814 { … … 1919 1868 (bEnforceEntropySliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || m_pcCUAbove->getSCUAddr()+uiAPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx))) 1920 1869 || 1921 #if !REMOVE_TILE_DEPENDENCE1922 (bEnforceTileRestriction &&(m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))))1923 #else1924 1870 (bEnforceTileRestriction &&(m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())))) 1925 #endif1926 1871 ) 1927 1872 { … … 1970 1915 if ( (bEnforceSliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || 1971 1916 m_pcCUAbove->getSCUAddr()+uiALPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 1972 #if !REMOVE_TILE_DEPENDENCE1973 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))1974 #else1975 1917 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 1976 #endif1977 1918 ))|| 1978 1919 (bEnforceEntropySliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || 1979 1920 m_pcCUAbove->getSCUAddr()+uiALPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 1980 #if !REMOVE_TILE_DEPENDENCE1981 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))1982 #else1983 1921 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 1984 #endif1985 1922 )) 1986 1923 ) … … 1996 1933 if ( (bEnforceSliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || 1997 1934 m_pcCULeft->getSCUAddr()+uiALPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 1998 #if !REMOVE_TILE_DEPENDENCE1999 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2000 #else2001 1935 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2002 #endif2003 1936 ))|| 2004 1937 (bEnforceEntropySliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || 2005 1938 m_pcCULeft->getSCUAddr()+uiALPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 2006 #if !REMOVE_TILE_DEPENDENCE2007 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2008 #else2009 1939 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2010 #endif2011 1940 )) 2012 1941 ) … … 2024 1953 if ( (bEnforceSliceRestriction && (m_pcCUAboveLeft==NULL || m_pcCUAboveLeft->getSlice()==NULL || 2025 1954 m_pcCUAboveLeft->getSCUAddr()+uiALPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 2026 #if !REMOVE_TILE_DEPENDENCE2027 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveLeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2028 #else2029 1955 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveLeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2030 #endif2031 1956 ))|| 2032 1957 (bEnforceEntropySliceRestriction && (m_pcCUAboveLeft==NULL || m_pcCUAboveLeft->getSlice()==NULL || 2033 1958 m_pcCUAboveLeft->getSCUAddr()+uiALPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 2034 #if !REMOVE_TILE_DEPENDENCE2035 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveLeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2036 #else2037 1959 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveLeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2038 #endif2039 1960 )) 2040 1961 ) … … 2096 2017 if ( (bEnforceSliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || 2097 2018 m_pcCUAbove->getSCUAddr()+uiARPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 2098 #if !REMOVE_TILE_DEPENDENCE2099 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2100 #else2101 2019 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2102 #endif2103 2020 ))|| 2104 2021 (bEnforceEntropySliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || 2105 2022 m_pcCUAbove->getSCUAddr()+uiARPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 2106 #if !REMOVE_TILE_DEPENDENCE2107 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2108 #else2109 2023 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2110 #endif2111 2024 )) 2112 2025 ) … … 2131 2044 m_pcPic->getPicSym()->getInverseCUOrderMap( m_pcCUAboveRight->getAddr()) > m_pcPic->getPicSym()->getInverseCUOrderMap( getAddr()) || 2132 2045 m_pcCUAboveRight->getSCUAddr()+uiARPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 2133 #if !REMOVE_TILE_DEPENDENCE2134 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveRight->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2135 #else2136 2046 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveRight->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2137 #endif2138 2047 ))|| 2139 2048 (bEnforceEntropySliceRestriction && (m_pcCUAboveRight==NULL || m_pcCUAboveRight->getSlice()==NULL || 2140 2049 m_pcPic->getPicSym()->getInverseCUOrderMap( m_pcCUAboveRight->getAddr()) > m_pcPic->getPicSym()->getInverseCUOrderMap( getAddr()) || 2141 2050 m_pcCUAboveRight->getSCUAddr()+uiARPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 2142 #if !REMOVE_TILE_DEPENDENCE2143 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveRight->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2144 #else2145 2051 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveRight->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2146 #endif2147 2052 )) 2148 2053 ) … … 2199 2104 if ( (bEnforceSliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || 2200 2105 m_pcCULeft->getSCUAddr()+uiBLPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 2201 #if !REMOVE_TILE_DEPENDENCE2202 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2203 #else2204 2106 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2205 #endif2206 2107 ))|| 2207 2108 (bEnforceEntropySliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || 2208 2109 m_pcCULeft->getSCUAddr()+uiBLPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 2209 #if !REMOVE_TILE_DEPENDENCE2210 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2211 #else2212 2110 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2213 #endif2214 2111 )) 2215 2112 ) … … 2270 2167 if ( (bEnforceSliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || 2271 2168 m_pcCULeft->getSCUAddr()+uiBLPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 2272 #if !REMOVE_TILE_DEPENDENCE2273 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2274 #else2275 2169 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2276 #endif2277 2170 ))|| 2278 2171 (bEnforceEntropySliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || 2279 2172 m_pcCULeft->getSCUAddr()+uiBLPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 2280 #if !REMOVE_TILE_DEPENDENCE2281 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2282 #else2283 2173 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2284 #endif2285 2174 )) 2286 2175 ) … … 2342 2231 if ( (bEnforceSliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || 2343 2232 m_pcCUAbove->getSCUAddr()+uiARPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 2344 #if !REMOVE_TILE_DEPENDENCE2345 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2346 #else2347 2233 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2348 #endif2349 2234 ))|| 2350 2235 (bEnforceEntropySliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || 2351 2236 m_pcCUAbove->getSCUAddr()+uiARPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 2352 #if !REMOVE_TILE_DEPENDENCE2353 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2354 #else2355 2237 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2356 #endif2357 2238 )) 2358 2239 ) … … 2373 2254 m_pcPic->getPicSym()->getInverseCUOrderMap( m_pcCUAboveRight->getAddr()) > m_pcPic->getPicSym()->getInverseCUOrderMap( getAddr()) || 2374 2255 m_pcCUAboveRight->getSCUAddr()+uiARPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiCurrPartUnitIdx)|| 2375 #if !REMOVE_TILE_DEPENDENCE2376 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveRight->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2377 #else2378 2256 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveRight->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2379 #endif2380 2257 ))|| 2381 2258 (bEnforceEntropySliceRestriction && (m_pcCUAboveRight==NULL || m_pcCUAboveRight->getSlice()==NULL || 2382 2259 m_pcPic->getPicSym()->getInverseCUOrderMap( m_pcCUAboveRight->getAddr()) > m_pcPic->getPicSym()->getInverseCUOrderMap( getAddr()) || 2383 2260 m_pcCUAboveRight->getSCUAddr()+uiARPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiCurrPartUnitIdx)|| 2384 #if !REMOVE_TILE_DEPENDENCE2385 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveRight->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2386 #else2387 2261 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAboveRight->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2388 #endif2389 2262 )) 2390 2263 ) … … 2433 2306 if ( (bEnforceSliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || 2434 2307 m_pcCULeft->getSCUAddr()+uiLPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(uiAbsZorderQpMinCUIdx)|| 2435 #if !REMOVE_TILE_DEPENDENCE2436 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2437 #else2438 2308 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2439 #endif2440 2309 ))|| 2441 2310 (bEnforceEntropySliceRestriction && (m_pcCULeft==NULL || m_pcCULeft->getSlice()==NULL || 2442 2311 m_pcCULeft->getSCUAddr()+uiLPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiAbsZorderQpMinCUIdx)|| 2443 #if !REMOVE_TILE_DEPENDENCE2444 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2445 #else2446 2312 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCULeft->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2447 #endif2448 2313 )) 2449 2314 ) … … 2452 2317 } 2453 2318 2454 #if H0204_QP_PREDICTION2455 2319 if ( m_pcCULeft && m_pcCULeft->getAddr() != getAddr() ) 2456 2320 { 2457 2321 return NULL; 2458 2322 } 2459 #endif2460 2323 2461 2324 return m_pcCULeft; 2462 2325 } 2463 2326 2464 #if H0204_QP_PREDICTION2465 2327 /** Get Above QpMinCu 2466 2328 *\param aPartUnitIdx … … 2500 2362 if ( (enforceSliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || 2501 2363 m_pcCUAbove->getSCUAddr()+aPartUnitIdx < m_pcPic->getCU( getAddr() )->getSliceStartCU(absZorderQpMinCUIdx)|| 2502 #if !REMOVE_TILE_DEPENDENCE2503 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2504 #else2505 2364 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2506 #endif2507 2365 ))|| 2508 2366 (enforceEntropySliceRestriction && (m_pcCUAbove==NULL || m_pcCUAbove->getSlice()==NULL || 2509 2367 m_pcCUAbove->getSCUAddr()+aPartUnitIdx < m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(absZorderQpMinCUIdx)|| 2510 #if !REMOVE_TILE_DEPENDENCE2511 (m_pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr()))2512 #else2513 2368 (m_pcPic->getPicSym()->getTileIdxMap( m_pcCUAbove->getAddr() ) != m_pcPic->getPicSym()->getTileIdxMap(getAddr())) 2514 #endif2515 2369 )) 2516 2370 ) … … 2526 2380 return m_pcCUAbove; 2527 2381 } 2528 #endif 2529 2530 #if H0736_AVC_STYLE_QP_RANGE 2382 2531 2383 /** Get reference QP from left QpMinCu or latest coded QP 2532 2384 *\param uiCurrAbsIdxInLCU … … 2534 2386 */ 2535 2387 Char TComDataCU::getRefQP( UInt uiCurrAbsIdxInLCU ) 2536 #else 2537 /** Get reference QP from left QpMinCu or latest coded QP 2538 *\param uiCurrAbsIdxInLCU 2539 *\returns UChar reference QP value 2540 */ 2541 UChar TComDataCU::getRefQP( UInt uiCurrAbsIdxInLCU ) 2542 #endif 2543 { 2544 #if H0204_QP_PREDICTION 2388 { 2545 2389 UInt lPartIdx, aPartIdx; 2546 2390 lPartIdx = 0; … … 2549 2393 TComDataCU* cUAbove = getQpMinCuAbove( aPartIdx, m_uiAbsIdxInLCU + uiCurrAbsIdxInLCU ); 2550 2394 return (((cULeft? cULeft->getQP( lPartIdx ): getLastCodedQP( uiCurrAbsIdxInLCU )) + (cUAbove? cUAbove->getQP( aPartIdx ): getLastCodedQP( uiCurrAbsIdxInLCU )) + 1) >> 1); 2551 #else2552 // Left CU2553 TComDataCU* pcCULeft;2554 UInt uiLPartIdx;2555 pcCULeft = getQpMinCuLeft( uiLPartIdx, m_uiAbsIdxInLCU + uiCurrAbsIdxInLCU );2556 if ( pcCULeft )2557 {2558 return pcCULeft->getQP(uiLPartIdx);2559 }2560 // Last QP2561 return getLastCodedQP( uiCurrAbsIdxInLCU );2562 #endif2563 2395 } 2564 2396 … … 2575 2407 } 2576 2408 2577 #if H0736_AVC_STYLE_QP_RANGE2578 2409 Char TComDataCU::getLastCodedQP( UInt uiAbsPartIdx ) 2579 #else2580 UChar TComDataCU::getLastCodedQP( UInt uiAbsPartIdx )2581 #endif2582 2410 { 2583 2411 UInt uiQUPartIdxMask = ~((1<<(8-(getSlice()->getPPS()->getMaxCuDQPDepth()<<1)))-1); … … 2616 2444 Bool TComDataCU::isLosslessCoded(UInt absPartIdx) 2617 2445 { 2618 #if H0736_AVC_STYLE_QP_RANGE2619 2446 return ( getSlice()->getSPS()->getUseLossless() && ((getQP(absPartIdx) + getSlice()->getSPS()->getQpBDOffsetY()) == 0) ); 2620 #else2621 return ( getSlice()->getSPS()->getUseLossless() && (getQP(absPartPIdx) == 0) );2622 #endif2623 2447 } 2624 2448 #endif … … 2633 2457 { 2634 2458 uiModeList[0] = PLANAR_IDX; 2635 #if LOGI_INTRA_NAME_3MPM2636 2459 uiModeList[1] = VER_IDX; 2637 2460 uiModeList[2] = HOR_IDX; 2638 #else2639 uiModeList[1] = 1;2640 uiModeList[2] = 2;2641 #endif2642 2461 uiModeList[3] = DC_IDX; 2643 2462 uiModeList[4] = LM_CHROMA_IDX; … … 2653 2472 if( uiLumaMode == uiModeList[i] ) 2654 2473 { 2655 #if LOGI_INTRA_NAME_3MPM2656 2474 uiModeList[i] = 34; // VER+8 mode 2657 #else2658 uiModeList[i] = 7; // VER+8 mode2659 #endif2660 2475 break; 2661 2476 } … … 2679 2494 pcTempCU = getPULeft( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx ); 2680 2495 2681 #if DEFAULT_DC2682 2496 iLeftIntraDir = pcTempCU ? ( pcTempCU->isIntra( uiTempPartIdx ) ? pcTempCU->getLumaIntraDir( uiTempPartIdx ) : DC_IDX ) : DC_IDX; 2683 #else2684 iLeftIntraDir = pcTempCU ? ( pcTempCU->isIntra( uiTempPartIdx ) ? pcTempCU->getLumaIntraDir( uiTempPartIdx ) : PLANAR_IDX ) : PLANAR_IDX;2685 #endif2686 2497 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 2687 2498 mapDMMtoIntraMode( iLeftIntraDir ); … … 2694 2505 pcTempCU = getPUAbove( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx, true, true, false, true ); 2695 2506 2696 #if DEFAULT_DC2697 2507 iAboveIntraDir = pcTempCU ? ( pcTempCU->isIntra( uiTempPartIdx ) ? pcTempCU->getLumaIntraDir( uiTempPartIdx ) : DC_IDX ) : DC_IDX; 2698 #else2699 iAboveIntraDir = pcTempCU ? ( pcTempCU->isIntra( uiTempPartIdx ) ? pcTempCU->getLumaIntraDir( uiTempPartIdx ) : PLANAR_IDX ) : PLANAR_IDX;2700 #endif2701 2508 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 2702 2509 mapDMMtoIntraMode( iAboveIntraDir ); … … 2706 2513 #endif 2707 2514 2708 #if LOGI_INTRA_NAME_3MPM2709 2515 uiPredNum = 3; 2710 2516 if(iLeftIntraDir == iAboveIntraDir) … … 2746 2552 } 2747 2553 } 2748 #else2749 Int iIdx = getIntraSizeIdx(uiAbsPartIdx);2750 2751 2752 if ( iLeftIntraDir >= g_aucIntraModeNumAng[iIdx] )2753 {2754 iLeftIntraDir = PLANAR_IDX;2755 }2756 2757 2758 if ( iAboveIntraDir >= g_aucIntraModeNumAng[iIdx] )2759 {2760 iAboveIntraDir = PLANAR_IDX;2761 }2762 2763 if(iLeftIntraDir == iAboveIntraDir)2764 {2765 uiPredNum = 2;2766 2767 if( piMode )2768 {2769 *piMode = iLeftIntraDir;2770 }2771 2772 iAboveIntraDir = iLeftIntraDir == PLANAR_IDX ? DC_IDX : PLANAR_IDX; // DC or Planar2773 2774 assert( iLeftIntraDir != iAboveIntraDir );2775 2776 uiIntraDirPred[0] = min(iLeftIntraDir, iAboveIntraDir);2777 uiIntraDirPred[1] = max(iLeftIntraDir, iAboveIntraDir);2778 }2779 else2780 {2781 uiPredNum = 2;2782 uiIntraDirPred[0] = min(iLeftIntraDir, iAboveIntraDir);2783 uiIntraDirPred[1] = max(iLeftIntraDir, iAboveIntraDir);2784 }2785 #endif2786 2554 2787 2555 return uiPredNum; … … 2833 2601 UInt quadtreeTUMaxDepth = getPredictionMode( absPartIdx ) == MODE_INTRA ? m_pcSlice->getSPS()->getQuadtreeTUMaxDepthIntra() : m_pcSlice->getSPS()->getQuadtreeTUMaxDepthInter(); 2834 2602 Int intraSplitFlag = ( getPredictionMode( absPartIdx ) == MODE_INTRA && partSize == SIZE_NxN ) ? 1 : 0; 2835 #if G519_TU_AMP_NSQT_HARMONIZATION2836 2603 Int interSplitFlag = ((quadtreeTUMaxDepth == 1) && (getPredictionMode( absPartIdx ) == MODE_INTER) && (partSize != SIZE_2Nx2N) ); 2837 #else2838 Int interSplitFlag = ((quadtreeTUMaxDepth == 1) && (getPredictionMode( absPartIdx ) == MODE_INTER) && (partSize == SIZE_Nx2N || partSize == SIZE_2NxN) );2839 #endif2840 2604 2841 2605 UInt log2MinTUSizeInCU = 0; … … 3006 2770 } 3007 2771 3008 #if H0736_AVC_STYLE_QP_RANGE3009 2772 Void TComDataCU::setQPSubParts( Int qp, UInt uiAbsPartIdx, UInt uiDepth ) 3010 #else3011 Void TComDataCU::setQPSubParts( UInt uiQP, UInt uiAbsPartIdx, UInt uiDepth )3012 #endif3013 2773 { 3014 2774 UInt uiCurrPartNumb = m_pcPic->getNumPartInCU() >> (uiDepth << 1); … … 3019 2779 if( m_pcPic->getCU( getAddr() )->getEntropySliceStartCU(uiSCUIdx+getZorderIdxInCU()) == pcSlice->getEntropySliceCurStartCUAddr() ) 3020 2780 { 3021 #if H0736_AVC_STYLE_QP_RANGE3022 2781 m_phQP[uiSCUIdx] = qp; 3023 #else3024 m_phQP[uiSCUIdx] = uiQP;3025 #endif3026 2782 } 3027 2783 } … … 3832 3588 * \param numValidMergeCand 3833 3589 */ 3834 #if SIMP_MRG_PRUN3835 3590 #if MERL_VSP_C0152 3836 3591 Void TComDataCU::getInterMergeCandidates( UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int* iVSPIndexTrue, Int mrgCandIdx ) 3837 3592 #else 3838 3593 Void TComDataCU::getInterMergeCandidates( UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int mrgCandIdx ) 3839 #endif3840 #else3841 Void TComDataCU::getInterMergeCandidates( UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand )3842 3594 #endif 3843 3595 { … … 3863 3615 } 3864 3616 // compute the location of the current PU 3865 #if PARALLEL_MERGE3866 3617 Int xP, yP, nPSW, nPSH; 3867 3618 this->getPartPosition(uiPUIdx, xP, yP, nPSW, nPSH); 3868 #endif3869 3619 3870 3620 #if MERL_VSP_C0152 … … 3915 3665 xInheritVspMode( pcTextureCU, uiPartIdxCenter, bVspMvZeroDone, iCount, iVSPIndexTrue, pcMvFieldNeighbours, &cDisInfo ) ; 3916 3666 #endif 3917 #if SIMP_MRG_PRUN3918 3667 if ( mrgCandIdx == iCount ) 3919 3668 { 3920 3669 return; 3921 3670 } 3922 #endif3923 3671 iCount ++; 3924 3672 } … … 4002 3750 xInheritVspMode( pcTextureCU, uiPartIdxCenter, bVspMvZeroDone, iCount, iVSPIndexTrue, pcMvFieldNeighbours, &cDisInfo ) ; 4003 3751 #endif 4004 #if SIMP_MRG_PRUN4005 3752 if ( mrgCandIdx == iCount ) 4006 3753 { 4007 3754 return; 4008 3755 } 4009 #endif4010 3756 iCount ++; 4011 3757 } … … 4059 3805 } 4060 3806 #endif 4061 #if SIMP_MRG_PRUN4062 3807 if ( mrgCandIdx == iCount ) 4063 3808 { 4064 3809 return; 4065 3810 } 4066 #endif4067 3811 iCount ++; 4068 3812 } … … 4087 3831 pcMvFieldNeighbours[(iCount<<1)+1].getMv().m_bDvMcp = false; 4088 3832 #endif 4089 #if SIMP_MRG_PRUN4090 3833 if ( mrgCandIdx == iCount ) 4091 3834 return; 4092 #endif4093 3835 iCount ++; 4094 3836 } … … 4106 3848 UInt uiLeftPartIdx = 0; 4107 3849 TComDataCU* pcCULeft = 0; 4108 #if MVP_AT_ENTROPYSLICE_BOUNDARY4109 3850 pcCULeft = getPULeft( uiLeftPartIdx, uiPartIdxLB, true, false ); 4110 #else4111 pcCULeft = getPULeft( uiLeftPartIdx, uiPartIdxLB );4112 #endif4113 #if PARALLEL_MERGE4114 3851 if (pcCULeft) 4115 3852 { … … 4119 3856 } 4120 3857 } 4121 #endif4122 3858 PartSize partSize = getPartitionSize( uiAbsPartIdx ); 4123 3859 if (!(uiPUIdx == 1 && (partSize == SIZE_Nx2N || partSize == SIZE_nLx2N || partSize == SIZE_nRx2N))) … … 4175 3911 xInheritVspMode( pcCULeft, uiLeftPartIdx, bVspMvZeroDone, iCount, iVSPIndexTrue, pcMvFieldNeighbours, &cDisInfo ) ; 4176 3912 #endif 4177 #if SIMP_MRG_PRUN4178 3913 if ( mrgCandIdx == iCount ) 4179 3914 { 4180 3915 return; 4181 3916 } 4182 #endif4183 3917 iCount ++; 4184 3918 #if H3D_IVMP … … 4213 3947 } 4214 3948 #endif 4215 #if SIMP_MRG_PRUN4216 3949 if ( mrgCandIdx == iCount ) 4217 3950 { 4218 3951 return; 4219 3952 } 4220 #endif4221 3953 iCount ++; 4222 3954 } … … 4231 3963 4232 3964 // above 4233 #if !SIMP_MRG_PRUN4234 partSize = getPartitionSize( uiAbsPartIdx );4235 if (!(uiPUIdx == 1 && (partSize == SIZE_2NxN || partSize == SIZE_2NxnU || partSize == SIZE_2NxnD)))4236 {4237 #endif4238 3965 UInt uiAbovePartIdx = 0; 4239 3966 TComDataCU* pcCUAbove = 0; 4240 #if MVP_AT_ENTROPYSLICE_BOUNDARY4241 3967 pcCUAbove = getPUAbove( uiAbovePartIdx, uiPartIdxRT, true, false, true ); 4242 #else4243 pcCUAbove = getPUAbove( uiAbovePartIdx, uiPartIdxRT, true, true, true );4244 #endif4245 #if PARALLEL_MERGE4246 3968 if (pcCUAbove) 4247 3969 { … … 4251 3973 } 4252 3974 } 4253 #endif4254 #if SIMP_MRG_PRUN4255 3975 if ( pcCUAbove && !pcCUAbove->isIntra( uiAbovePartIdx ) 4256 3976 #if MERL_VSP_C0152 … … 4259 3979 && !(uiPUIdx == 1 && (cCurPS == SIZE_2NxN || cCurPS == SIZE_2NxnU || cCurPS == SIZE_2NxnD)) 4260 3980 && ( !pcCULeft || pcCULeft->isIntra( uiLeftPartIdx ) || !pcCULeft->hasEqualMotion( uiLeftPartIdx, pcCUAbove, uiAbovePartIdx ) ) ) 4261 #else4262 if ( pcCUAbove && !pcCUAbove->isIntra( uiAbovePartIdx ) )4263 #endif4264 3981 { 4265 3982 abCandIsInter[iCount] = true; … … 4307 4024 xInheritVspMode( pcCUAbove, uiAbovePartIdx, bVspMvZeroDone, iCount, iVSPIndexTrue, pcMvFieldNeighbours, &cDisInfo ) ; 4308 4025 #endif 4309 #if SIMP_MRG_PRUN4310 4026 if ( mrgCandIdx == iCount ) 4311 4027 { 4312 4028 return; 4313 4029 } 4314 #endif4315 4030 iCount ++; 4316 4031 #if H3D_IVMP … … 4318 4033 #endif 4319 4034 } 4320 #if !SIMP_MRG_PRUN4321 }4322 #endif4323 4035 4324 4036 #if H3D_IVMP … … 4347 4059 } 4348 4060 #endif 4349 #if SIMP_MRG_PRUN4350 4061 if ( mrgCandIdx == iCount ) 4351 4062 { 4352 4063 return; 4353 4064 } 4354 #endif4355 4065 iCount ++; 4356 4066 } … … 4367 4077 UInt uiAboveRightPartIdx = 0; 4368 4078 TComDataCU* pcCUAboveRight = 0; 4369 #if MVP_AT_ENTROPYSLICE_BOUNDARY4370 4079 pcCUAboveRight = getPUAboveRight( uiAboveRightPartIdx, uiPartIdxRT, true, false, true ); 4371 #else4372 pcCUAboveRight = getPUAboveRight( uiAboveRightPartIdx, uiPartIdxRT, true, true, true);4373 #endif4374 #if PARALLEL_MERGE4375 4080 if (pcCUAboveRight) 4376 4081 { … … 4380 4085 } 4381 4086 } 4382 #endif4383 #if SIMP_MRG_PRUN4384 4087 if ( pcCUAboveRight && !pcCUAboveRight->isIntra( uiAboveRightPartIdx ) 4385 4088 #if MERL_VSP_C0152 … … 4387 4090 #endif 4388 4091 && ( !pcCUAbove || pcCUAbove->isIntra( uiAbovePartIdx ) || !pcCUAbove->hasEqualMotion( uiAbovePartIdx, pcCUAboveRight, uiAboveRightPartIdx ) ) ) 4389 #else4390 if ( pcCUAboveRight && !pcCUAboveRight->isIntra( uiAboveRightPartIdx ) )4391 #endif4392 4092 { 4393 4093 abCandIsInter[iCount] = true; … … 4413 4113 xInheritVspMode( pcCUAboveRight, uiAboveRightPartIdx, bVspMvZeroDone, iCount, iVSPIndexTrue, pcMvFieldNeighbours, &cDisInfo ) ; 4414 4114 #endif 4415 #if SIMP_MRG_PRUN4416 4115 if ( mrgCandIdx == iCount ) 4417 4116 { 4418 4117 return; 4419 4118 } 4420 #endif4421 4119 iCount ++; 4422 4120 } … … 4447 4145 } 4448 4146 #endif 4449 #if SIMP_MRG_PRUN4450 4147 if ( mrgCandIdx == iCount ) 4451 4148 { 4452 4149 return; 4453 4150 } 4454 #endif4455 4151 iCount ++; 4456 4152 } … … 4495 4191 pcMvFieldNeighbours[(iCount<<1)+1].getMv().m_bDvMcp = false; 4496 4192 #endif 4497 #if SIMP_MRG_PRUN4498 4193 if ( mrgCandIdx == iCount ) 4499 4194 return; 4500 #endif4501 4195 iCount ++; 4502 4196 } … … 4526 4220 UInt uiLeftBottomPartIdx = 0; 4527 4221 TComDataCU* pcCULeftBottom = 0; 4528 #if MVP_AT_ENTROPYSLICE_BOUNDARY4529 4222 pcCULeftBottom = this->getPUBelowLeft( uiLeftBottomPartIdx, uiPartIdxLB, true, false ); 4530 #else4531 pcCULeftBottom = this->getPUBelowLeft( uiLeftBottomPartIdx, uiPartIdxLB );4532 #endif4533 #if PARALLEL_MERGE4534 4223 if (pcCULeftBottom) 4535 4224 { … … 4539 4228 } 4540 4229 } 4541 #endif4542 #if SIMP_MRG_PRUN4543 4230 if ( pcCULeftBottom && !pcCULeftBottom->isIntra( uiLeftBottomPartIdx ) 4544 4231 #if MERL_VSP_C0152 … … 4546 4233 #endif 4547 4234 && ( !pcCULeft || pcCULeft->isIntra( uiLeftPartIdx ) || !pcCULeft->hasEqualMotion( uiLeftPartIdx, pcCULeftBottom, uiLeftBottomPartIdx ) ) ) 4548 #else4549 if ( pcCULeftBottom && !pcCULeftBottom->isIntra( uiLeftBottomPartIdx ) )4550 #endif4551 4235 { 4552 4236 abCandIsInter[iCount] = true; … … 4572 4256 xInheritVspMode( pcCULeftBottom, uiLeftBottomPartIdx, bVspMvZeroDone, iCount, iVSPIndexTrue, pcMvFieldNeighbours, &cDisInfo ) ; 4573 4257 #endif 4574 #if SIMP_MRG_PRUN4575 4258 if ( mrgCandIdx == iCount ) 4576 4259 { 4577 4260 return; 4578 4261 } 4579 #endif4580 4262 iCount ++; 4581 4263 } … … 4611 4293 } 4612 4294 #endif 4613 #if SIMP_MRG_PRUN4614 4295 if ( mrgCandIdx == iCount ) 4615 4296 { 4616 4297 return; 4617 4298 } 4618 #endif4619 4299 iCount ++; 4620 4300 } … … 4637 4317 UInt uiAboveLeftPartIdx = 0; 4638 4318 TComDataCU* pcCUAboveLeft = 0; 4639 #if MVP_AT_ENTROPYSLICE_BOUNDARY4640 4319 pcCUAboveLeft = getPUAboveLeft( uiAboveLeftPartIdx, uiAbsPartAddr, true, false, true ); 4641 #else4642 pcCUAboveLeft = getPUAboveLeft( uiAboveLeftPartIdx, uiAbsPartAddr, true, true, true );4643 #endif4644 #if PARALLEL_MERGE4645 4320 if (pcCUAboveLeft) 4646 4321 { … … 4650 4325 } 4651 4326 } 4652 #endif4653 #if SIMP_MRG_PRUN4654 4327 if( pcCUAboveLeft && !pcCUAboveLeft->isIntra( uiAboveLeftPartIdx ) 4655 4328 #if MERL_VSP_C0152 … … 4659 4332 && ( !pcCUAbove || pcCUAbove->isIntra( uiAbovePartIdx ) || !pcCUAbove->hasEqualMotion( uiAbovePartIdx, pcCUAboveLeft, uiAboveLeftPartIdx ) ) 4660 4333 ) 4661 #else4662 if( pcCUAboveLeft && !pcCUAboveLeft->isIntra( uiAboveLeftPartIdx ) )4663 #endif4664 4334 { 4665 4335 abCandIsInter[iCount] = true; … … 4685 4355 xInheritVspMode( pcCUAboveLeft, uiAboveLeftPartIdx, bVspMvZeroDone, iCount, iVSPIndexTrue, pcMvFieldNeighbours, &cDisInfo ) ; 4686 4356 #endif 4687 #if SIMP_MRG_PRUN4688 4357 if ( mrgCandIdx == iCount ) 4689 4358 { 4690 4359 return; 4691 4360 } 4692 #endif4693 4361 iCount ++; 4694 4362 } … … 4714 4382 { 4715 4383 RefPicList eRefPicList = ( i==1 ? REF_PIC_LIST_1 : REF_PIC_LIST_0 ); 4716 #if SET_MERGE_TMVP_REFIDX4717 4384 Int iRefIdxTmp; 4718 4385 if ( uiPUIdx != 0 ) … … 4724 4391 iRefIdxTmp = (pcCULeft != NULL) ? pcCULeft->getCUMvField(eRefPicList)->getRefIdx(uiLeftPartIdx) : -1; 4725 4392 } 4726 #else4727 Int iRefIdxTmp = (pcCULeft != NULL) ? pcCULeft->getCUMvField(eRefPicList)->getRefIdx(uiLeftPartIdx) : -1;4728 #endif4729 4393 iRefIdxSkip[i] = (iRefIdxTmp != -1) ? iRefIdxTmp : 0; 4730 4394 } … … 4858 4522 pcMvFieldNeighbours[(uiArrayAddr<<1)+1].getMv().m_bDvMcp = false; 4859 4523 #endif 4860 #if SIMP_MRG_PRUN4861 4524 if ( mrgCandIdx == iCount ) 4862 4525 { … … 4864 4527 } 4865 4528 iCount++; 4866 #endif4867 4529 } 4868 4530 uiIdx++; … … 4870 4532 } 4871 4533 4872 #if SIMP_MRG_PRUN4873 4534 UInt uiArrayAddr = iCount; 4874 #else4875 #if H3D_IVMP4876 for( UInt uiOuter = 0; uiOuter < MRG_MAX_NUM_CANDS_MEM; uiOuter++ )4877 #else4878 for( UInt uiOuter = 0; uiOuter < MRG_MAX_NUM_CANDS; uiOuter++ )4879 #endif4880 {4881 if( abCandIsInter[ uiOuter ] )4882 {4883 #if H3D_IVMP4884 for( UInt uiIter = uiOuter + 1; uiIter < MRG_MAX_NUM_CANDS_MEM; uiIter++ )4885 #else4886 for( UInt uiIter = uiOuter + 1; uiIter < MRG_MAX_NUM_CANDS; uiIter++ )4887 #endif4888 {4889 UInt uiMvFieldNeighIdxCurr = uiOuter << 1;4890 UInt uiMvFieldNeighIdxComp = uiIter << 1;4891 if( getSlice()->isInterB() )4892 {4893 if( puhInterDirNeighbours[ uiOuter ] == 3 )4894 {4895 if( pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr ].getRefIdx() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp ].getRefIdx() && pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr + 1 ].getRefIdx() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp + 1 ].getRefIdx() &&4896 pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr ].getMv() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp ].getMv() && pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr + 1 ].getMv() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp + 1 ].getMv() &&4897 puhInterDirNeighbours[ uiOuter ] == puhInterDirNeighbours[ uiIter ] )4898 {4899 abCandIsInter[ uiIter ] = false;4900 }4901 }4902 else if( puhInterDirNeighbours[ uiOuter ] == 2 )4903 {4904 if( pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr + 1 ].getRefIdx() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp + 1 ].getRefIdx() &&4905 pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr + 1 ].getMv() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp + 1 ].getMv() &&4906 puhInterDirNeighbours[ uiOuter ] == puhInterDirNeighbours[ uiIter ] )4907 {4908 abCandIsInter[ uiIter ] = false;4909 }4910 }4911 else4912 {4913 if( pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr ].getRefIdx() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp ].getRefIdx() &&4914 pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr ].getMv() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp ].getMv() &&4915 puhInterDirNeighbours[ uiOuter ] == puhInterDirNeighbours[ uiIter ] )4916 {4917 abCandIsInter[ uiIter ] = false;4918 }4919 }4920 }4921 else4922 {4923 if( pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr ].getRefIdx() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp ].getRefIdx() &&4924 pcMvFieldNeighbours[ uiMvFieldNeighIdxCurr ].getMv() == pcMvFieldNeighbours[ uiMvFieldNeighIdxComp ].getMv() )4925 {4926 assert( puhInterDirNeighbours[ uiOuter ] == puhInterDirNeighbours[ uiIter ] );4927 abCandIsInter[ uiIter ] = false;4928 }4929 }4930 }4931 }4932 }4933 4934 #if H3D_IVMP4935 bool abCandIsInterFlag[MRG_MAX_NUM_CANDS_MEM];4936 for (int i=0; i<MRG_MAX_NUM_CANDS_MEM; i++)4937 #else4938 bool abCandIsInterFlag[MRG_MAX_NUM_CANDS];4939 for (int i=0; i<MRG_MAX_NUM_CANDS; i++)4940 #endif4941 {4942 abCandIsInterFlag[i] = abCandIsInter[ i ];4943 abCandIsInter[ i ] = false;4944 }4945 4946 UInt uiArrayAddr = 0;4947 4948 #if H3D_IVMP4949 for (int i=0; i<MRG_MAX_NUM_CANDS_MEM; i++)4950 #else4951 for (int i=0; i<MRG_MAX_NUM_CANDS; i++)4952 #endif4953 {4954 if (abCandIsInterFlag[i])4955 {4956 abCandIsInter[uiArrayAddr] = true;4957 puhInterDirNeighbours[uiArrayAddr] = puhInterDirNeighbours[i];4958 pcMvFieldNeighbours[uiArrayAddr<<1].setMvField(pcMvFieldNeighbours[i<<1].getMv(), pcMvFieldNeighbours[i<<1].getRefIdx());4959 pcMvFieldNeighbours[(uiArrayAddr<<1)+1].setMvField(pcMvFieldNeighbours[(i<<1)+1].getMv(), pcMvFieldNeighbours[(i<<1)+1].getRefIdx());4960 ++uiArrayAddr;4961 }4962 }4963 4964 #if H3D_IVMP4965 for (int i=uiArrayAddr; i<MRG_MAX_NUM_CANDS_MEM; i++)4966 #else4967 for (int i=uiArrayAddr; i<MRG_MAX_NUM_CANDS; i++)4968 #endif4969 {4970 puhInterDirNeighbours[i] = (getSlice()->isInterB()) ? 3 : 1;4971 abCandIsInter[i] = false;4972 TComMv tmpMv;4973 tmpMv.set(0,0);4974 pcMvFieldNeighbours[i<<1].setMvField(tmpMv, 0);4975 if ( getSlice()->isInterB() )4976 {4977 pcMvFieldNeighbours[(i<<1)+1].setMvField(tmpMv, 0);4978 }4979 }4980 #endif4981 4535 UInt uiCutoff = uiArrayAddr; 4982 4536 … … 5033 4587 } 5034 4588 } 5035 #if !REMOVE_NON_SCALED5036 Int iScaledCount = 0;5037 #if H3D_IVMP5038 for (int i=0; i<uiCutoff && uiArrayAddr!=MRG_MAX_NUM_CANDS_MEM && iScaledCount<1; i++)5039 #else5040 for (int i=0; i<uiCutoff && uiArrayAddr!=MRG_MAX_NUM_CANDS && iScaledCount<1; i++)5041 #endif5042 {5043 #if H3D_IVMP5044 for (int j=0; j<2 && uiArrayAddr!=MRG_MAX_NUM_CANDS_MEM && iScaledCount<1; j++)5045 #else5046 for (int j=0; j<2 && uiArrayAddr!=MRG_MAX_NUM_CANDS && iScaledCount<1; j++)5047 #endif5048 {5049 if (abCandIsInter[i] && pcMvFieldNeighbours[(i<<1)+j].getRefIdx()>=0 && pcMvFieldNeighbours[(i<<1)+j].getRefIdx() < m_pcSlice->getNumRefIdx((j==0)?REF_PIC_LIST_1:REF_PIC_LIST_0))5050 {5051 Int iCurrPOC = m_pcSlice->getPOC();5052 Int iCurrRefPOC1 = m_pcSlice->getRefPOC( (j==0)?REF_PIC_LIST_1:REF_PIC_LIST_0, pcMvFieldNeighbours[(i<<1)+j].getRefIdx() );5053 Int iCurrRefPOC2 = m_pcSlice->getRefPOC( (j==0)?REF_PIC_LIST_0:REF_PIC_LIST_1, pcMvFieldNeighbours[(i<<1)+j].getRefIdx() );5054 5055 if (iCurrRefPOC1 != iCurrRefPOC2 && abs(iCurrPOC-iCurrRefPOC1) == abs(iCurrPOC-iCurrRefPOC2))5056 {5057 abCandIsInter[uiArrayAddr] = true;5058 puhInterDirNeighbours[uiArrayAddr] = 3;5059 5060 TComMv cMvPred = pcMvFieldNeighbours[(i<<1)+j].getMv();5061 TComMv rcMv;5062 5063 rcMv.set(-1*cMvPred.getHor(), -1*cMvPred.getVer());5064 5065 if (j==0)5066 {5067 pcMvFieldNeighbours[uiArrayAddr << 1].setMvField(pcMvFieldNeighbours[(i<<1)].getMv(), pcMvFieldNeighbours[(i<<1)].getRefIdx());5068 pcMvFieldNeighbours[( uiArrayAddr << 1 ) + 1].setMvField(rcMv, pcMvFieldNeighbours[(i<<1)].getRefIdx());5069 }5070 else5071 {5072 pcMvFieldNeighbours[uiArrayAddr << 1].setMvField(rcMv, pcMvFieldNeighbours[(i<<1)+1].getRefIdx());5073 pcMvFieldNeighbours[( uiArrayAddr << 1 ) + 1].setMvField(pcMvFieldNeighbours[(i<<1)+1].getMv(), pcMvFieldNeighbours[(i<<1)+1].getRefIdx());5074 }5075 5076 uiArrayAddr++;5077 iScaledCount++;5078 }5079 }5080 }5081 }5082 #endif5083 4589 } 5084 4590 … … 5258 4764 } 5259 4765 } 5260 #if PARALLEL_MERGE5261 4766 /** Check whether the current PU and a spatial neighboring PU are in a same ME region. 5262 4767 * \param xN, xN location of the upper-left corner pixel of a neighboring PU … … 5345 4850 } 5346 4851 5347 #endif5348 4852 AMVP_MODE TComDataCU::getAMVPMode(UInt uiIdx) 5349 4853 { … … 5367 4871 5368 4872 UInt uiIdx = 0; 5369 #if MVP_AT_ENTROPYSLICE_BOUNDARY5370 4873 pcTmpCU = getPULeft(uiIdx, uiPartIdxLB, true, false); 5371 #else5372 pcTmpCU = getPULeft(uiIdx, uiPartIdxLB);5373 #endif5374 4874 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx ) ) 5375 4875 #if MERL_VSP_C0152 … … 5395 4895 } 5396 4896 } 5397 #if MVP_AT_ENTROPYSLICE_BOUNDARY5398 4897 pcTmpCU = getPUAbove(uiIdx, uiPartIdxRT, true, false, true); 5399 #else5400 pcTmpCU = getPUAbove(uiIdx, uiPartIdxRT);5401 #endif5402 4898 5403 4899 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx )) … … 5425 4921 } 5426 4922 5427 #if MVP_AT_ENTROPYSLICE_BOUNDARY5428 4923 pcTmpCU = getPUAboveRight(uiIdx, uiPartIdxRT, true, false, true); 5429 #else5430 pcTmpCU = getPUAboveRight(uiIdx, uiPartIdxRT, true, true, true);5431 #endif5432 4924 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx ) ) 5433 4925 #if MERL_VSP_C0152 … … 5453 4945 } 5454 4946 } 5455 #if MVP_AT_ENTROPYSLICE_BOUNDARY5456 4947 pcTmpCU = getPUBelowLeft(uiIdx, uiPartIdxLB, true, false); 5457 #else5458 pcTmpCU = getPUBelowLeft(uiIdx, uiPartIdxLB);5459 #endif5460 4948 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx )) 5461 4949 #if MERL_VSP_C0152 … … 5483 4971 5484 4972 // Above predictor search 5485 #if MVP_AT_ENTROPYSLICE_BOUNDARY5486 4973 pcTmpCU = getPUAboveLeft(uiIdx, (m_uiAbsIdxInLCU + uiPartAddr), true, false, true); 5487 4974 assert(uiPartIdxLT == (m_uiAbsIdxInLCU + uiPartAddr)); 5488 #else5489 pcTmpCU = getPUAboveLeft(uiIdx, uiPartIdxLT, true, true, true);5490 #endif5491 4975 if(pcTmpCU != NULL && !pcTmpCU->isIntra( uiIdx )) 5492 4976 #if MERL_VSP_C0152 … … 5993 5477 #endif 5994 5478 UInt uiIdx = 0; 5995 #if MVP_AT_ENTROPYSLICE_BOUNDARY5996 5479 pcTmpCU = getPULeft(uiIdx, uiPartIdxLB, true, false); 5997 #else5998 pcTmpCU = getPULeft(uiIdx, uiPartIdxLB);5999 #endif6000 5480 if ( uiPartIdx == 1 && (eCUMode == SIZE_Nx2N || eCUMode == SIZE_nLx2N || eCUMode == SIZE_nRx2N) ) 6001 5481 { … … 6078 5558 } 6079 5559 6080 #if MVP_AT_ENTROPYSLICE_BOUNDARY6081 5560 pcTmpCU = getPUAbove(uiIdx, uiPartIdxRT, true, false, true); 6082 #else6083 pcTmpCU = getPUAbove(uiIdx, uiPartIdxRT);6084 #endif6085 5561 if ( uiPartIdx == 1 && (eCUMode == SIZE_2NxN || eCUMode == SIZE_2NxnU || eCUMode == SIZE_2NxnD) ) 6086 5562 { … … 6164 5640 } 6165 5641 6166 #if MVP_AT_ENTROPYSLICE_BOUNDARY6167 5642 pcTmpCU = getPUAboveRight(uiIdx, uiPartIdxRT, true, false, true); 6168 #else6169 pcTmpCU = getPUAboveRight(uiIdx, uiPartIdxRT, true, true, true);6170 #endif6171 5643 6172 5644 if (pcTmpCU && bParMerge) … … 6246 5718 } 6247 5719 6248 #if MVP_AT_ENTROPYSLICE_BOUNDARY6249 5720 pcTmpCU = getPUBelowLeft(uiIdx, uiPartIdxLB, true, false); 6250 #else6251 pcTmpCU = getPUBelowLeft(uiIdx, uiPartIdxLB);6252 #endif6253 5721 6254 5722 if (pcTmpCU && bParMerge) … … 6328 5796 6329 5797 // Above predictor search 6330 #if MVP_AT_ENTROPYSLICE_BOUNDARY6331 5798 pcTmpCU = getPUAboveLeft(uiIdx, (m_uiAbsIdxInLCU + uiPartAddr), true, false, true); 6332 5799 assert(uiPartIdxLT == (m_uiAbsIdxInLCU + uiPartAddr)); 6333 #else6334 pcTmpCU = getPUAboveLeft(uiIdx, uiPartIdxLT, true, true, true);6335 #endif6336 5800 6337 5801 if (pcTmpCU && bParMerge) … … 6741 6205 TComDataCU* tmpCU = NULL; 6742 6206 UInt idx; 6743 #if MVP_AT_ENTROPYSLICE_BOUNDARY6744 6207 tmpCU = getPUBelowLeft(idx, uiPartIdxLB, true, false); 6745 #else6746 tmpCU = getPUBelowLeft(idx, uiPartIdxLB);6747 #endif6748 6208 bAddedSmvp = (tmpCU != NULL) && (tmpCU->getPredictionMode(idx) != MODE_INTRA); 6749 6209 6750 6210 if (!bAddedSmvp) 6751 6211 { 6752 #if MVP_AT_ENTROPYSLICE_BOUNDARY6753 6212 tmpCU = getPULeft(idx, uiPartIdxLB, true, false); 6754 #else6755 tmpCU = getPULeft(idx, uiPartIdxLB);6756 #endif6757 6213 bAddedSmvp = (tmpCU != NULL) && (tmpCU->getPredictionMode(idx) != MODE_INTRA); 6758 6214 } … … 6811 6267 6812 6268 6813 #if AMVP_PRUNING_SIMPLIFICATION6814 6269 if ( pInfo->iN == 2 ) 6815 6270 { … … 6822 6277 } 6823 6278 } 6824 #endif6825 6279 6826 6280 if ( getSlice()->getPPS()->getEnableTMVPFlag() ) … … 6894 6348 } 6895 6349 6896 #if !AMVP_PRUNING_SIMPLIFICATION6897 // Check No MV Candidate6898 xUniqueMVPCand( pInfo );6899 #endif6900 6350 6901 6351 if (pInfo->iN > AMVP_MAX_NUM_CANDS) … … 6905 6355 else if (pInfo->iN < AMVP_MAX_NUM_CANDS) 6906 6356 { 6907 #if !AMVP_ZERO_CHECKING_REMOVAL6908 int j;6909 for (j=0; j<pInfo->iN; j++)6910 {6911 if (pInfo->m_acMvCand[j].getHor() == 0 && pInfo->m_acMvCand[j].getVer() == 0)6912 {6913 break;6914 }6915 }6916 if (j == pInfo->iN)6917 {6918 #endif6919 6357 pInfo->m_acMvCand[pInfo->iN].set(0,0); 6920 6358 pInfo->iN++; 6921 #if !AMVP_ZERO_CHECKING_REMOVAL6922 }6923 #endif6924 6359 } 6925 6360 return ; … … 7011 6446 case MD_LEFT: 7012 6447 { 7013 #if MVP_AT_ENTROPYSLICE_BOUNDARY7014 6448 pcTmpCU = getPULeft(uiIdx, uiPartUnitIdx, true, false); 7015 #else7016 pcTmpCU = getPULeft(uiIdx, uiPartUnitIdx);7017 #endif7018 6449 break; 7019 6450 } 7020 6451 case MD_ABOVE: 7021 6452 { 7022 #if MVP_AT_ENTROPYSLICE_BOUNDARY7023 6453 pcTmpCU = getPUAbove(uiIdx, uiPartUnitIdx, true, false, true); 7024 #else7025 pcTmpCU = getPUAbove(uiIdx, uiPartUnitIdx, true, true, true);7026 #endif7027 6454 break; 7028 6455 } 7029 6456 case MD_ABOVE_RIGHT: 7030 6457 { 7031 #if MVP_AT_ENTROPYSLICE_BOUNDARY7032 6458 pcTmpCU = getPUAboveRight(uiIdx, uiPartUnitIdx, true, false, true); 7033 #else7034 pcTmpCU = getPUAboveRight(uiIdx, uiPartUnitIdx, true, true, true);7035 #endif7036 6459 break; 7037 6460 } 7038 6461 case MD_BELOW_LEFT: 7039 6462 { 7040 #if MVP_AT_ENTROPYSLICE_BOUNDARY7041 6463 pcTmpCU = getPUBelowLeft(uiIdx, uiPartUnitIdx, true, false); 7042 #else7043 pcTmpCU = getPUBelowLeft(uiIdx, uiPartUnitIdx);7044 #endif7045 6464 break; 7046 6465 } 7047 6466 case MD_ABOVE_LEFT: 7048 6467 { 7049 #if MVP_AT_ENTROPYSLICE_BOUNDARY7050 6468 pcTmpCU = getPUAboveLeft(uiIdx, uiPartUnitIdx, true, false, true); 7051 #else7052 pcTmpCU = getPUAboveLeft(uiIdx, uiPartUnitIdx, true, true, true);7053 #endif7054 6469 break; 7055 6470 } … … 7124 6539 } 7125 6540 7126 #if !AMVP_PRUNING_SIMPLIFICATION7127 /**7128 * Reduce list of motion vector predictors to a set of unique predictors7129 * \param pInfo list of motion vector predictors7130 */7131 Void TComDataCU::xUniqueMVPCand(AMVPInfo* pInfo)7132 {7133 Int n = 1;7134 if ( pInfo->iN == 0 )7135 {7136 #if AMVP_ZERO_CHECKING_REMOVAL7137 return;7138 #else7139 // Add a zero candidate is none is available7140 pInfo->m_acMvCand[ 0 ].setZero();7141 #endif7142 }7143 else7144 {7145 for (Int i = 1; i < pInfo->iN; i++)7146 {7147 Int j;7148 for (j = n - 1; j >= 0; j--)7149 {7150 if ( pInfo->m_acMvCand[ i ] == pInfo->m_acMvCand[ j ] )7151 {7152 break;7153 }7154 }7155 if ( j < 0 )7156 {7157 pInfo->m_acMvCand[ n++ ] = pInfo->m_acMvCand[ i ];7158 }7159 }7160 }7161 pInfo->iN = n;7162 }7163 #endif7164 6541 7165 6542 /** … … 7180 6557 case MD_LEFT: 7181 6558 { 7182 #if MVP_AT_ENTROPYSLICE_BOUNDARY7183 6559 pcTmpCU = getPULeft(uiIdx, uiPartUnitIdx, true, false); 7184 #else7185 pcTmpCU = getPULeft(uiIdx, uiPartUnitIdx);7186 #endif7187 6560 break; 7188 6561 } 7189 6562 case MD_ABOVE: 7190 6563 { 7191 #if MVP_AT_ENTROPYSLICE_BOUNDARY7192 6564 pcTmpCU = getPUAbove(uiIdx, uiPartUnitIdx, true, false, true); 7193 #else7194 pcTmpCU = getPUAbove(uiIdx, uiPartUnitIdx, true, true, true);7195 #endif7196 6565 break; 7197 6566 } 7198 6567 case MD_ABOVE_RIGHT: 7199 6568 { 7200 #if MVP_AT_ENTROPYSLICE_BOUNDARY7201 6569 pcTmpCU = getPUAboveRight(uiIdx, uiPartUnitIdx, true, false, true); 7202 #else7203 pcTmpCU = getPUAboveRight(uiIdx, uiPartUnitIdx, true, true, true);7204 #endif7205 6570 break; 7206 6571 } 7207 6572 case MD_BELOW_LEFT: 7208 6573 { 7209 #if MVP_AT_ENTROPYSLICE_BOUNDARY7210 6574 pcTmpCU = getPUBelowLeft(uiIdx, uiPartUnitIdx, true, false); 7211 #else7212 pcTmpCU = getPUBelowLeft(uiIdx, uiPartUnitIdx);7213 #endif7214 6575 break; 7215 6576 } 7216 6577 case MD_ABOVE_LEFT: 7217 6578 { 7218 #if MVP_AT_ENTROPYSLICE_BOUNDARY7219 6579 pcTmpCU = getPUAboveLeft(uiIdx, uiPartUnitIdx, true, false, true); 7220 #else7221 pcTmpCU = getPUAboveLeft(uiIdx, uiPartUnitIdx, true, true, true);7222 #endif7223 6580 break; 7224 6581 } … … 7781 7138 UInt TComDataCU::getCoefScanIdx(UInt uiAbsPartIdx, UInt uiWidth, Bool bIsLuma, Bool bIsIntra) 7782 7139 { 7783 #if !LOGI_INTRA_NAME_3MPM7784 static const UChar aucIntraDirToScanIdx[MAX_CU_DEPTH][NUM_INTRA_MODE] =7785 {7786 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 07787 },7788 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 07789 },7790 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 07791 },7792 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 07793 },7794 {0, 1, 2, 0, 0, 1, 1, 0, 2, 2, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 07795 },7796 {0, 1, 2, 0, 0, 1, 1, 0, 2, 2, 0, 0, 1, 1, 0, 0, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 07797 },7798 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 07799 },7800 };7801 #endif7802 7140 7803 7141 UInt uiCTXIdx; … … 7829 7167 #endif 7830 7168 7831 #if LOGI_INTRA_NAME_3MPM7832 7169 uiScanIdx = SCAN_ZIGZAG; 7833 7170 if (uiCTXIdx >3 && uiCTXIdx < 6) //if multiple scans supported for PU size … … 7835 7172 uiScanIdx = abs((Int) uiDirMode - VER_IDX) < 5 ? 1 : (abs((Int)uiDirMode - HOR_IDX) < 5 ? 2 : 0); 7836 7173 } 7837 #else7838 uiScanIdx = aucIntraDirToScanIdx[uiCTXIdx][uiDirMode];7839 #endif7840 7174 } 7841 7175 else … … 7854 7188 #endif 7855 7189 } 7856 #if LOGI_INTRA_NAME_3MPM7857 7190 uiScanIdx = SCAN_ZIGZAG; 7858 7191 if (uiCTXIdx >4 && uiCTXIdx < 7) //if multiple scans supported for PU size … … 7860 7193 uiScanIdx = abs((Int) uiDirMode - VER_IDX) < 5 ? 1 : (abs((Int)uiDirMode - HOR_IDX) < 5 ? 2 : 0); 7861 7194 } 7862 #else7863 uiScanIdx = aucIntraDirToScanIdx[max<Int>(uiCTXIdx-1,0)][uiDirMode];7864 #endif7865 7195 } 7866 7196 … … 8354 7684 } 8355 7685 } 8356 #if LCU_SYNTAX_ALF8357 7686 rSGU.allBordersAvailable = true; 8358 7687 for(Int b=0; b< NUM_SGU_BORDER; b++) … … 8364 7693 } 8365 7694 } 8366 #endif8367 7695 8368 7696 } -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComDataCU.h
r293 r294 91 91 UInt height; //!< number of pixels in height 92 92 Bool isBorderAvailable[NUM_SGU_BORDER]; //!< the border availabilities 93 #if LCU_SYNTAX_ALF94 93 Bool allBordersAvailable; 95 #endif96 94 97 95 NDBFBlockInfo():tileID(0), sliceID(0), startSU(0), endSU(0) {} //!< constructor … … 143 141 #endif 144 142 Char* m_pePredMode; ///< array of prediction modes 145 #if H0736_AVC_STYLE_QP_RANGE146 143 Char* m_phQP; ///< array of QP values 147 #else148 UChar* m_phQP; ///< array of QP values149 #endif150 144 UChar* m_puhTrIdx; ///< array of transform indices 151 145 UChar* m_nsqtPartIdx; ///< array of absPartIdx mapping table, map zigzag to NSQT … … 214 208 Bool* m_pbIPCMFlag; ///< array of intra_pcm flags 215 209 216 #if BURST_IPCM217 210 Int m_numSucIPCM; ///< the number of succesive IPCM blocks associated with the current log2CUSize 218 211 Bool m_lastCUSucIPCMFlag; ///< True indicates that the last CU is IPCM and shares the same root as the current CU. 219 #endif220 212 #if HHI_INTER_VIEW_RESIDUAL_PRED 221 213 Bool* m_pbResPredAvailable; ///< array of residual prediction available flags … … 298 290 #endif 299 291 300 #if !AMVP_PRUNING_SIMPLIFICATION301 /// remove redundant candidates302 Void xUniqueMVPCand ( AMVPInfo* pInfo );303 #endif304 292 305 293 Void xCheckCornerCand( TComDataCU* pcCorner, UInt uiCornerIdx, UInt uiIter, Bool& rbValidCand ); … … 316 304 Void xCheckDuplicateCand(TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, bool* pbCandIsInter, UInt& ruiArrayAddr); 317 305 318 #if !BURST_IPCM319 Int getLastValidPartIdx ( Int iAbsPartIdx );320 #endif321 306 322 307 public: … … 336 321 337 322 Void initCU ( TComPic* pcPic, UInt uiCUAddr ); 338 #if H0736_AVC_STYLE_QP_RANGE339 323 Void initEstData ( UInt uiDepth, Int qp ); 340 324 Void initSubCU ( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth, Int qp ); 341 #else342 Void initEstData ( UInt uiDepth, UInt uiQP );343 Void initSubCU ( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth, UInt uiQP );344 #endif345 325 Void setOutsideCUPart ( UInt uiAbsPartIdx, UInt uiDepth ); 346 326 … … 410 390 Void setSizeSubParts ( UInt uiWidth, UInt uiHeight, UInt uiAbsPartIdx, UInt uiDepth ); 411 391 412 #if H0736_AVC_STYLE_QP_RANGE413 392 Char* getQP () { return m_phQP; } 414 393 Char getQP ( UInt uiIdx ) { return m_phQP[uiIdx]; } 415 394 Void setQP ( UInt uiIdx, Char value ){ m_phQP[uiIdx] = value; } 416 395 Void setQPSubParts ( Int qp, UInt uiAbsPartIdx, UInt uiDepth ); 417 #if BURST_IPCM418 396 Int getLastValidPartIdx ( Int iAbsPartIdx ); 419 #endif420 397 Char getLastCodedQP ( UInt uiAbsPartIdx ); 421 #else422 UChar* getQP () { return m_phQP; }423 UChar getQP ( UInt uiIdx ) { return m_phQP[uiIdx]; }424 Void setQP ( UInt uiIdx, UChar uh ) { m_phQP[uiIdx] = uh; }425 Void setQPSubParts ( UInt uiQP, UInt uiAbsPartIdx, UInt uiDepth );426 #if BURST_IPCM427 Int getLastValidPartIdx ( Int iAbsPartIdx );428 #endif429 UChar getLastCodedQP ( UInt uiAbsPartIdx );430 #endif431 398 432 399 #if LOSSLESS_CODING … … 541 508 Void setIPCMFlagSubParts (Bool bIpcmFlag, UInt uiAbsPartIdx, UInt uiDepth); 542 509 543 #if BURST_IPCM544 510 Int getNumSucIPCM () { return m_numSucIPCM; } 545 511 Void setNumSucIPCM ( Int num ) { m_numSucIPCM = num; } 546 512 Bool getLastCUSucIPCMFlag () { return m_lastCUSucIPCMFlag; } 547 513 Void setLastCUSucIPCMFlag ( Bool flg ) { m_lastCUSucIPCMFlag = flg; } 548 #endif549 514 550 515 /// get slice ID for SU … … 637 602 Void fillMvpCand ( UInt uiPartIdx, UInt uiPartAddr, RefPicList eRefPicList, Int iRefIdx, AMVPInfo* pInfo , Int iMVPIdx=-1); 638 603 #endif 639 #if PARALLEL_MERGE640 604 Bool isDiffMER ( Int xN, Int yN, Int xP, Int yP); 641 605 Void getPartPosition ( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH); 642 #endif643 606 Void setMVPIdx ( RefPicList eRefPicList, UInt uiIdx, Int iMVPIdx) { m_apiMVPIdx[eRefPicList][uiIdx] = iMVPIdx; } 644 607 Int getMVPIdx ( RefPicList eRefPicList, UInt uiIdx) { return m_apiMVPIdx[eRefPicList][uiIdx]; } … … 684 647 685 648 TComDataCU* getQpMinCuLeft ( UInt& uiLPartUnitIdx , UInt uiCurrAbsIdxInLCU, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true ); 686 #if H0204_QP_PREDICTION687 649 TComDataCU* getQpMinCuAbove ( UInt& aPartUnitIdx , UInt currAbsIdxInLCU, Bool enforceSliceRestriction=true, Bool enforceEntropySliceRestriction=true ); 688 #endif689 #if H0736_AVC_STYLE_QP_RANGE690 650 Char getRefQP ( UInt uiCurrAbsIdxInLCU ); 691 #else692 UChar getRefQP ( UInt uiCurrAbsIdxInLCU );693 #endif694 651 695 652 TComDataCU* getPUAboveRightAdi ( UInt& uiARPartUnitIdx, UInt uiPuWidth, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true ); … … 703 660 704 661 Bool hasEqualMotion ( UInt uiAbsPartIdx, TComDataCU* pcCandCU, UInt uiCandAbsPartIdx ); 705 #if SIMP_MRG_PRUN706 662 #if MERL_VSP_C0152 707 663 Void getInterMergeCandidates ( UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int* uiVSPIndexTrue, Int mrgCandIdx = -1 ); 708 664 #else 709 665 Void getInterMergeCandidates ( UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int mrgCandIdx = -1 ); 710 #endif711 #else712 Void getInterMergeCandidates ( UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand );713 666 #endif 714 667 Void deriveLeftRightTopIdxGeneral( PartSize eCUMode, UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT ); -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComLoopFilter.cpp
r231 r294 85 85 // Public member functions 86 86 // ==================================================================================================================== 87 #if DBL_CONTROL88 87 Void TComLoopFilter::setCfg( Bool DeblockingFilterControlPresent, UInt uiDisableDblkIdc, Int iBetaOffset_div2, Int iTcOffset_div2, Bool bLFCrossTileBoundary) 89 #else 90 Void TComLoopFilter::setCfg( UInt uiDisableDblkIdc, Int iBetaOffset_div2, Int iTcOffset_div2, Bool bLFCrossTileBoundary) 91 #endif 92 { 93 #if !DBL_CONTROL 94 m_uiDisableDeblockingFilterIdc = uiDisableDblkIdc; 95 #endif 88 { 96 89 m_bLFCrossTileBoundary = bLFCrossTileBoundary; 97 90 98 #if DBL_CONTROL99 91 if (DeblockingFilterControlPresent) 100 92 { … … 109 101 m_tcOffsetDiv2 = 0; 110 102 } 111 #else112 m_betaOffsetDiv2 = iBetaOffset_div2;113 m_tcOffsetDiv2 = iTcOffset_div2;114 #endif115 103 } 116 104 … … 455 443 ) 456 444 { 457 #if NSQT_LFFIX458 445 UInt nsPartQ = uiPartQ; 459 446 UInt nsPartP = uiPartP; … … 468 455 469 456 if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( nsPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(nsPartQ)) != 0 || pcCUP->getCbf( nsPartP, TEXT_LUMA, pcCUP->getTransformIdx(nsPartP) ) != 0) ) 470 #else471 if ( m_aapucBS[iDir][uiAbsPartIdx] && (pcCUQ->getCbf( uiPartQ, TEXT_LUMA, pcCUQ->getTransformIdx(uiPartQ)) != 0 || pcCUP->getCbf( uiPartP, TEXT_LUMA, pcCUP->getTransformIdx(uiPartP) ) != 0) )472 #endif473 457 { 474 458 uiBs = 1; … … 574 558 575 559 UInt uiPelsInPart = g_uiMaxCUWidth >> g_uiMaxCUDepth; 576 #if !DBL_H0473_PART_1577 UInt PartIdxIncr = DEBLOCK_SMALLEST_BLOCK / uiPelsInPart ? DEBLOCK_SMALLEST_BLOCK / uiPelsInPart : 1;578 UInt uiBlocksInPart = uiPelsInPart / DEBLOCK_SMALLEST_BLOCK ? uiPelsInPart / DEBLOCK_SMALLEST_BLOCK : 1;579 #endif580 560 UInt uiBsAbsIdx = 0, uiBs = 0; 581 561 Int iOffset, iSrcStep; … … 602 582 } 603 583 604 #if !DBL_H0473_PART_1605 for ( UInt iIdx = 0; iIdx < uiNumParts; iIdx+=PartIdxIncr )606 {607 uiBs = 0;608 for (UInt iIdxInside = 0; iIdxInside<PartIdxIncr; iIdxInside++)609 {610 uiBsAbsIdx = xCalcBsIdx( pcCU, uiAbsZorderIdx, iDir, iEdge, iIdx+iIdxInside);611 if (uiBs < m_aapucBS[iDir][uiBsAbsIdx])612 {613 uiBs = m_aapucBS[iDir][uiBsAbsIdx];614 }615 }616 617 #else618 584 for ( UInt iIdx = 0; iIdx < uiNumParts; iIdx++ ) 619 585 { 620 586 uiBsAbsIdx = xCalcBsIdx( pcCU, uiAbsZorderIdx, iDir, iEdge, iIdx); 621 587 uiBs = m_aapucBS[iDir][uiBsAbsIdx]; 622 #endif623 588 if ( uiBs ) 624 589 { … … 658 623 659 624 660 #if !DBL_H0473_PART_1661 for (UInt iBlkIdx = 0; iBlkIdx< uiBlocksInPart; iBlkIdx ++)662 {663 Int dp0 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+0), iOffset);664 Int dq0 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+0), iOffset);665 Int dp3 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+3), iOffset);666 Int dq3 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+3), iOffset);667 Int d0 = dp0 + dq0;668 Int d3 = dp3 + dq3;669 670 Int dp4 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+4), iOffset);671 Int dq4 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+4), iOffset);672 Int dp7 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+7), iOffset);673 Int dq7 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+7), iOffset);674 Int d4 = dp4 + dq4;675 Int d7 = dp7 + dq7;676 #else677 625 Int dp0 = xCalcDP( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0), iOffset); 678 626 Int dq0 = xCalcDQ( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0), iOffset); … … 685 633 Int dq = dq0 + dq3; 686 634 Int d = d0 + d3; 687 #endif688 635 689 636 if (bPCMFilter) … … 698 645 bPartQNoFilter = bPartQNoFilter || (pcCU->isLosslessCoded(uiAbsZorderIdx) ); 699 646 #endif 700 #if !DBL_H0473_PART_1701 if (d0+d3 < iBeta)702 {703 Bool bFilterP = (dp0+dp3 < iSideThreshold);704 Bool bFilterQ = (dq0+dq3 < iSideThreshold);705 706 Bool sw = xUseStrongFiltering( iOffset, 2*d0, iBeta, iTc , piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+0))707 && xUseStrongFiltering( iOffset, 2*d3, iBeta, iTc , piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+3));708 709 #else710 647 if (d < iBeta) 711 648 { … … 715 652 Bool sw = xUseStrongFiltering( iOffset, 2*d0, iBeta, iTc, piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+0)) 716 653 && xUseStrongFiltering( iOffset, 2*d3, iBeta, iTc, piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+3)); 717 #endif718 654 719 655 for ( Int i = 0; i < DEBLOCK_SMALLEST_BLOCK/2; i++) 720 656 { 721 #if !DBL_H0473_PART_1722 xPelFilterLuma( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+i), iOffset, d0+d3, iBeta, iTc, sw, bPartPNoFilter, bPartQNoFilter, iThrCut, bFilterP, bFilterQ);723 #else724 657 xPelFilterLuma( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+i), iOffset, d, iBeta, iTc, sw, bPartPNoFilter, bPartQNoFilter, iThrCut, bFilterP, bFilterQ); 725 #endif726 658 727 659 } 728 660 } 729 #if !DBL_H0473_PART_1730 if (d4+d7 < iBeta)731 {732 Bool bFilterP = (dp4+dp7 < iSideThreshold);733 Bool bFilterQ = (dq4+dq7 < iSideThreshold);734 735 Bool sw = xUseStrongFiltering( iOffset, 2*d4, iBeta, iTc , piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+4))736 && xUseStrongFiltering( iOffset, 2*d7, iBeta, iTc , piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+7));737 for ( Int i = DEBLOCK_SMALLEST_BLOCK/2; i < DEBLOCK_SMALLEST_BLOCK; i++)738 {739 xPelFilterLuma( piTmpSrc+iSrcStep*(iIdx*uiPelsInPart+iBlkIdx*DEBLOCK_SMALLEST_BLOCK+i), iOffset, d4+d7, iBeta, iTc, sw, bPartPNoFilter, bPartQNoFilter, iThrCut, bFilterP, bFilterQ);740 }741 }742 }743 #endif744 661 } 745 662 } … … 893 810 if (sw) 894 811 { 895 #if DBL_STRONG_FILTER_CLIP896 812 piSrc[-iOffset] = Clip3(m3-2*tc, m3+2*tc, ((m1 + 2*m2 + 2*m3 + 2*m4 + m5 + 4) >> 3)); 897 813 piSrc[0] = Clip3(m4-2*tc, m4+2*tc, ((m2 + 2*m3 + 2*m4 + 2*m5 + m6 + 4) >> 3)); … … 900 816 piSrc[-iOffset*3] = Clip3(m1-2*tc, m1+2*tc, ((2*m0 + 3*m1 + m2 + m3 + m4 + 4 )>>3)); 901 817 piSrc[ iOffset*2] = Clip3(m6-2*tc, m6+2*tc, ((m3 + m4 + m5 + 3*m6 + 2*m7 +4 )>>3)); 902 #else903 piSrc[-iOffset] = ( m1 + 2*m2 + 2*m3 + 2*m4 + m5 + 4) >> 3;904 piSrc[0] = ( m2 + 2*m3 + 2*m4 + 2*m5 + m6 + 4) >> 3;905 906 piSrc[-iOffset*2] = ( m1 + m2 + m3 + m4 + 2)>>2;907 piSrc[ iOffset] = ( m3 + m4 + m5 + m6 + 2)>>2;908 909 piSrc[-iOffset*3] = ( 2*m0 + 3*m1 + m2 + m3 + m4 + 4 )>>3;910 piSrc[ iOffset*2] = ( m3 + m4 + m5 + 3*m6 + 2*m7 +4 )>>3;911 #endif912 818 } 913 819 else -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComLoopFilter.h
r56 r294 107 107 108 108 /// set configuration 109 #if DBL_CONTROL110 109 Void setCfg( Bool DeblockingFilterControlPresent, UInt uiDisableDblkIdc, Int betaOffsetDiv2, Int tcOffsetDiv2, Bool bLFCrossTileBoundary); 111 #else112 Void setCfg( UInt uiDisableDblkIdc, Int betaOffsetDiv2, Int tcOffsetDiv2, Bool bLFCrossTileBoundary);113 #endif114 110 115 111 /// picture-level deblocking filter -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComMv.h
r289 r294 167 167 const TComMv scaleMv( Int iScale ) const 168 168 { 169 #if CLIPSCALEDMVP170 169 Int mvx = Clip3( -32768, 32767, (iScale * getHor() + 127 + (iScale * getHor() < 0)) >> 8 ); 171 170 Int mvy = Clip3( -32768, 32767, (iScale * getVer() + 127 + (iScale * getVer() < 0)) >> 8 ); 172 171 return TComMv( mvx, mvy ); 173 #else174 return TComMv( (iScale * getHor() + 127 + (iScale * getHor() < 0)) >> 8, (iScale * getVer() + 127 + (iScale * getVer() < 0)) >> 8);175 #endif176 172 } 177 173 };// END CLASS DEFINITION TComMV -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComPattern.cpp
r189 r294 47 47 // ==================================================================================================================== 48 48 49 #if LOGI_INTRA_NAME_3MPM50 49 const UChar TComPattern::m_aucIntraFilter[5] = 51 50 { … … 56 55 10, //64x64 57 56 }; 58 #else59 const UChar TComPattern::m_aucIntraFilter[5][NUM_INTRA_MODE] =60 {61 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 062 }, //4x463 {1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 064 }, //8x865 {1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 066 }, //16x1667 {1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 068 }, //32x3269 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 070 }, //64x6471 };72 #endif73 57 74 58 // ==================================================================================================================== … … 682 666 mapDMMtoIntraMode( uiDirMode ); 683 667 #endif 684 #if LOGI_INTRA_NAME_3MPM685 668 Int diff = min<Int>(abs((Int) uiDirMode - HOR_IDX), abs((Int)uiDirMode - VER_IDX)); 686 669 UChar ucFiltIdx = diff > m_aucIntraFilter[log2BlkSize - 2] ? 1 : 0; … … 689 672 ucFiltIdx = 0; //no smoothing for DC or LM chroma 690 673 } 691 #else692 UChar ucFiltIdx = m_aucIntraFilter[log2BlkSize - 2][uiDirMode];693 #endif694 674 695 675 assert( ucFiltIdx <= 1 ); -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComPattern.h
r189 r294 115 115 #endif 116 116 117 #if LOGI_INTRA_NAME_3MPM118 117 static const UChar m_aucIntraFilter[5]; 119 #else120 static const UChar m_aucIntraFilter[5][NUM_INTRA_MODE];121 #endif122 118 123 119 public: -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComPic.cpp
r292 r294 316 316 m_pbValidSlice[s] = true; 317 317 } 318 #if !LCU_SYNTAX_ALF319 if( pSliceStartAddress == NULL || (numSlices == 1 && numTiles == 1) )320 {321 return;322 }323 #endif324 318 m_pSliceSUMap = new Int[maxNumSUInLCU * numLCUInPic]; 325 319 -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComPicSym.h
r56 r294 133 133 UInt getNumPartInWidth() { return m_uiNumPartInWidth; } 134 134 UInt getNumPartInHeight() { return m_uiNumPartInHeight; } 135 #if !REMOVE_TILE_DEPENDENCE136 Void setTileBoundaryIndependenceIdr( Int i ) { m_iTileBoundaryIndependenceIdr = i; }137 Int getTileBoundaryIndependenceIdr() { return m_iTileBoundaryIndependenceIdr; }138 #endif139 135 Void setNumColumnsMinus1( Int i ) { m_iNumColumnsMinus1 = i; } 140 136 Int getNumColumnsMinus1() { return m_iNumColumnsMinus1; } -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComPrediction.cpp
r290 r294 203 203 204 204 // Map the mode index to main prediction direction and angle 205 #if LOGI_INTRA_NAME_3MPM206 205 assert( dirMode > 0 ); //no planar 207 206 Bool modeDC = dirMode < 2; … … 209 208 Bool modeVer = !modeDC && !modeHor; 210 209 Int intraPredAngle = modeVer ? (Int)dirMode - VER_IDX : modeHor ? -((Int)dirMode - HOR_IDX) : 0; 211 #else212 Bool modeDC = dirMode == 0;213 Bool modeVer = !modeDC && (dirMode < 18);214 Bool modeHor = !modeDC && !modeVer;215 Int intraPredAngle = modeVer ? dirMode - 9 : modeHor ? dirMode - 25 : 0;216 #endif217 210 Int absAng = abs(intraPredAngle); 218 211 Int signAng = intraPredAngle < 0 ? -1 : 1; … … 297 290 for (k=0;k<blkSize;k++) 298 291 { 299 #if REMOVE_DIV_OPERATION300 292 pDst[k*dstStride] = Clip ( pDst[k*dstStride] + (( refSide[k+1] - refSide[0] ) >> 1) ); 301 #else302 pDst[k*dstStride] = Clip ( pDst[k*dstStride] + ( refSide[k+1] - refSide[0] ) / 2 );303 #endif304 293 } 305 294 } … … 376 365 else 377 366 { 378 #if LOGI_INTRA_NAME_3MPM379 367 xPredIntraAng( ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight, uiDirMode, bAbove, bLeft, true ); 380 #else381 xPredIntraAng( ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight, g_aucAngIntraModeOrder[ uiDirMode ], bAbove, bLeft, true );382 #endif383 368 384 369 if( (uiDirMode == DC_IDX ) && bAbove && bLeft ) … … 405 390 { 406 391 // Create the prediction 407 #if LOGI_INTRA_NAME_3MPM408 392 xPredIntraAng( ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight, uiDirMode, bAbove, bLeft, false ); 409 #else410 xPredIntraAng( ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight, g_aucAngIntraModeOrder[ uiDirMode ], bAbove, bLeft, false );411 #endif412 393 } 413 394 } … … 3390 3371 3391 3372 // 2nd step: derive wedge direction 3392 #if LOGI_INTRA_NAME_3MPM3393 3373 Int uiPreds[3] = {-1, -1, -1}; 3394 #else3395 Int uiPreds[2] = {-1, -1};3396 #endif3397 3374 Int iMode = -1; 3398 3375 Int iPredNum = pcCU->getIntraDirLumaPredictor( uiAbsPartIdx, uiPreds, &iMode ); 3399 3376 3400 3377 UInt uiDirMode = 0; 3401 #if LOGI_INTRA_NAME_3MPM3402 3378 if( iMode >= 0 ) { iPredNum = iMode; } 3403 3379 if( iPredNum == 1 ) { uiDirMode = uiPreds[0]; } … … 3409 3385 Bool modeVer = !modeHor; 3410 3386 Int intraPredAngle = modeVer ? (Int)uiDirMode - VER_IDX : modeHor ? -((Int)uiDirMode - HOR_IDX) : 0; 3411 #else3412 if( iPredNum == 1 ) { uiDirMode = g_aucAngIntraModeOrder[uiPreds[0]]; }3413 if( iPredNum == 2 ) { uiDirMode = g_aucAngIntraModeOrder[uiPreds[1]]; }3414 3415 if( uiDirMode == 0 ) { return false; } // no DC3416 3417 Bool modeVer = (uiDirMode < 18);3418 Bool modeHor = !modeVer;3419 Int intraPredAngle = modeVer ? uiDirMode - 9 : modeHor ? uiDirMode - 25 : 0;3420 #endif3421 3387 Int absAng = abs(intraPredAngle); 3422 3388 Int signAng = intraPredAngle < 0 ? -1 : 1; … … 3737 3703 Int* ptrSrc = pcTComPattern->getAdiOrgBuf( iWidth, iHeight, m_piYuvExt ); 3738 3704 Int sw = ( iWidth<<1 ) + 1; 3739 #if !LOGI_INTRA_NAME_3MPM3740 uiDirMode = g_aucAngIntraModeOrder[ uiDirMode ];3741 #endif3742 3705 xPredIntraAngDepth( ptrSrc+sw+1, sw, pDst, uiStride, iWidth, iHeight, uiDirMode ); 3743 3706 } -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComResidualGenerator.cpp
r290 r294 415 415 #endif 416 416 pcCU->convertTransIdx ( 0, pcCU->getTransformIdx( 0 ), uiLumaTrMode, uiChromaTrMode ); 417 #if H0736_AVC_STYLE_QP_RANGE418 417 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA, pcCU->getSlice()->getSPS()->getQpBDOffsetY(), 0 ); 419 #else420 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA, 0 );421 #endif422 418 m_pcTrQuant->invRecurTransformNxN ( pcCU, 0, TEXT_LUMA, pRes, 0, pcCUResidual->getStride(), uiWidth, uiHeight, uiLumaTrMode, 0, piCoeff ); 423 419 // chroma Cb … … 426 422 piCoeff = pcCU->getCoeffCb(); 427 423 pRes = pcCUResidual->getCbAddr(); 428 #if H0736_AVC_STYLE_QP_RANGE429 424 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset() ); 430 #else431 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC() );432 #endif433 425 m_pcTrQuant->invRecurTransformNxN ( pcCU, 0, TEXT_CHROMA_U, pRes, 0, pcCUResidual->getCStride(), uiWidth, uiHeight, uiChromaTrMode, 0, piCoeff ); 434 426 // chroma Cr -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComRom.cpp
r287 r294 417 417 }; 418 418 419 #if !LOGI_INTRA_NAME_3MPM420 // Mapping each Unified Directional Intra prediction direction to DCT/DST transform421 // 0 implies use DCT, 1 implies DST422 423 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX424 const UChar g_aucDCTDSTMode_Vert[NUM_INTRA_MODE+NUM_DMM_MODE] =425 #else426 const UChar g_aucDCTDSTMode_Vert[NUM_INTRA_MODE] =427 #endif428 { //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35429 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0430 #if HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX431 , 0, 0, 0, 0, 0, 0, 0, 0432 #elif HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX433 , 0, 0, 0, 0434 #endif435 };436 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX437 const UChar g_aucDCTDSTMode_Hor[NUM_INTRA_MODE+NUM_DMM_MODE] =438 #else439 const UChar g_aucDCTDSTMode_Hor[NUM_INTRA_MODE] =440 #endif441 { //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35442 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0443 #if HHI_DMM_WEDGE_INTRA && HHI_DMM_PRED_TEX444 , 0, 0, 0, 0, 0, 0, 0, 0445 #elif HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX446 , 0, 0, 0, 0447 #endif448 };449 #endif450 419 451 420 … … 482 451 const UChar g_aucConvertTxtTypeToIdx[4] = { 0, 1, 1, 2 }; 483 452 484 #if !LOGI_INTRA_NAME_3MPM485 // ====================================================================================================================486 // Angular Intra prediction487 // ====================================================================================================================488 489 // g_aucAngIntraModeOrder490 // Indexing this array with the mode indicated in the bitstream491 // gives a logical index used in the prediction functions.492 const UChar g_aucAngIntraModeOrder[NUM_INTRA_MODE] =493 { // ModeOrder LogicalOrderInPredFunctions494 34, // PLANAR_IDX PLANAR PLANAR495 9, // 0 VER DC496 25, // 1 HOR VER-8 (diagonal from top-left to bottom-right = HOR-8)497 0, // 2 DC VER-7498 1, // 4 VER-8 VER-6499 5, // 5 VER-4 VER-5500 13, // 6 VER+4 VER-4501 17, // 7 VER+8 VER-3502 21, // 8 HOR-4 VER-2503 29, // 9 HOR+4 VER-1504 33, // 10 HOR+8 VER505 3, // 11 VER-6 VER+1506 7, // 12 VER-2 VER+2507 11, // 13 VER+2 VER+3508 15, // 14 VER+6 VER+4509 19, // 15 HOR-6 VER+5510 23, // 16 HOR-2 VER+6511 27, // 17 HOR+2 VER+7512 31, // 18 HOR+6 VER+8513 2, // 19 VER-7 HOR-7514 4, // 20 VER-5 HOR-6515 6, // 21 VER-3 HOR-5516 8, // 22 VER-1 HOR-4517 10, // 23 VER+1 HOR-3518 12, // 24 VER+3 HOR-2519 14, // 25 VER+5 HOR-1520 16, // 26 VER+7 HOR521 18, // 27 HOR-7 HOR+1522 20, // 28 HOR-5 HOR+2523 22, // 29 HOR-3 HOR+3524 24, // 30 HOR-1 HOR+4525 26, // 31 HOR+1 HOR+5526 28, // 32 HOR+3 HOR+6527 30, // 33 HOR+5 HOR+7528 32, // 34 HOR+7 HOR+8529 0, // LM_CHROMA_IDX530 };531 532 const UChar g_aucIntraModeNumAng[7] =533 {534 4, // 2x2535 18, // 4x4536 35, // 8x8537 35, // 16x16538 35, // 32x32539 35, // 64x64540 6 // 128x128541 };542 543 const UChar g_aucIntraModeBitsAng[7] =544 {545 2, // 2x2 3 1+1546 5, // 4x4 17 4+1547 6, // 8x8 34 5+esc548 6, // 16x16 34 5+esc549 6, // 32x32 34 5+esc550 6, // 64x64 34 5+esc551 3 // 128x128 5 2+1552 };553 #endif554 453 555 454 // ==================================================================================================================== … … 647 546 }; 648 547 649 #if MULTILEVEL_SIGMAP_EXT650 548 const UInt g_sigLastScan8x8[ 4 ][ 4 ] = 651 549 { … … 656 554 }; 657 555 UInt g_sigLastScanCG32x32[ 64 ]; 658 #endif659 556 660 557 UInt* g_auiNonSquareSigLastScan[ 4 ]; … … 662 559 const UInt g_uiMinInGroup[ 10 ] = {0,1,2,3,4,6,8,12,16,24}; 663 560 const UInt g_uiGroupIdx[ 32 ] = {0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9}; 664 #if LAST_CTX_REDUCTION665 561 const UInt g_uiLastCtx[ 28 ] = 666 562 { … … 670 566 10, 11, 12, 12, 13, 13, 14, 14, 2, 2 // 32x32 10 671 567 }; 672 #else673 const UInt g_uiLastCtx[ 28 ] =674 {675 0, 1, 2, 2, // 4x4 4676 3, 4, 5, 5, 6, 6, // 8x8 6677 7, 8, 9, 9, 10, 10, 11, 11, // 16x16 8678 12, 13, 14, 14, 15, 15, 16, 16, 17, 17 // 32x32 10679 };680 #endif681 568 682 569 // Rice parameters for absolute transform levels 683 #if EIGHT_BITS_RICE_CODE684 570 const UInt g_auiGoRiceRange[5] = 685 571 { … … 691 577 8, 7, 6, 5, 4 692 578 }; 693 #else 694 const UInt g_auiGoRiceRange[4] = 695 { 696 7, 20, 42, 70 697 }; 698 699 const UInt g_auiGoRicePrefixLen[4] = 700 { 701 8, 10, 10, 8 702 }; 703 #endif 704 705 #if EIGHT_BITS_RICE_CODE 579 706 580 const UInt g_aauiGoRiceUpdate[5][24] = 707 581 { 708 #if RESTRICT_GR1GR2FLAG_NUMBER709 582 { 710 583 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4 … … 722 595 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 723 596 } 724 #else 725 { 726 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4 727 }, 728 { 729 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4 730 }, 731 { 732 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4 733 }, 734 { 735 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4 736 }, 737 { 738 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 739 } 740 #endif 741 }; 742 #else 743 const UInt g_aauiGoRiceUpdate[4][16] = 744 { 745 #if RESTRICT_GR1GR2FLAG_NUMBER 746 { 747 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 748 }, 749 { 750 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 751 }, 752 { 753 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 754 }, 755 { 756 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 757 } 758 #else 759 { 760 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3 761 }, 762 { 763 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3 764 }, 765 { 766 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3 767 }, 768 { 769 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 770 } 771 #endif 772 }; 773 #endif 597 }; 774 598 775 599 // initialize g_auiFrameScanXY … … 825 649 if( iWidth < 16 ) 826 650 { 827 #if MULTILEVEL_SIGMAP_EXT828 651 UInt* pBuffTemp = pBuffD; 829 652 if( iWidth == 8 ) … … 831 654 pBuffTemp = g_sigLastScanCG32x32; 832 655 } 833 #endif834 656 for( UInt uiScanLine = 0; uiNextScanPos < uiNumScanPos; uiScanLine++ ) 835 657 { … … 843 665 while( iPrimDim >= 0 && iScndDim < iWidth ) 844 666 { 845 #if MULTILEVEL_SIGMAP_EXT846 667 pBuffTemp[ uiNextScanPos ] = iPrimDim * iWidth + iScndDim ; 847 #else848 pBuffD[ uiNextScanPos ] = iPrimDim * iWidth + iScndDim ;849 #endif850 668 uiNextScanPos++; 851 669 iScndDim++; … … 854 672 } 855 673 } 856 #if MULTILEVEL_SIGMAP_EXT857 674 if( iWidth > 4 ) 858 #else859 else860 #endif861 675 { 862 676 UInt uiNumBlkSide = iWidth >> 2; … … 868 682 uiNextScanPos = 0; 869 683 UInt initBlkPos = g_auiSigLastScan[ SCAN_DIAG ][ log2Blk ][ uiBlk ]; 870 #if MULTILEVEL_SIGMAP_EXT871 684 if( iWidth == 32 ) 872 685 { 873 686 initBlkPos = g_sigLastScanCG32x32[ uiBlk ]; 874 687 } 875 #endif876 688 UInt offsetY = initBlkPos / uiNumBlkSide; 877 689 UInt offsetX = initBlkPos - offsetY * uiNumBlkSide; … … 1000 812 } 1001 813 1002 #if SCALING_LIST1003 814 Int g_quantIntraDefault4x4[16] = 1004 815 { … … 1039 850 24,25,28,33,41,54,71,91 1040 851 }; 1041 #else1042 Int g_quantIntraDefault4x4[16] =1043 {1044 6,13,20,28,1045 13,20,28,32,1046 20,28,32,37,1047 28,32,37,421048 };1049 Int g_quantInterDefault4x4[16] =1050 {1051 10,14,20,24,1052 14,20,24,27,1053 20,24,27,30,1054 24,27,30,341055 };1056 1057 Int g_quantIntraDefault8x8[64] =1058 {1059 6,10,13,16,18,23,25,27,1060 10,11,16,18,23,25,27,29,1061 13,16,18,23,25,27,29,31,1062 16,18,23,25,27,29,31,33,1063 18,23,25,27,29,31,33,36,1064 23,25,27,29,31,33,36,38,1065 25,27,29,31,33,36,38,40,1066 27,29,31,33,36,38,40,421067 };1068 1069 Int g_quantInterDefault8x8[64] =1070 {1071 9,13,15,17,19,21,22,24,1072 13,13,17,19,21,22,24,25,1073 15,17,19,21,22,24,25,27,1074 17,19,21,22,24,25,27,28,1075 19,21,22,24,25,27,28,30,1076 21,22,24,25,27,28,30,32,1077 22,24,25,27,28,30,32,33,1078 24,25,27,28,30,32,33,351079 };1080 1081 Int g_quantIntraDefault16x16[256] =1082 {1083 16,16,16,16,16,16,16,16,17,17,18,19,21,22,24,27,1084 16,16,16,16,16,16,16,16,17,18,18,20,21,23,25,27,1085 16,16,16,16,16,16,16,17,17,18,19,20,22,23,25,28,1086 16,16,16,16,16,16,17,17,18,19,20,21,23,25,27,29,1087 16,16,16,16,17,17,18,19,20,21,22,23,25,27,29,31,1088 16,16,16,16,17,18,19,20,22,23,24,26,27,29,32,34,1089 16,16,16,17,18,19,21,23,24,25,27,29,31,33,36,39,1090 16,16,17,17,19,20,23,25,27,29,31,33,35,38,41,44,1091 17,17,17,18,20,22,24,27,30,32,35,38,41,44,47,51,1092 17,18,18,19,21,23,25,29,32,36,40,43,47,51,55,60,1093 18,18,19,20,22,24,27,31,35,40,44,49,54,59,65,70,1094 19,20,20,21,23,26,29,33,38,43,49,56,62,69,75,82,1095 21,21,22,23,25,27,31,35,41,47,54,62,70,79,88,97,1096 22,23,23,25,27,29,33,38,44,51,59,69,79,90,101,113,1097 24,25,25,27,29,32,36,41,47,55,65,75,88,101,115,130,1098 27,27,28,29,31,34,39,44,51,60,70,82,97,113,130,1491099 };1100 1101 Int g_quantInterDefault16x16[256] =1102 {1103 16,16,16,16,16,16,16,16,17,17,18,19,20,21,22,27,1104 16,16,16,16,16,16,16,17,17,18,19,20,21,22,27,27,1105 16,16,16,16,16,16,17,17,18,19,20,21,22,27,27,28,1106 16,16,16,16,16,17,17,18,19,20,21,22,27,27,28,29,1107 16,16,16,16,17,17,18,19,20,21,22,27,27,28,29,30,1108 16,16,16,17,17,18,19,20,21,22,27,27,28,29,30,32,1109 16,16,17,17,18,19,20,21,22,27,27,28,29,30,32,36,1110 16,17,17,18,19,20,21,22,27,27,28,29,30,32,36,40,1111 17,17,18,19,20,21,22,27,27,28,29,30,32,36,40,45,1112 17,18,19,20,21,22,27,27,28,29,30,32,36,40,45,52,1113 18,19,20,21,22,27,27,28,29,30,32,36,40,45,52,59,1114 19,20,21,22,27,27,28,29,30,32,36,40,45,52,59,68,1115 20,21,22,27,27,28,29,30,32,36,40,45,52,59,68,79,1116 21,22,27,27,28,29,30,32,36,40,45,52,59,68,79,91,1117 22,27,27,28,29,30,32,36,40,45,52,59,68,79,91,103,1118 27,27,28,29,30,32,36,40,45,52,59,68,79,91,103,1171119 };1120 1121 Int g_quantIntraDefault32x32[1024] =1122 {1123 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,27,28,1124 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,23,23,24,25,27,28,1125 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,18,19,20,20,21,22,23,24,25,26,27,28,1126 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,21,22,23,24,25,26,27,28,1127 16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,20,21,22,23,23,24,25,26,28,29,1128 16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,18,19,19,20,21,21,22,23,24,25,26,27,28,30,1129 16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,18,18,19,19,20,20,21,21,22,23,24,25,26,27,28,29,30,1130 16,16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,19,19,20,20,21,21,22,23,24,25,26,27,28,29,30,31,1131 16,16,16,16,16,16,16,16,17,17,17,18,18,18,19,19,20,20,21,21,22,22,23,24,25,26,27,28,29,30,31,33,1132 16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,20,20,21,22,22,23,23,24,25,26,27,28,29,30,31,33,34,1133 16,16,16,16,16,16,16,17,17,18,18,19,19,20,20,21,22,22,23,23,24,25,26,26,27,28,29,30,32,33,34,36,1134 16,16,16,16,16,16,17,17,18,18,19,20,20,21,21,22,23,23,24,25,25,26,27,28,29,30,31,32,33,35,36,38,1135 16,16,16,16,16,16,17,17,18,19,19,20,21,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,36,37,39,40,1136 16,16,16,16,16,17,17,18,18,19,20,21,22,23,24,24,25,26,27,28,29,30,31,32,33,34,35,37,38,39,41,43,1137 16,16,16,16,17,17,17,18,19,20,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,38,39,41,42,44,46,1138 16,16,17,17,17,17,18,18,19,20,21,22,23,24,26,27,28,29,31,32,33,34,35,37,38,39,41,42,44,45,47,49,1139 17,17,17,17,17,18,18,19,20,20,22,23,24,25,27,28,30,31,32,34,35,36,38,39,41,42,44,45,47,49,51,53,1140 17,17,17,17,18,18,19,19,20,21,22,23,25,26,28,29,31,33,34,36,37,39,41,42,44,45,47,49,51,53,55,57,1141 17,17,18,18,18,18,19,20,21,22,23,24,25,27,29,31,32,34,36,38,40,42,43,45,47,49,51,53,55,57,60,62,1142 18,18,18,18,19,19,20,20,21,22,23,25,26,28,30,32,34,36,38,40,42,44,46,48,51,53,55,57,60,62,65,67,1143 18,18,18,19,19,19,20,21,22,23,24,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,1144 19,19,19,19,20,20,21,21,22,23,25,26,28,30,32,34,36,39,42,44,47,50,52,55,58,61,64,67,70,73,76,79,1145 19,19,20,20,20,21,21,22,23,24,26,27,29,31,33,35,38,41,43,46,49,52,56,59,62,65,69,72,75,79,82,86,1146 20,20,20,21,21,21,22,23,24,25,26,28,30,32,34,37,39,42,45,48,52,55,59,62,66,70,74,77,81,85,89,93,1147 21,21,21,21,22,22,23,24,25,26,27,29,31,33,35,38,41,44,47,51,54,58,62,66,70,74,79,83,88,92,97,101,1148 22,22,22,22,23,23,24,25,26,27,28,30,32,34,36,39,42,45,49,53,57,61,65,70,74,79,84,89,94,99,104,110,1149 22,23,23,23,23,24,25,26,27,28,29,31,33,35,38,41,44,47,51,55,59,64,69,74,79,84,90,95,101,107,113,119,1150 23,23,24,24,24,25,26,27,28,29,30,32,34,37,39,42,45,49,53,57,62,67,72,77,83,89,95,101,108,114,121,128,1151 24,24,25,25,25,26,27,28,29,30,32,33,36,38,41,44,47,51,55,60,65,70,75,81,88,94,101,108,115,122,130,138,1152 25,25,26,26,26,27,28,29,30,31,33,35,37,39,42,45,49,53,57,62,67,73,79,85,92,99,107,114,122,131,139,148,1153 27,27,27,27,28,28,29,30,31,33,34,36,39,41,44,47,51,55,60,65,70,76,82,89,97,104,113,121,130,139,149,159,1154 28,28,28,28,29,30,30,31,33,34,36,38,40,43,46,49,53,57,62,67,73,79,86,93,101,110,119,128,138,148,159,1701155 };1156 1157 Int g_quantInterDefault32x32[1024] =1158 {1159 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,1160 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,1161 16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,1162 16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,1163 16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,1164 16,16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,1165 16,16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,1166 16,16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,1167 16,16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,1168 16,16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,1169 16,16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,1170 16,16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,1171 16,16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,1172 16,16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,1173 16,16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,1174 16,17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,1175 17,17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,1176 17,17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,1177 17,18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,1178 18,18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,1179 18,19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,1180 19,19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,1181 19,20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,1182 20,21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,1183 21,22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,80,1184 22,22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,80,87,1185 22,23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,80,87,94,1186 23,24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,80,87,94,101,1187 24,25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,80,87,94,101,108,1188 25,26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,80,87,94,101,108,115,1189 26,28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,80,87,94,101,108,115,123,1190 28,28,28,28,29,30,30,31,32,33,34,35,36,38,40,42,45,48,52,56,60,64,69,74,80,87,94,101,108,115,123,1311191 };1192 #endif1193 852 UInt g_scalingListSize [4] = {16,64,256,1024}; 1194 853 UInt g_scalingListSizeX [4] = { 4, 8, 16, 32}; -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComRom.h
r287 r294 135 135 extern const UInt g_uiLastCtx[ 28 ]; 136 136 137 #if EIGHT_BITS_RICE_CODE138 137 extern const UInt g_auiGoRiceRange[5]; //!< maximum value coded with Rice codes 139 138 extern const UInt g_auiGoRicePrefixLen[5]; //!< prefix length for each maximum value 140 139 extern const UInt g_aauiGoRiceUpdate[5][24]; //!< parameter update rules for Rice codes 141 #else142 extern const UInt g_auiGoRiceRange[4]; //!< maximum value coded with Rice codes143 extern const UInt g_auiGoRicePrefixLen[4]; //!< prefix length for each maximum value144 extern const UInt g_aauiGoRiceUpdate[4][16]; //!< parameter update rules for Rice codes145 #endif146 140 147 #if MULTILEVEL_SIGMAP_EXT148 141 extern const UInt g_sigLastScan8x8[ 4 ][ 4 ]; //!< coefficient group scan order for 8x8 TUs 149 142 extern UInt g_sigLastScanCG32x32[ 64 ]; 150 #endif151 143 152 144 // ==================================================================================================================== … … 214 206 Void addWedgeletToList( TComWedgelet cWedgelet, std::vector<TComWedgelet> &racWedgeList, std::vector<TComWedgeRef> &racWedgeRefList ); 215 207 216 #if DEFAULT_DC217 208 __inline Void mapDMMtoIntraMode( UInt& dirMode ) { dirMode = (dirMode >= NUM_INTRA_MODE) ? DC_IDX : dirMode; } 218 209 __inline Void mapDMMtoIntraMode( Int& dirMode ) { dirMode = (dirMode >= NUM_INTRA_MODE) ? DC_IDX : dirMode; } 219 #else220 __inline Void mapDMMtoIntraMode( UInt& dirMode ) { dirMode = (dirMode >= NUM_INTRA_MODE) ? PLANAR_IDX : dirMode; }221 __inline Void mapDMMtoIntraMode( Int& dirMode ) { dirMode = (dirMode >= NUM_INTRA_MODE) ? PLANAR_IDX : dirMode; }222 #endif223 210 #endif 224 211 … … 287 274 #define MAX_MATRIX_COEF_NUM 64 ///< max coefficient number for quantization matrix 288 275 #define MAX_MATRIX_SIZE_NUM 8 ///< max size number for quantization matrix 289 #if SCALING_LIST290 276 #define SCALING_LIST_DC 16 ///< default DC value 291 #endif292 277 enum ScalingListDIR 293 278 { … … 336 321 }, 337 322 }; 338 #if SCALING_LIST339 323 static const char MatrixType_DC[4][12][22] = 340 324 { … … 356 340 }, 357 341 }; 358 #endif359 342 extern Int g_quantIntraDefault4x4[16]; 360 343 extern Int g_quantIntraDefault8x8[64]; -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComSampleAdaptiveOffset.cpp
r56 r294 66 66 m_pClipTable = NULL; 67 67 m_pClipTableBase = NULL; 68 #if SAO_UNIT_INTERLEAVING69 68 m_lumaTableBo = NULL; 70 #else71 m_ppLumaTableBo0 = NULL;72 m_ppLumaTableBo1 = NULL;73 #endif74 69 m_iUpBuff1 = NULL; 75 70 m_iUpBuff2 = NULL; … … 136 131 2, 137 132 2, 138 #if !SAO_UNIT_INTERLEAVING139 1,140 #endif141 133 1 142 134 }; … … 161 153 SAO_EO_LEN, 162 154 SAO_EO_LEN, 163 #if !SAO_UNIT_INTERLEAVING164 SAO_BO_LEN,165 #endif166 155 SAO_BO_LEN 167 156 }; … … 259 248 * m_iNumTotalParts must allow for sufficient storage in any allocated arrays */ 260 249 m_iNumTotalParts = max(3,m_aiNumCulPartsLevel[m_uiMaxSplitLevel]); 261 #if !SAO_UNIT_INTERLEAVING262 UInt auiTable[2][LUMA_GROUP_NUM] =263 {{0, 0, 0, 0, 0, 0, 0, 0,264 1, 2, 3, 4, 5, 6, 7, 8,265 9,10,11,12,13,14,15,16,266 0, 0, 0, 0, 0, 0, 0, 0},267 268 {1, 2, 3, 4, 5, 6, 7, 8,269 0, 0, 0, 0, 0, 0, 0, 0,270 0, 0, 0, 0, 0, 0, 0, 0,271 9,10,11,12,13,14,15,16}};272 #endif273 250 274 251 UInt uiInternalBitDepth = g_uiBitDepth+g_uiBitIncrement; … … 276 253 UInt uiBoRangeShift = uiInternalBitDepth - SAO_BO_BITS; 277 254 278 #if SAO_UNIT_INTERLEAVING279 255 m_lumaTableBo = new Pel [uiPixelRange]; 280 256 for (Int k2=0; k2<uiPixelRange; k2++) … … 282 258 m_lumaTableBo[k2] = 1 + (k2>>uiBoRangeShift); 283 259 } 284 #else285 m_ppLumaTableBo0 = new Pel [uiPixelRange];286 m_ppLumaTableBo1 = new Pel [uiPixelRange];287 for (Int k2=0; k2<uiPixelRange; k2++)288 {289 m_ppLumaTableBo0[k2] = auiTable[0][k2>>uiBoRangeShift];290 m_ppLumaTableBo1[k2] = auiTable[1][k2>>uiBoRangeShift];291 }292 #endif293 260 m_iUpBuff1 = new Int[m_iPicWidth+2]; 294 261 m_iUpBuff2 = new Int[m_iPicWidth+2]; … … 345 312 delete [] m_iOffsetBo; m_iOffsetBo = NULL; 346 313 } 347 #if SAO_UNIT_INTERLEAVING348 314 if (m_lumaTableBo) 349 315 { 350 316 delete[] m_lumaTableBo; m_lumaTableBo = NULL; 351 317 } 352 #else353 if (m_ppLumaTableBo0)354 {355 delete[] m_ppLumaTableBo0; m_ppLumaTableBo0 = NULL;356 }357 if (m_ppLumaTableBo1)358 {359 delete[] m_ppLumaTableBo1; m_ppLumaTableBo1 = NULL;360 }361 #endif362 318 363 319 … … 416 372 pcSaoParam->iNumClass[j] = m_iNumClass[j]; 417 373 } 418 #if SAO_UNIT_INTERLEAVING419 374 pcSaoParam->numCuInWidth = m_iNumCuInWidth; 420 375 pcSaoParam->numCuInHeight = m_iNumCuInHeight; … … 422 377 pcSaoParam->saoLcuParam[1] = new SaoLcuParam [m_iNumCuInHeight*m_iNumCuInWidth]; 423 378 pcSaoParam->saoLcuParam[2] = new SaoLcuParam [m_iNumCuInHeight*m_iNumCuInWidth]; 424 #endif425 379 } 426 380 … … 448 402 449 403 pSaoPart->UpPartIdx = iParentPartIdx; 450 #if !SAO_UNIT_INTERLEAVING451 pSaoPart->bEnableFlag = 0;452 #endif453 404 pSaoPart->iBestType = -1; 454 405 pSaoPart->iLength = 0; 455 406 456 #if SAO_UNIT_INTERLEAVING457 407 pSaoPart->bandPosition = 0; 458 408 459 409 for (j=0;j<MAX_NUM_SAO_OFFSETS;j++) 460 #else461 for (j=0;j<MAX_NUM_SAO_CLASS;j++)462 #endif463 410 { 464 411 pSaoPart->iOffset[j] = 0; … … 545 492 pcSaoParam->psSaoPart[1] = 0; 546 493 pcSaoParam->psSaoPart[2] = 0; 547 #if SAO_UNIT_INTERLEAVING548 494 if( pcSaoParam->saoLcuParam[0]) 549 495 { … … 558 504 delete [] pcSaoParam->saoLcuParam[2]; pcSaoParam->saoLcuParam[2] = NULL; 559 505 } 560 #endif561 506 } 562 507 … … 572 517 for(Int i=0; i< m_aiNumCulPartsLevel[m_uiMaxSplitLevel]; i++) 573 518 { 574 #if !SAO_UNIT_INTERLEAVING575 pcSaoParam->psSaoPart[c][i].bEnableFlag = 0;576 #endif577 519 pcSaoParam->psSaoPart[c][i].iBestType = -1; 578 520 pcSaoParam->psSaoPart[c][i].iLength = 0; … … 582 524 pcSaoParam->psSaoPart[c][i].iMinDist = MAX_INT; 583 525 pcSaoParam->psSaoPart[c][i].iMinRate = MAX_INT; 584 #if SAO_UNIT_INTERLEAVING585 526 pcSaoParam->psSaoPart[c][i].bandPosition = 0; 586 527 for (Int j=0;j<MAX_NUM_SAO_OFFSETS;j++) 587 #else588 for (Int j=0;j<MAX_NUM_SAO_CLASS;j++)589 #endif590 528 { 591 529 pcSaoParam->psSaoPart[c][i].iOffset[j] = 0; … … 594 532 } 595 533 } 596 #if SAO_UNIT_INTERLEAVING597 534 pcSaoParam->oneUnitFlag[0] = 0; 598 535 pcSaoParam->oneUnitFlag[1] = 0; … … 601 538 resetLcuPart(pcSaoParam->saoLcuParam[1]); 602 539 resetLcuPart(pcSaoParam->saoLcuParam[2]); 603 #endif604 540 } 605 541 } … … 882 818 break; 883 819 } 884 #if SAO_UNIT_INTERLEAVING885 820 case SAO_BO: 886 #else887 case SAO_BO_0:888 case SAO_BO_1:889 #endif890 821 { 891 822 for (y=0; y< height; y++) … … 1108 1039 break; 1109 1040 } 1110 #if SAO_UNIT_INTERLEAVING1111 1041 case SAO_BO: 1112 #else1113 case SAO_BO_0:1114 case SAO_BO_1:1115 #endif1116 1042 { 1117 1043 for (y=0; y<iLcuHeight; y++) … … 1134 1060 } 1135 1061 } 1136 #if !SAO_UNIT_INTERLEAVING1137 /** sample adaptive offset process for one partition1138 * \param *psQTPart, uiPartIdx, iYCbCr1139 */1140 Void TComSampleAdaptiveOffset::processSaoOnePart(SAOQTPart *psQTPart, UInt uiPartIdx, Int iYCbCr)1141 {1142 int i;1143 UInt uiEdgeType, uiTypeIdx;1144 Pel* ppLumaTable = NULL;1145 SAOQTPart* pOnePart= &(psQTPart[uiPartIdx]);1146 1147 static Int iOffset[LUMA_GROUP_NUM];1148 Int LcuIdxX;1149 Int LcuIdxY;1150 Int iAddr;1151 Int iFrameWidthInCU = m_pcPic->getFrameWidthInCU();1152 1153 if(pOnePart->bEnableFlag)1154 {1155 uiTypeIdx = pOnePart->iBestType;1156 if (uiTypeIdx == SAO_BO_0 || uiTypeIdx == SAO_BO_1)1157 {1158 for (i=0;i<pOnePart->iLength;i++)1159 iOffset[i+1] = pOnePart->iOffset[i] << m_uiSaoBitIncrease;1160 1161 if (uiTypeIdx == SAO_BO_0 )1162 {1163 ppLumaTable = m_ppLumaTableBo0;1164 }1165 if (uiTypeIdx == SAO_BO_1 )1166 {1167 ppLumaTable = m_ppLumaTableBo1;1168 }1169 1170 #if FULL_NBIT1171 for (i=0;i<(1<<(g_uiBitDepth));i++)1172 #else1173 for (i=0;i<(1<<(g_uiBitIncrement+8));i++)1174 #endif1175 {1176 m_iOffsetBo[i] = m_pClipTable[i + iOffset[ppLumaTable[i]]];1177 }1178 1179 }1180 if (uiTypeIdx == SAO_EO_0 || uiTypeIdx == SAO_EO_1 || uiTypeIdx == SAO_EO_2 || uiTypeIdx == SAO_EO_3)1181 {1182 for (i=0;i<pOnePart->iLength;i++)1183 {1184 iOffset[i+1] = pOnePart->iOffset[i] << m_uiSaoBitIncrease;1185 }1186 for (uiEdgeType=0;uiEdgeType<6;uiEdgeType++)1187 {1188 m_iOffsetEo[uiEdgeType]= iOffset[m_auiEoTable[uiEdgeType]];1189 }1190 }1191 for (LcuIdxY = pOnePart->StartCUY; LcuIdxY<= pOnePart->EndCUY; LcuIdxY++)1192 {1193 for (LcuIdxX = pOnePart->StartCUX; LcuIdxX<= pOnePart->EndCUX; LcuIdxX++)1194 {1195 iAddr = LcuIdxY * iFrameWidthInCU + LcuIdxX;1196 processSaoCu(iAddr, uiTypeIdx, iYCbCr);1197 }1198 }1199 }1200 }1201 1202 /** Process quadtree sample adaptive offset1203 * \param psQTPart, uiPartIdx, iYCbCr1204 */1205 Void TComSampleAdaptiveOffset::processSaoQuadTree(SAOQTPart *psQTPart, UInt uiPartIdx, Int iYCbCr)1206 {1207 SAOQTPart* pSaoPart= &(psQTPart[uiPartIdx]);1208 1209 if (uiPartIdx == 0)1210 {1211 initTmpSaoQuadTree(psQTPart, iYCbCr);1212 xSaoAllPart(psQTPart, iYCbCr);1213 return;1214 }1215 1216 if (!pSaoPart->bSplit)1217 {1218 if (pSaoPart->bEnableFlag)1219 {1220 processSaoOnePart(psQTPart, uiPartIdx, iYCbCr);1221 }1222 return;1223 }1224 1225 if (pSaoPart->PartLevel < m_uiMaxSplitLevel)1226 {1227 processSaoQuadTree(psQTPart, pSaoPart->DownPartsIdx[0], iYCbCr);1228 processSaoQuadTree(psQTPart, pSaoPart->DownPartsIdx[1], iYCbCr);1229 processSaoQuadTree(psQTPart, pSaoPart->DownPartsIdx[2], iYCbCr);1230 processSaoQuadTree(psQTPart, pSaoPart->DownPartsIdx[3], iYCbCr);1231 }1232 }1233 1234 /** run SAO processing in LCU order1235 * \param *psQTPart, iYCbCr1236 */1237 Void TComSampleAdaptiveOffset::xSaoAllPart(SAOQTPart *psQTPart, Int iYCbCr)1238 {1239 int i;1240 UInt uiEdgeType;1241 Pel* ppLumaTable = NULL;1242 Int iTypeIdx;1243 1244 static Int iOffset[LUMA_GROUP_NUM];1245 Int LcuIdxX;1246 Int LcuIdxY;1247 Int iAddr;1248 Int iFrameWidthInCU = m_pcPic->getFrameWidthInCU();1249 Int iFrameHeightInCU = m_pcPic->getFrameHeightInCU();1250 Int iPartIdx;1251 Pel *pRec;1252 Int iPicWidthTmp;1253 Int iStride;1254 Pel *pTmpUSwap;1255 Int iIsChroma = (iYCbCr == 0) ? 0:1;1256 1257 SAOQTPart* pOnePart;1258 1259 for (LcuIdxY = 0; LcuIdxY< iFrameHeightInCU; LcuIdxY++)1260 {1261 iAddr = LcuIdxY * iFrameWidthInCU;1262 if (iYCbCr == 0)1263 {1264 pRec = m_pcPic->getPicYuvRec()->getLumaAddr(iAddr);1265 iStride = m_pcPic->getStride();1266 iPicWidthTmp = m_iPicWidth;1267 }1268 else if (iYCbCr == 1)1269 {1270 pRec = m_pcPic->getPicYuvRec()->getCbAddr(iAddr);1271 iStride = m_pcPic->getCStride();1272 iPicWidthTmp = m_iPicWidth>>1;1273 }1274 else1275 {1276 pRec = m_pcPic->getPicYuvRec()->getCrAddr(iAddr);1277 iStride = m_pcPic->getCStride();1278 iPicWidthTmp = m_iPicWidth>>1;1279 }1280 1281 // pRec += iStride*(m_uiMaxCUHeight-1);1282 for (i=0;i<(m_uiMaxCUHeight>>iIsChroma)+1;i++)1283 {1284 m_pTmpL1[i] = pRec[0];1285 pRec+=iStride;1286 }1287 pRec-=(iStride<<1);1288 1289 memcpy(m_pTmpU2, pRec, sizeof(Pel)*iPicWidthTmp);1290 1291 for (LcuIdxX = 0; LcuIdxX< iFrameWidthInCU; LcuIdxX++)1292 {1293 iAddr = LcuIdxY * iFrameWidthInCU + LcuIdxX;1294 iPartIdx = m_iLcuPartIdx[iAddr];1295 if (iPartIdx>=0)1296 {1297 pOnePart = &(psQTPart[iPartIdx]);1298 iTypeIdx = pOnePart->iBestType;1299 if (iTypeIdx>=0)1300 {1301 if (iTypeIdx == SAO_BO_0 || iTypeIdx == SAO_BO_1)1302 {1303 for (i=0;i<pOnePart->iLength;i++)1304 iOffset[i+1] = pOnePart->iOffset[i] << m_uiSaoBitIncrease;1305 1306 if (iTypeIdx == SAO_BO_0 )1307 {1308 ppLumaTable = m_ppLumaTableBo0;1309 }1310 if (iTypeIdx == SAO_BO_1 )1311 {1312 ppLumaTable = m_ppLumaTableBo1;1313 }1314 1315 #if FULL_NBIT1316 for (i=0;i<(1<<(g_uiBitDepth));i++)1317 #else1318 for (i=0;i<(1<<(g_uiBitIncrement+8));i++)1319 #endif1320 {1321 m_iOffsetBo[i] = m_pClipTable[i + iOffset[ppLumaTable[i]]];1322 }1323 1324 }1325 if (iTypeIdx == SAO_EO_0 || iTypeIdx == SAO_EO_1 || iTypeIdx == SAO_EO_2 || iTypeIdx == SAO_EO_3)1326 {1327 for (i=0;i<pOnePart->iLength;i++)1328 {1329 iOffset[i+1] = pOnePart->iOffset[i] << m_uiSaoBitIncrease;1330 }1331 for (uiEdgeType=0;uiEdgeType<6;uiEdgeType++)1332 {1333 m_iOffsetEo[uiEdgeType]= iOffset[m_auiEoTable[uiEdgeType]];1334 }1335 }1336 processSaoCu(iAddr, iTypeIdx, iYCbCr);1337 }1338 }1339 else1340 {1341 if (LcuIdxX != (iFrameWidthInCU-1))1342 {1343 if( m_iLcuPartIdx[iAddr+1] >=0)1344 {1345 if (iYCbCr == 0)1346 {1347 pRec = m_pcPic->getPicYuvRec()->getLumaAddr(iAddr);1348 iStride = m_pcPic->getStride();1349 }1350 else if (iYCbCr == 1)1351 {1352 pRec = m_pcPic->getPicYuvRec()->getCbAddr(iAddr);1353 iStride = m_pcPic->getCStride();1354 }1355 else1356 {1357 pRec = m_pcPic->getPicYuvRec()->getCrAddr(iAddr);1358 iStride = m_pcPic->getCStride();1359 }1360 Int iWidthShift = m_uiMaxCUWidth>>iIsChroma;1361 for (i=0;i<(m_uiMaxCUHeight>>iIsChroma)+1;i++)1362 {1363 m_pTmpL1[i] = pRec[iWidthShift-1];1364 pRec+=iStride;1365 }1366 }1367 }1368 }1369 }1370 pTmpUSwap = m_pTmpU1;1371 m_pTmpU1 = m_pTmpU2;1372 m_pTmpU2 = pTmpUSwap;1373 }1374 }1375 1376 /** initialize buffer for quadtree boundary1377 * \param *psQTPart, iYCbCr1378 */1379 Void TComSampleAdaptiveOffset::initTmpSaoQuadTree(SAOQTPart *psQTPart, Int iYCbCr)1380 {1381 Pel *pRec;1382 Int iPicWidthTmp;1383 1384 1385 memset(m_iLcuPartIdx,-1, sizeof(Int)*m_iNumCuInWidth*m_iNumCuInHeight);1386 convertSaoQt2Lcu(psQTPart, 0);1387 1388 if (iYCbCr == 0)1389 {1390 pRec = m_pcPic->getPicYuvRec()->getLumaAddr();1391 iPicWidthTmp = m_iPicWidth;1392 }1393 else if (iYCbCr == 1)1394 {1395 pRec = m_pcPic->getPicYuvRec()->getCbAddr();1396 iPicWidthTmp = m_iPicWidth>>1;1397 }1398 else1399 {1400 pRec = m_pcPic->getPicYuvRec()->getCrAddr();1401 iPicWidthTmp = m_iPicWidth>>1;1402 }1403 1404 memcpy(m_pTmpU1, pRec, sizeof(Pel)*iPicWidthTmp);1405 }1406 1407 /** recursive covert quadtree partition index to each LCU1408 * \param psQTPart, uiPartIdx1409 */1410 Void TComSampleAdaptiveOffset::convertSaoQt2Lcu(SAOQTPart *psQTPart,UInt uiPartIdx)1411 {1412 1413 SAOQTPart* pSaoPart= &(psQTPart[uiPartIdx]);1414 1415 if (!pSaoPart->bSplit)1416 {1417 xSaoQt2Lcu(psQTPart, uiPartIdx);1418 return;1419 }1420 1421 if (pSaoPart->PartLevel < m_uiMaxSplitLevel)1422 {1423 convertSaoQt2Lcu(psQTPart, pSaoPart->DownPartsIdx[0]);1424 convertSaoQt2Lcu(psQTPart, pSaoPart->DownPartsIdx[1]);1425 convertSaoQt2Lcu(psQTPart, pSaoPart->DownPartsIdx[2]);1426 convertSaoQt2Lcu(psQTPart, pSaoPart->DownPartsIdx[3]);1427 }1428 }1429 1430 /** assign quadtree partition index to each LCU1431 * \param psQTPart, uiPartIdx1432 */1433 1434 Void TComSampleAdaptiveOffset::xSaoQt2Lcu(SAOQTPart *psQTPart,UInt uiPartIdx)1435 {1436 Int LcuIdxX;1437 Int LcuIdxY;1438 Int iAddr;1439 Int iFrameWidthInCU = m_iNumCuInWidth;1440 1441 for (LcuIdxY = psQTPart[uiPartIdx].StartCUY; LcuIdxY<= psQTPart[uiPartIdx].EndCUY; LcuIdxY++)1442 {1443 for (LcuIdxX = psQTPart[uiPartIdx].StartCUX; LcuIdxX<= psQTPart[uiPartIdx].EndCUX; LcuIdxX++)1444 {1445 iAddr = LcuIdxY * iFrameWidthInCU + LcuIdxX;1446 if (psQTPart[uiPartIdx].bEnableFlag)1447 {1448 m_iLcuPartIdx[iAddr] = (Int)uiPartIdx;1449 }1450 else1451 {1452 m_iLcuPartIdx[iAddr] = -1;1453 }1454 }1455 }1456 }1457 #endif1458 1062 /** Sample adaptive offset process 1459 1063 * \param pcPic, pcSaoParam … … 1474 1078 } 1475 1079 1476 #if SAO_UNIT_INTERLEAVING1477 1080 if (m_saoInterleavingFlag) 1478 1081 { … … 1496 1099 1497 1100 1498 #else1499 Int iY = 0;1500 processSaoQuadTree( pcSaoParam->psSaoPart[iY], 0 , iY);1501 1502 Int iCb = 1;1503 Int iCr = 2;1504 if (pcSaoParam->bSaoFlag[iCb])1505 {1506 processSaoQuadTree( pcSaoParam->psSaoPart[iCb], 0 , iCb);1507 }1508 if (pcSaoParam->bSaoFlag[iCr])1509 {1510 processSaoQuadTree( pcSaoParam->psSaoPart[iCr], 0 , iCr);1511 }1512 #endif1513 1101 m_pcPic = NULL; 1514 1102 } … … 1533 1121 } 1534 1122 } 1535 #if SAO_UNIT_INTERLEAVING1536 1123 /** Process SAO all units 1537 1124 * \param saoLcuParam SAO LCU parameters … … 1789 1376 1790 1377 1791 #endif1792 1378 1793 1379 //! \} -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComSampleAdaptiveOffset.h
r56 r294 52 52 #define SAO_BO_BITS 5 53 53 #define LUMA_GROUP_NUM (1<<SAO_BO_BITS) 54 #if SAO_UNIT_INTERLEAVING55 54 #define MAX_NUM_SAO_OFFSETS 4 56 55 #define MAX_NUM_SAO_CLASS 33 57 #else58 #define MAX_NUM_SAO_CLASS 3259 #endif60 56 // ==================================================================================================================== 61 57 // Class definition … … 95 91 Pel *m_pClipTable; 96 92 Pel *m_pClipTableBase; 97 #if SAO_UNIT_INTERLEAVING98 93 Pel *m_lumaTableBo; 99 #else100 Pel *m_ppLumaTableBo0;101 Pel *m_ppLumaTableBo1;102 #endif103 94 Int *m_iUpBuff1; 104 95 Int *m_iUpBuff2; … … 115 106 Pel* m_pTmpL2; 116 107 Int* m_iLcuPartIdx; 117 #if SAO_UNIT_INTERLEAVING118 108 Int m_maxNumOffsetsPerPic; 119 109 Bool m_saoInterleavingFlag; 120 #else121 Void initTmpSaoQuadTree(SAOQTPart *psQTPart, Int iYCbCr);122 Void disableSaoOnePart(SAOQTPart *psQTPart, UInt uiPartIdx, Int iYCbCr);123 Void xSaoQt2Lcu(SAOQTPart *psQTPart,UInt uiPartIdx);124 Void convertSaoQt2Lcu(SAOQTPart *psQTPart,UInt uiPartIdx);125 Void xSaoAllPart(SAOQTPart *psQTPart, Int iYCbCr);126 #endif127 110 public: 128 111 TComSampleAdaptiveOffset (); … … 151 134 Void processSaoBlock(Pel* pDec, Pel* pRest, Int stride, Int iSaoType, UInt xPos, UInt yPos, UInt width, UInt height, Bool* pbBorderAvail); 152 135 153 #if SAO_UNIT_INTERLEAVING154 136 Void resetLcuPart(SaoLcuParam* saoLcuParam); 155 137 Void convertQT2SaoUnit(SAOParam* saoParam, UInt partIdx, Int yCbCr); … … 158 140 Void setSaoInterleavingFlag (Bool bVal) {m_saoInterleavingFlag = bVal;} 159 141 Bool getSaoInterleavingFlag () {return m_saoInterleavingFlag;} 160 #endif161 142 }; 162 143 -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComSlice.cpp
r292 r294 110 110 , m_cabacInitIdc ( -1 ) 111 111 #endif 112 #if TILES_WPP_ENTRY_POINT_SIGNALLING113 112 , m_numEntryPointOffsets ( 0 ) 114 #endif115 113 #if LGE_ILLUCOMP_B0045 116 114 , m_bApplyIC ( false ) … … 197 195 m_cabacInitFlag = false; 198 196 #endif 199 #if TILES_WPP_ENTRY_POINT_SIGNALLING200 197 m_numEntryPointOffsets = 0; 201 #endif202 198 #if QC_TMVP_MRG_REFIDX_C0047 203 199 m_aiNewRefIdx[0] = -1; … … 646 642 } 647 643 } 648 #if H0566_TLA649 644 if( getNalUnitTypeBaseViewMvc() == NAL_UNIT_CODED_SLICE_CRA ) // CRA picture found 650 #else651 if( getNalUnitTypeBaseViewMvc() == NAL_UNIT_CODED_SLICE_CDR ) // CDR picture found652 #endif653 645 { 654 646 pocCRA = getPOC(); … … 703 695 bRefreshPending = false; 704 696 } 705 #if H0566_TLA706 697 if( getNalUnitTypeBaseViewMvc() == NAL_UNIT_CODED_SLICE_CRA ) // CRA picture found 707 #else708 if( getNalUnitTypeBaseViewMvc() == NAL_UNIT_CODED_SLICE_CDR ) // CDR picture found709 #endif710 698 { 711 699 bRefreshPending = true; … … 830 818 831 819 m_saoEnabledFlag = pSrc->m_saoEnabledFlag; 832 #if SAO_UNIT_INTERLEAVING833 820 m_saoInterleavingFlag = pSrc->m_saoInterleavingFlag; 834 821 m_saoEnabledFlagCb = pSrc->m_saoEnabledFlagCb; 835 822 m_saoEnabledFlagCr = pSrc->m_saoEnabledFlagCr; 836 #endif837 823 #if CABAC_INIT_FLAG 838 824 m_cabacInitFlag = pSrc->m_cabacInitFlag; 839 825 #endif 840 #if TILES_WPP_ENTRY_POINT_SIGNALLING841 826 m_numEntryPointOffsets = pSrc->m_numEntryPointOffsets; 842 #endif 843 844 #if H0111_MVD_L1_ZERO 827 845 828 m_bLMvdL1Zero = pSrc->m_bLMvdL1Zero; 846 #endif847 829 } 848 830 … … 856 838 Void TComSlice::setTLayerInfo( UInt uiTLayer ) 857 839 { 858 #if !H0566_TLA859 // If temporal_id_nesting_flag == 1, then num_temporal_layer_switching_point_flags shall be inferred to be 0 and temporal_layer_switching_point_flag shall be inferred to be 1 for all temporal layers860 if ( m_pcSPS->getTemporalIdNestingFlag() )861 {862 m_pcPPS->setNumTLayerSwitchingFlags( 0 );863 for ( UInt i = 0; i < MAX_TLAYER; i++ )864 {865 m_pcPPS->setTLayerSwitchingFlag( i, true );866 }867 }868 else869 {870 for ( UInt i = m_pcPPS->getNumTLayerSwitchingFlags(); i < MAX_TLAYER; i++ )871 {872 m_pcPPS->setTLayerSwitchingFlag( i, false );873 }874 }875 #endif876 840 877 841 m_uiTLayer = uiTLayer; 878 #if !H0566_TLA 879 m_bTLayerSwitchingFlag = m_pcPPS->getTLayerSwitchingFlag( uiTLayer ); 880 #endif 881 } 882 883 #if H0566_TLA && H0566_TLA_SET_FOR_SWITCHING_POINTS 842 } 843 844 #if H0566_TLA_SET_FOR_SWITCHING_POINTS 884 845 /** Function for checking if this is a switching-point 885 846 */ … … 959 920 /** Function for applying picture marking based on the Reference Picture Set in pReferencePictureSet. 960 921 */ 961 #if START_DECODING_AT_CRA962 922 Int TComSlice::checkThatAllRefPicsAreAvailable( TComList<TComPic*>& rcListPic, TComReferencePictureSet *pReferencePictureSet, Bool outputFlag, Int pocRandomAccess) 963 #else964 Int TComSlice::checkThatAllRefPicsAreAvailable( TComList<TComPic*>& rcListPic, TComReferencePictureSet *pReferencePictureSet, Bool outputFlag)965 #endif966 923 { 967 924 TComPic* rpcPic; … … 1009 966 if(isAvailable == 0) 1010 967 { 1011 #if START_DECODING_AT_CRA1012 968 if (this->getPOC() + pReferencePictureSet->getDeltaPOC(i) >= pocRandomAccess) 1013 969 { 1014 #endif1015 970 if(!pReferencePictureSet->getUsed(i) ) 1016 971 { … … 1026 981 iPocLost=this->getPOC() + pReferencePictureSet->getDeltaPOC(i); 1027 982 } 1028 #if START_DECODING_AT_CRA 1029 } 1030 #endif 983 } 1031 984 } 1032 985 } … … 1053 1006 if(isAvailable == 0) 1054 1007 { 1055 #if START_DECODING_AT_CRA1056 1008 if (this->getPOC() + pReferencePictureSet->getDeltaPOC(i) >= pocRandomAccess) 1057 1009 { 1058 #endif1059 1010 if(!pReferencePictureSet->getUsed(i) ) 1060 1011 { … … 1070 1021 iPocLost=this->getPOC() + pReferencePictureSet->getDeltaPOC(i); 1071 1022 } 1072 #if START_DECODING_AT_CRA 1073 } 1074 #endif 1023 } 1075 1024 } 1076 1025 } … … 1138 1087 Int rIdx = this->getRPSidx() - pReferencePictureSet->getDeltaRIdxMinus1() - 1; 1139 1088 Int deltaRPS = pReferencePictureSet->getDeltaRPS(); 1140 #if RPS_IN_SPS1141 1089 TComReferencePictureSet* pcRefRPS = this->getSPS()->getRPSList()->getReferencePictureSet(rIdx); 1142 #else1143 TComReferencePictureSet* pcRefRPS = this->getPPS()->getRPSList()->getReferencePictureSet(rIdx);1144 #endif1145 1090 Int iRefPics = pcRefRPS->getNumberOfPictures(); 1146 1091 Int iNewIdc=0; … … 1169 1114 pcRPS->setNumRefIdc(iNewIdc); 1170 1115 pcRPS->setDeltaRPS(deltaRPS); 1171 #if RPS_IN_SPS1172 1116 pcRPS->setDeltaRIdxMinus1(pReferencePictureSet->getDeltaRIdxMinus1() + this->getSPS()->getRPSList()->getNumberOfReferencePictureSets() - this->getRPSidx()); 1173 #else1174 pcRPS->setDeltaRIdxMinus1(pReferencePictureSet->getDeltaRIdxMinus1() + this->getPPS()->getRPSList()->getNumberOfReferencePictureSets() - this->getRPSidx());1175 #endif1176 1117 } 1177 1118 … … 1539 1480 , m_picWidthInLumaSamples (352) 1540 1481 , m_picHeightInLumaSamples (288) 1541 #if PIC_CROPPING1542 1482 , m_picCroppingFlag (false) 1543 1483 , m_picCropLeftOffset ( 0) … … 1545 1485 , m_picCropTopOffset ( 0) 1546 1486 , m_picCropBottomOffset ( 0) 1547 #endif1548 1487 , m_uiMaxCUWidth ( 32) 1549 1488 , m_uiMaxCUHeight ( 32) … … 1551 1490 , m_uiMinTrDepth ( 0) 1552 1491 , m_uiMaxTrDepth ( 1) 1553 #if RPS_IN_SPS1554 1492 , m_bLongTermRefsPresent (false) 1555 #endif1556 #if !H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1557 , m_numReorderFrames ( 0)1558 #endif1559 1493 , m_iNumberOfUsableInterViewRefs( 0 ) 1560 1494 , m_uiQuadtreeTULog2MaxSize ( 0) … … 1568 1502 , m_bDisInter4x4 ( 1) 1569 1503 , m_bUseALF (false) 1570 #if LCU_SYNTAX_ALF1571 1504 , m_bALFCoefInSlice (false) 1572 #endif1573 #if !PIC_CROPPING1574 , m_bUsePAD (false)1575 #endif1576 1505 , m_bUseLMChroma (false) 1577 1506 , m_bUseLComb (false) 1578 1507 , m_bLCMod (false) 1579 #if H0412_REF_PIC_LIST_RESTRICTION1580 1508 #if QC_MVHEVC_B0046 1581 1509 , m_restrictedRefPicListsFlag ( 0) … … 1584 1512 #endif 1585 1513 , m_listsModificationPresentFlag( 0) 1586 #endif1587 1514 , m_uiBitDepth ( 8) 1588 1515 , m_uiBitIncrement ( 0) 1589 #if H0736_AVC_STYLE_QP_RANGE1590 1516 , m_qpBDOffsetY ( 0) 1591 1517 , m_qpBDOffsetC ( 0) 1592 #endif1593 1518 #if LOSSLESS_CODING 1594 1519 , m_useLossless (false) … … 1613 1538 , m_bTemporalIdNestingFlag (false) 1614 1539 , m_scalingListEnabledFlag (false) 1615 #if !H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1616 , m_uiMaxDecFrameBuffering ( 0)1617 , m_uiMaxLatencyIncrease ( 0)1618 #endif1619 #if TILES_WPP_ENTRY_POINT_SIGNALLING1620 1540 , m_tilesOrEntropyCodingSyncIdc( 0 ) 1621 1541 , m_numSubstreams ( 0 ) 1622 #endif1623 1542 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 1624 1543 , m_bUseDMM (false) … … 1633 1552 // AMVP parameter 1634 1553 ::memset( m_aeAMVPMode, 0, sizeof( m_aeAMVPMode ) ); 1635 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1636 1554 for ( Int i = 0; i < MAX_TLAYER; i++ ) 1637 1555 { … … 1640 1558 m_numReorderPics[i] = 0; 1641 1559 } 1642 #endif1643 1560 1644 1561 m_uiViewId = 0; … … 1778 1695 , m_iChromaQpOffset (0) 1779 1696 , m_iChromaQpOffset2nd (0) 1780 #if !RPS_IN_SPS1781 , m_bLongTermRefsPresent (false)1782 #endif1783 #if !H0566_TLA1784 , m_uiNumTlayerSwitchingFlags (0)1785 #endif1786 1697 , m_iSliceGranularity (0) 1787 1698 , m_iTileBehaviorControlPresentFlag (0) … … 1789 1700 , m_iColumnRowInfoPresent (0) 1790 1701 , m_iUniformSpacingIdr (0) 1791 #if !REMOVE_TILE_DEPENDENCE1792 , m_iTileBoundaryIndependenceIdr (0)1793 #endif1794 1702 , m_iNumColumnsMinus1 (0) 1795 1703 , m_puiColumnWidth (NULL) 1796 1704 , m_iNumRowsMinus1 (0) 1797 1705 , m_puiRowHeight (NULL) 1798 #if !WPP_SIMPLIFICATION1799 , m_iEntropyCodingSynchro (0)1800 , m_bCabacIstateReset (false)1801 #endif1802 1706 , m_iNumSubstreams (1) 1803 #if MULTIBITS_DATA_HIDING1804 1707 , m_signHideFlag(0) 1805 1708 , m_signHidingThreshold(0) 1806 #endif1807 1709 #if CABAC_INIT_FLAG 1808 1710 , m_cabacInitPresentFlag (false) … … 1813 1715 #endif 1814 1716 { 1815 #if !H0566_TLA1816 for ( UInt i = 0; i < MAX_TLAYER; i++ )1817 {1818 m_abTLayerSwitchingFlag[i] = false;1819 }1820 #endif1821 1717 } 1822 1718 … … 2086 1982 : m_bRefPicListModificationFlagL0 (false) 2087 1983 , m_bRefPicListModificationFlagL1 (false) 2088 #if !H0137_0138_LIST_MODIFICATION 2089 , m_uiNumberOfRefPicListModificationsL0 (0) 2090 , m_uiNumberOfRefPicListModificationsL1 (0) 2091 #endif 2092 { 2093 #if !H0137_0138_LIST_MODIFICATION 2094 ::memset( m_ListIdcL0, 0, sizeof(m_ListIdcL0) ); 2095 #endif 1984 { 2096 1985 ::memset( m_RefPicSetIdxL0, 0, sizeof(m_RefPicSetIdxL0) ); 2097 #if !H0137_0138_LIST_MODIFICATION2098 ::memset( m_ListIdcL1, 0, sizeof(m_ListIdcL1) );2099 #endif2100 1986 ::memset( m_RefPicSetIdxL1, 0, sizeof(m_RefPicSetIdxL1) ); 2101 1987 } … … 2111 1997 m_bSaoEnabled = false; 2112 1998 m_pSaoParam = NULL; 2113 #if LCU_SYNTAX_ALF2114 1999 m_alfParamSet = NULL; 2115 #else2116 m_pAlfParam = NULL;2117 #endif2118 2000 m_scalingList = NULL; 2119 2001 m_scalingListEnabled = false; … … 2135 2017 m_bSaoEnabled = src.m_bSaoEnabled; 2136 2018 m_pSaoParam = src.m_pSaoParam; 2137 #if LCU_SYNTAX_ALF2138 2019 m_alfParamSet = src.m_alfParamSet; 2139 #else2140 m_pAlfParam = src.m_pAlfParam;2141 #endif2142 2020 m_scalingList = src.m_scalingList; 2143 2021 m_scalingListEnabled = src.m_scalingListEnabled; 2144 #if SAO_UNIT_INTERLEAVING2145 2022 m_saoInterleavingFlag = src.m_saoInterleavingFlag; 2146 #endif2147 2023 2148 2024 return *this; … … 2165 2041 Void TComAPS::createAlfParam() 2166 2042 { 2167 #if LCU_SYNTAX_ALF2168 2043 m_alfParamSet = new AlfParamSet; 2169 #else2170 m_pAlfParam = new ALFParam;2171 #endif2172 2044 } 2173 2045 Void TComAPS::destroyAlfParam() 2174 2046 { 2175 #if LCU_SYNTAX_ALF2176 2047 if(m_alfParamSet != NULL) 2177 2048 { … … 2179 2050 m_alfParamSet = NULL; 2180 2051 } 2181 #else2182 if(m_pAlfParam != NULL)2183 {2184 delete m_pAlfParam;2185 m_pAlfParam = NULL;2186 }2187 #endif2188 2052 } 2189 2053 … … 2221 2085 * \returns true if use default quantization matrix in all size 2222 2086 */ 2223 #if SCALING_LIST2224 2087 Bool TComSlice::checkDefaultScalingList() 2225 2088 { … … 2238 2101 return (defaultCounter == (SCALING_LIST_NUM * SCALING_LIST_SIZE_NUM - 4)) ? true : false; // -4 for 32x32 2239 2102 } 2240 #else2241 Bool TComSlice::checkDefaultScalingList()2242 {2243 UInt i;2244 Int *dst=0;2245 Int *src=0;2246 UInt defaultCounter=0;2247 2248 //4x42249 for(i=0;i<SCALING_LIST_NUM;i++)2250 {2251 src = (i<3) ? g_quantIntraDefault4x4 : g_quantInterDefault4x4;2252 dst = getScalingList()->getScalingListAddress(SCALING_LIST_4x4,i);2253 if(::memcmp(dst,src,sizeof(UInt)*16) == 0) defaultCounter++;2254 }2255 2256 //8x82257 for(i=0;i<SCALING_LIST_NUM;i++)2258 {2259 src = (i<3) ? g_quantIntraDefault8x8 : g_quantInterDefault8x8;2260 dst = getScalingList()->getScalingListAddress(SCALING_LIST_8x8,i);2261 if(::memcmp(dst,src,sizeof(UInt)*64) == 0) defaultCounter++;2262 }2263 //16x162264 for(i=0;i<SCALING_LIST_NUM;i++)2265 {2266 src = (i<3) ? g_quantIntraDefault16x16 : g_quantInterDefault16x16;2267 dst = getScalingList()->getScalingListAddress(SCALING_LIST_16x16,i);2268 if(::memcmp(dst,src,sizeof(UInt)*256) == 0) defaultCounter++;2269 }2270 //32x322271 for(i=0;i<SCALING_LIST_NUM_32x32;i++)2272 {2273 src = (i<1) ? g_quantIntraDefault32x32 : g_quantInterDefault32x32;2274 dst = getScalingList()->getScalingListAddress(SCALING_LIST_32x32,i*3);2275 if(::memcmp(dst,src,sizeof(UInt)*1024) == 0) defaultCounter++;2276 }2277 return (defaultCounter == (SCALING_LIST_NUM * SCALING_LIST_SIZE_NUM - 4)) ? true : false; // -4 for 32x322278 }2279 #endif2280 2103 /** get scaling matrix from RefMatrixID 2281 2104 * \param sizeId size index … … 2285 2108 Void TComScalingList::processRefMatrix( UInt sizeId, UInt listId , UInt refListId ) 2286 2109 { 2287 #if SCALING_LIST2288 2110 ::memcpy(getScalingListAddress(sizeId, listId),getScalingListAddress(sizeId, refListId),sizeof(Int)*min(MAX_MATRIX_COEF_NUM,(Int)g_scalingListSize[sizeId])); 2289 #else2290 ::memcpy(getScalingListAddress(sizeId, listId),getScalingListAddress(sizeId, refListId),sizeof(Int)*g_scalingListSize[sizeId]);2291 #endif2292 2111 } 2293 2112 /** parse syntax infomation … … 2313 2132 for(sizeIdc = 0; sizeIdc < SCALING_LIST_SIZE_NUM; sizeIdc++) 2314 2133 { 2315 #if SCALING_LIST2316 2134 size = min(MAX_MATRIX_COEF_NUM,(Int)g_scalingListSize[sizeIdc]); 2317 #else2318 size = g_scalingListSize[sizeIdc];2319 #endif2320 2135 for(listIdc = 0; listIdc < g_scalingListNum[sizeIdc]; listIdc++) 2321 2136 { … … 2343 2158 src[i] = data; 2344 2159 } 2345 #if SCALING_LIST2346 2160 //set DC value for default matrix check 2347 2161 setScalingListDC(sizeIdc,listIdc,src[0]); … … 2369 2183 setScalingListDC(sizeIdc,listIdc,data); 2370 2184 } 2371 #endif2372 2185 } 2373 2186 } … … 2384 2197 for(UInt listId = 0; listId < g_scalingListNum[sizeId]; listId++) 2385 2198 { 2386 #if SCALING_LIST2387 2199 m_scalingListCoef[sizeId][listId] = new Int [min(MAX_MATRIX_COEF_NUM,(Int)g_scalingListSize[sizeId])]; 2388 #else2389 m_scalingListCoef[sizeId][listId] = new Int [g_scalingListSize[sizeId]];2390 #endif2391 2200 } 2392 2201 } … … 2421 2230 src = (listId<3) ? g_quantIntraDefault8x8 : g_quantInterDefault8x8; 2422 2231 break; 2423 #if SCALING_LIST2424 2232 case SCALING_LIST_16x16: 2425 2233 src = (listId<3) ? g_quantIntraDefault8x8 : g_quantInterDefault8x8; … … 2428 2236 src = (listId<1) ? g_quantIntraDefault8x8 : g_quantInterDefault8x8; 2429 2237 break; 2430 #else2431 case SCALING_LIST_16x16:2432 src = (listId<3) ? g_quantIntraDefault16x16 : g_quantInterDefault16x16;2433 break;2434 case SCALING_LIST_32x32:2435 src = (listId<1) ? g_quantIntraDefault32x32 : g_quantInterDefault32x32;2436 break;2437 #endif2438 2238 default: 2439 2239 assert(0); … … 2449 2249 Void TComScalingList::processDefaultMarix(UInt sizeId, UInt listId) 2450 2250 { 2451 #if SCALING_LIST2452 2251 ::memcpy(getScalingListAddress(sizeId, listId),getScalingListDefaultAddress(sizeId,listId),sizeof(Int)*min(MAX_MATRIX_COEF_NUM,(Int)g_scalingListSize[sizeId])); 2453 2252 setUseDefaultScalingMatrixFlag(sizeId,listId,true); 2454 2253 setScalingListDC(sizeId,listId,SCALING_LIST_DC); 2455 #else 2456 ::memcpy(getScalingListAddress(sizeId, listId),getScalingListDefaultAddress(sizeId,listId),sizeof(Int)*(Int)g_scalingListSize[sizeId]); 2457 #endif 2458 } 2459 #if SCALING_LIST 2254 } 2460 2255 /** check DC value of matrix for default matrix signaling 2461 2256 */ … … 2475 2270 } 2476 2271 } 2477 #endif2478 2272 2479 2273 ParameterSetManager::ParameterSetManager() -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComSlice.h
r292 r294 68 68 // ==================================================================================================================== 69 69 70 #if RPS_IN_SPS71 70 /// Reference Picture Set class 72 71 class TComReferencePictureSet … … 142 141 Void setNumberOfReferencePictureSets(Int numberOfReferencePictureSets); 143 142 }; 144 #endif145 143 146 144 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 … … 276 274 UInt m_picWidthInLumaSamples; 277 275 UInt m_picHeightInLumaSamples; 278 #if PIC_CROPPING279 276 Bool m_picCroppingFlag; 280 277 Int m_picCropLeftOffset; … … 282 279 Int m_picCropTopOffset; 283 280 Int m_picCropBottomOffset; 284 #else285 Int m_aiPad[2];286 #endif287 281 UInt m_uiMaxCUWidth; 288 282 UInt m_uiMaxCUHeight; … … 290 284 UInt m_uiMinTrDepth; 291 285 UInt m_uiMaxTrDepth; 292 #if RPS_IN_SPS293 286 TComRPSList* m_RPSList; 294 287 Bool m_bLongTermRefsPresent; 295 #endif296 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER297 288 Int m_numReorderPics[MAX_TLAYER]; 298 #else299 Int m_maxNumberOfReferencePictures;300 Int m_numReorderFrames;301 #endif302 289 303 290 Int m_iNumberOfUsableInterViewRefs; … … 315 302 Bool m_useAMP; 316 303 Bool m_bUseALF; 317 #if LCU_SYNTAX_ALF318 304 Bool m_bALFCoefInSlice; 319 #endif320 #if !PIC_CROPPING321 Bool m_bUsePAD;322 #endif323 305 Bool m_bUseLMChroma; // JL: 324 306 … … 327 309 Bool m_useNSQT; 328 310 329 #if H0412_REF_PIC_LIST_RESTRICTION330 311 Bool m_restrictedRefPicListsFlag; 331 312 Bool m_listsModificationPresentFlag; 332 #endif333 313 334 314 // Parameter … … 336 316 UInt m_uiBitDepth; 337 317 UInt m_uiBitIncrement; 338 #if H0736_AVC_STYLE_QP_RANGE339 318 Int m_qpBDOffsetY; 340 319 Int m_qpBDOffsetC; 341 #endif342 320 343 321 #if LOSSLESS_CODING … … 381 359 382 360 Bool m_scalingListEnabledFlag; 383 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER384 361 UInt m_uiMaxDecPicBuffering[MAX_TLAYER]; 385 362 UInt m_uiMaxLatencyIncrease[MAX_TLAYER]; 386 #else387 UInt m_uiMaxDecFrameBuffering;388 UInt m_uiMaxLatencyIncrease;389 #endif390 363 391 364 Bool m_useDF; 392 365 393 #if TILES_WPP_ENTRY_POINT_SIGNALLING394 366 UInt m_tilesOrEntropyCodingSyncIdc; 395 367 Int m_numSubstreams; 396 #endif397 368 398 369 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX … … 452 423 UInt getPicHeightInLumaSamples () { return m_picHeightInLumaSamples; } 453 424 454 #if PIC_CROPPING455 425 Bool getPicCroppingFlag() const { return m_picCroppingFlag; } 456 426 Void setPicCroppingFlag(Bool val) { m_picCroppingFlag = val; } … … 463 433 Int getPicCropBottomOffset() const { return m_picCropBottomOffset; } 464 434 Void setPicCropBottomOffset(Int val) { m_picCropBottomOffset = val; } 465 #endif466 435 467 436 Void setMaxCUWidth ( UInt u ) { m_uiMaxCUWidth = u; } … … 495 464 UInt getQuadtreeTUMaxDepthInter() { return m_uiQuadtreeTUMaxDepthInter; } 496 465 UInt getQuadtreeTUMaxDepthIntra() { return m_uiQuadtreeTUMaxDepthIntra; } 497 #if !PIC_CROPPING498 Void setPad (Int iPad[2]) { m_aiPad[0] = iPad[0]; m_aiPad[1] = iPad[1]; }499 #endif500 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER501 466 Void setNumReorderPics(Int i, UInt tlayer) { m_numReorderPics[tlayer] = i; } 502 467 Int getNumReorderPics(UInt tlayer) { return m_numReorderPics[tlayer]; } 503 #else504 Void setMaxNumberOfReferencePictures( Int u ) { m_maxNumberOfReferencePictures = u; }505 Int getMaxNumberOfReferencePictures() { return m_maxNumberOfReferencePictures; }506 Void setNumReorderFrames( Int i ) { m_numReorderFrames = i; }507 Int getNumReorderFrames() { return m_numReorderFrames; }508 #endif509 #if RPS_IN_SPS510 468 Void setRPSList( TComRPSList* RPSList ) { m_RPSList = RPSList; } 511 469 TComRPSList* getRPSList() { return m_RPSList; } 512 470 Bool getLongTermRefsPresent() { return m_bLongTermRefsPresent; } 513 471 Void setLongTermRefsPresent(Bool b) { m_bLongTermRefsPresent=b; } 514 #endif515 472 516 473 Void setNumberOfUsableInterViewRefs( Int number ) { m_iNumberOfUsableInterViewRefs = number; } … … 519 476 Int getUsableInterViewRef( Int pos ) { return m_aiUsableInterViewRefs[pos]; } 520 477 521 #if !PIC_CROPPING522 Void setPadX ( Int u ) { m_aiPad[0] = u; }523 Void setPadY ( Int u ) { m_aiPad[1] = u; }524 Int getPad ( Int u ) { assert(u < 2); return m_aiPad[u];}525 Int* getPad ( ) { return m_aiPad; }526 #endif527 478 528 479 // physical transform … … 532 483 // Tool list 533 484 Bool getUseALF () { return m_bUseALF; } 534 #if LCU_SYNTAX_ALF535 485 Void setUseALFCoefInSlice(Bool b) {m_bALFCoefInSlice = b;} 536 486 Bool getUseALFCoefInSlice() {return m_bALFCoefInSlice;} 537 #endif 538 539 #if !PIC_CROPPING 540 Bool getUsePAD () { return m_bUsePAD; } 541 Void setUsePAD ( Bool b ) { m_bUsePAD = b; } 542 #endif 487 543 488 Void setUseALF ( Bool b ) { m_bUseALF = b; } 544 489 Void setUseLComb (Bool b) { m_bUseLComb = b; } … … 557 502 Void setUseNSQT( Bool b ) { m_useNSQT = b; } 558 503 559 #if H0412_REF_PIC_LIST_RESTRICTION560 504 Bool getRestrictedRefPicListsFlag () { return m_restrictedRefPicListsFlag; } 561 505 Void setRestrictedRefPicListsFlag ( Bool b ) { m_restrictedRefPicListsFlag = b; } 562 506 Bool getListsModificationPresentFlag () { return m_listsModificationPresentFlag; } 563 507 Void setListsModificationPresentFlag ( Bool b ) { m_listsModificationPresentFlag = b; } 564 #endif565 508 566 509 // AMVP mode (for each depth) … … 577 520 UInt getBitIncrement () { return m_uiBitIncrement; } 578 521 Void setBitIncrement ( UInt u ) { m_uiBitIncrement = u; } 579 #if H0736_AVC_STYLE_QP_RANGE580 522 Int getQpBDOffsetY () { return m_qpBDOffsetY; } 581 523 Void setQpBDOffsetY ( Int value ) { m_qpBDOffsetY = value; } 582 524 Int getQpBDOffsetC () { return m_qpBDOffsetC; } 583 525 Void setQpBDOffsetC ( Int value ) { m_qpBDOffsetC = value; } 584 #endif585 526 586 527 Void setLFCrossSliceBoundaryFlag ( Bool bValue ) { m_bLFCrossSliceBoundaryFlag = bValue; } … … 625 566 Void setUniformSpacingIdr ( Int i ) { m_iUniformSpacingIdr = i; } 626 567 Int getUniformSpacingIdr () { return m_iUniformSpacingIdr; } 627 #if !REMOVE_TILE_DEPENDENCE628 Void setTileBoundaryIndependenceIdr ( Int i ) { m_iTileBoundaryIndependenceIdr = i; }629 Int getTileBoundaryIndependenceIdr () { return m_iTileBoundaryIndependenceIdr; }630 #endif631 568 Void setNumColumnsMinus1 ( Int i ) { m_iNumColumnsMinus1 = i; } 632 569 Int getNumColumnsMinus1 () { return m_iNumColumnsMinus1; } … … 661 598 Bool getScalingListFlag () { return m_scalingListEnabledFlag; } 662 599 Void setScalingListFlag ( Bool b ) { m_scalingListEnabledFlag = b; } 663 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER664 600 UInt getMaxDecPicBuffering (UInt tlayer) { return m_uiMaxDecPicBuffering[tlayer]; } 665 601 Void setMaxDecPicBuffering ( UInt ui, UInt tlayer ) { m_uiMaxDecPicBuffering[tlayer] = ui; } 666 602 UInt getMaxLatencyIncrease (UInt tlayer) { return m_uiMaxLatencyIncrease[tlayer]; } 667 603 Void setMaxLatencyIncrease ( UInt ui , UInt tlayer) { m_uiMaxLatencyIncrease[tlayer] = ui; } 668 #else669 UInt getMaxDecFrameBuffering () { return m_uiMaxDecFrameBuffering; }670 Void setMaxDecFrameBuffering ( UInt ui ) { m_uiMaxDecFrameBuffering = ui; }671 UInt getMaxLatencyIncrease () { return m_uiMaxLatencyIncrease; }672 Void setMaxLatencyIncrease ( UInt ui ) { m_uiMaxLatencyIncrease= ui; }673 #endif674 #if TILES_WPP_ENTRY_POINT_SIGNALLING675 604 UInt getTilesOrEntropyCodingSyncIdc () { return m_tilesOrEntropyCodingSyncIdc; } 676 605 Void setTilesOrEntropyCodingSyncIdc ( UInt val ) { m_tilesOrEntropyCodingSyncIdc = val; } 677 606 Int getNumSubstreams () { return m_numSubstreams; } 678 607 Void setNumSubstreams ( Int numSubstreams ) { m_numSubstreams = numSubstreams; } 679 #endif680 608 681 609 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX … … 739 667 }; 740 668 741 #if !RPS_IN_SPS742 /// Reference Picture Set class743 class TComReferencePictureSet744 {745 private:746 Int m_numberOfPictures;747 Int m_numberOfNegativePictures;748 Int m_numberOfPositivePictures;749 Int m_numberOfLongtermPictures;750 Int m_deltaPOC[MAX_NUM_REF_PICS];751 Int m_POC[MAX_NUM_REF_PICS];752 Bool m_used[MAX_NUM_REF_PICS];753 Bool m_interRPSPrediction;754 Int m_deltaRIdxMinus1;755 Int m_deltaRPS;756 Int m_numRefIdc;757 Int m_refIdc[MAX_NUM_REF_PICS+1];758 759 public:760 TComReferencePictureSet();761 virtual ~TComReferencePictureSet();762 763 Void setUsed(Int bufferNum, Bool used);764 Void setDeltaPOC(Int bufferNum, Int deltaPOC);765 Void setPOC(Int bufferNum, Int deltaPOC);766 Void setNumberOfPictures(Int numberOfPictures);767 768 Int getUsed(Int bufferNum);769 Int getDeltaPOC(Int bufferNum);770 Int getPOC(Int bufferNum);771 Int getNumberOfPictures();772 773 Void setNumberOfNegativePictures(Int number) { m_numberOfNegativePictures = number; }774 Int getNumberOfNegativePictures() { return m_numberOfNegativePictures; }775 Void setNumberOfPositivePictures(Int number) { m_numberOfPositivePictures = number; }776 Int getNumberOfPositivePictures() { return m_numberOfPositivePictures; }777 Void setNumberOfLongtermPictures(Int number) { m_numberOfLongtermPictures = number; }778 Int getNumberOfLongtermPictures() { return m_numberOfLongtermPictures; }779 780 Void setInterRPSPrediction(Bool flag) { m_interRPSPrediction = flag; }781 Bool getInterRPSPrediction() { return m_interRPSPrediction; }782 Void setDeltaRIdxMinus1(Int x) { m_deltaRIdxMinus1 = x; }783 Int getDeltaRIdxMinus1() { return m_deltaRIdxMinus1; }784 Void setDeltaRPS(Int x) { m_deltaRPS = x; }785 Int getDeltaRPS() { return m_deltaRPS; }786 Void setNumRefIdc(Int x) { m_numRefIdc = x; }787 Int getNumRefIdc() { return m_numRefIdc; }788 789 Void setRefIdc(Int bufferNum, Int refIdc);790 Int getRefIdc(Int bufferNum);791 792 Void sortDeltaPOC();793 Void printDeltaPOC();794 };795 796 /// Reference Picture Set set class797 class TComRPSList798 {799 private:800 Int m_numberOfReferencePictureSets;801 TComReferencePictureSet* m_referencePictureSets;802 803 public:804 TComRPSList();805 virtual ~TComRPSList();806 807 Void create (Int numberOfEntries);808 Void destroy ();809 810 811 TComReferencePictureSet* getReferencePictureSet(Int referencePictureSetNum);812 Int getNumberOfReferencePictureSets();813 Void setNumberOfReferencePictureSets(Int numberOfReferencePictureSets);814 };815 #endif816 669 817 670 /// Reference Picture Lists class … … 821 674 UInt m_bRefPicListModificationFlagL0; 822 675 UInt m_bRefPicListModificationFlagL1; 823 #if !H0137_0138_LIST_MODIFICATION824 UInt m_uiNumberOfRefPicListModificationsL0;825 UInt m_uiNumberOfRefPicListModificationsL1;826 UInt m_ListIdcL0[32];827 #endif828 676 UInt m_RefPicSetIdxL0[32]; 829 #if !H0137_0138_LIST_MODIFICATION830 UInt m_ListIdcL1[32];831 #endif832 677 UInt m_RefPicSetIdxL1[32]; 833 678 … … 843 688 Bool getRefPicListModificationFlagL1() { return m_bRefPicListModificationFlagL1; } 844 689 Void setRefPicListModificationFlagL1(Bool flag) { m_bRefPicListModificationFlagL1 = flag; } 845 #if !H0137_0138_LIST_MODIFICATION846 UInt getNumberOfRefPicListModificationsL0() { return m_uiNumberOfRefPicListModificationsL0; }847 Void setNumberOfRefPicListModificationsL0(UInt nr) { m_uiNumberOfRefPicListModificationsL0 = nr; }848 UInt getNumberOfRefPicListModificationsL1() { return m_uiNumberOfRefPicListModificationsL1; }849 Void setNumberOfRefPicListModificationsL1(UInt nr) { m_uiNumberOfRefPicListModificationsL1 = nr; }850 Void setListIdcL0(UInt idx, UInt idc) { m_ListIdcL0[idx] = idc; }851 UInt getListIdcL0(UInt idx) { return m_ListIdcL0[idx]; }852 #endif853 690 Void setRefPicSetIdxL0(UInt idx, UInt refPicSetIdx) { m_RefPicSetIdxL0[idx] = refPicSetIdx; } 854 691 UInt getRefPicSetIdxL0(UInt idx) { return m_RefPicSetIdxL0[idx]; } 855 #if !H0137_0138_LIST_MODIFICATION856 Void setListIdcL1(UInt idx, UInt idc) { m_ListIdcL1[idx] = idc; }857 UInt getListIdcL1(UInt idx) { return m_ListIdcL1[idx]; }858 #endif859 692 Void setRefPicSetIdxL1(UInt idx, UInt refPicSetIdx) { m_RefPicSetIdxL1[idx] = refPicSetIdx; } 860 693 UInt getRefPicSetIdxL1(UInt idx) { return m_RefPicSetIdxL1[idx]; } … … 873 706 // access channel 874 707 TComSPS* m_pcSPS; 875 #if !RPS_IN_SPS876 TComRPSList* m_RPSList;877 #endif878 708 UInt m_uiMaxCuDQPDepth; 879 709 UInt m_uiMinCuDQPSize; … … 882 712 Int m_iChromaQpOffset2nd; 883 713 884 #if !RPS_IN_SPS 885 Bool m_bLongTermRefsPresent; 886 #endif 887 888 #if !H0566_TLA 889 UInt m_uiNumTlayerSwitchingFlags; // num_temporal_layer_switching_point_flags 890 Bool m_abTLayerSwitchingFlag[ MAX_TLAYER ]; // temporal_layer_switching_point_flag 891 #endif 714 892 715 893 716 Int m_iSliceGranularity; … … 896 719 UInt m_uiBiPredIdc; // Use of Weighting Bi-Prediction (B_SLICE) 897 720 898 #if H0388899 721 Bool m_OutputFlagPresentFlag; // Indicates the presence of output_flag in slice header 900 #endif901 722 902 723 Int m_iTileBehaviorControlPresentFlag; … … 904 725 Int m_iColumnRowInfoPresent; 905 726 Int m_iUniformSpacingIdr; 906 #if !REMOVE_TILE_DEPENDENCE907 Int m_iTileBoundaryIndependenceIdr;908 #endif909 727 Int m_iNumColumnsMinus1; 910 728 UInt* m_puiColumnWidth; … … 913 731 914 732 Int m_iEntropyCodingMode; // !!! in PPS now, but also remains in slice header! 915 #if !WPP_SIMPLIFICATION916 Int m_iEntropyCodingSynchro;917 Bool m_bCabacIstateReset;918 #endif919 733 Int m_iNumSubstreams; 920 734 921 735 Bool m_enableTMVPFlag; 922 736 923 #if MULTIBITS_DATA_HIDING924 737 Int m_signHideFlag; 925 738 Int m_signHidingThreshold; 926 #endif927 739 928 740 #if CABAC_INIT_FLAG … … 933 745 #endif 934 746 #endif 935 #if DBL_CONTROL936 747 Bool m_DeblockingFilterControlPresent; 937 #endif938 #if PARALLEL_MERGE939 748 UInt m_log2ParallelMergeLevelMinus2; 940 #endif941 749 public: 942 750 TComPPS(); … … 957 765 Void setConstrainedIntraPred ( Bool b ) { m_bConstrainedIntraPred = b; } 958 766 959 #if !H0566_TLA 960 UInt getNumTLayerSwitchingFlags() { return m_uiNumTlayerSwitchingFlags; } 961 Void setNumTLayerSwitchingFlags( UInt uiNumTlayerSwitchingFlags ) { assert( uiNumTlayerSwitchingFlags < MAX_TLAYER ); m_uiNumTlayerSwitchingFlags = uiNumTlayerSwitchingFlags; } 962 963 Bool getTLayerSwitchingFlag( UInt uiTLayer ) { assert( uiTLayer < MAX_TLAYER ); return m_abTLayerSwitchingFlag[ uiTLayer ]; } 964 Void setTLayerSwitchingFlag( UInt uiTLayer, Bool bValue ) { m_abTLayerSwitchingFlag[ uiTLayer ] = bValue; } 965 #endif 966 967 #if !RPS_IN_SPS 968 Bool getLongTermRefsPresent() { return m_bLongTermRefsPresent; } 969 Void setLongTermRefsPresent(Bool b) { m_bLongTermRefsPresent=b; } 970 #endif 767 971 768 Void setSPS ( TComSPS* pcSPS ) { m_pcSPS = pcSPS; } 972 769 TComSPS* getSPS () { return m_pcSPS; } 973 #if !RPS_IN_SPS974 Void setRPSList ( TComRPSList* RPSList ) { m_RPSList = RPSList; }975 TComRPSList* getRPSList () { return m_RPSList; }976 #endif977 770 Void setMaxCuDQPDepth ( UInt u ) { m_uiMaxCuDQPDepth = u; } 978 771 UInt getMaxCuDQPDepth () { return m_uiMaxCuDQPDepth;} … … 991 784 Void setWPBiPredIdc ( UInt u ) { m_uiBiPredIdc = u; } 992 785 993 #if H0388994 786 Void setOutputFlagPresentFlag( Bool b ) { m_OutputFlagPresentFlag = b; } 995 787 Bool getOutputFlagPresentFlag() { return m_OutputFlagPresentFlag; } 996 #endif997 788 998 789 Void setTileBehaviorControlPresentFlag ( Int i ) { m_iTileBehaviorControlPresentFlag = i; } … … 1004 795 Void setUniformSpacingIdr ( Int i ) { m_iUniformSpacingIdr = i; } 1005 796 Int getUniformSpacingIdr () { return m_iUniformSpacingIdr; } 1006 #if !REMOVE_TILE_DEPENDENCE1007 Void setTileBoundaryIndependenceIdr ( Int i ) { m_iTileBoundaryIndependenceIdr = i; }1008 Int getTileBoundaryIndependenceIdr () { return m_iTileBoundaryIndependenceIdr; }1009 #endif1010 797 Void setNumColumnsMinus1 ( Int i ) { m_iNumColumnsMinus1 = i; } 1011 798 Int getNumColumnsMinus1 () { return m_iNumColumnsMinus1; } … … 1040 827 Void setEntropyCodingMode(Int iEntropyCodingMode) { m_iEntropyCodingMode = iEntropyCodingMode; } 1041 828 Int getEntropyCodingMode() { return m_iEntropyCodingMode; } 1042 #if !WPP_SIMPLIFICATION1043 Void setEntropyCodingSynchro(Int iEntropyCodingSynchro) { m_iEntropyCodingSynchro = iEntropyCodingSynchro; }1044 Int getEntropyCodingSynchro() { return m_iEntropyCodingSynchro; }1045 Void setCabacIstateReset(Bool bCabacIstateReset) { m_bCabacIstateReset = bCabacIstateReset; }1046 Bool getCabacIstateReset() { return m_bCabacIstateReset; }1047 #endif1048 829 Void setNumSubstreams(Int iNumSubstreams) { m_iNumSubstreams = iNumSubstreams; } 1049 830 Int getNumSubstreams() { return m_iNumSubstreams; } 1050 831 1051 #if MULTIBITS_DATA_HIDING1052 832 Void setSignHideFlag( Int signHideFlag ) { m_signHideFlag = signHideFlag; } 1053 833 Void setTSIG( Int tsig ) { m_signHidingThreshold = tsig; } 1054 834 Int getSignHideFlag() { return m_signHideFlag; } 1055 835 Int getTSIG() { return m_signHidingThreshold; } 1056 #endif1057 836 1058 837 Void setEnableTMVPFlag( Bool b ) { m_enableTMVPFlag = b; } … … 1069 848 #endif 1070 849 #endif 1071 #if DBL_CONTROL1072 850 Void setDeblockingFilterControlPresent ( Bool bValue ) { m_DeblockingFilterControlPresent = bValue; } 1073 851 Bool getDeblockingFilterControlPresent () { return m_DeblockingFilterControlPresent; } 1074 #endif1075 #if PARALLEL_MERGE1076 852 UInt getLog2ParallelMergeLevelMinus2 () { return m_log2ParallelMergeLevelMinus2; } 1077 853 Void setLog2ParallelMergeLevelMinus2 (UInt mrgLevel) { m_log2ParallelMergeLevelMinus2 = mrgLevel; } 1078 #endif1079 854 }; 1080 855 … … 1093 868 Int* getScalingListDefaultAddress (UInt sizeId, UInt listId); //!< get default matrix coefficient 1094 869 Void processDefaultMarix (UInt sizeId, UInt listId); 1095 #if SCALING_LIST1096 870 Void setScalingListDC (UInt sizeId, UInt listId, UInt u) { m_scalingListDC[sizeId][listId] = u; } //!< set DC value 1097 871 Int getScalingListDC (UInt sizeId, UInt listId) { return m_scalingListDC[sizeId][listId]; } //!< get DC value … … 1099 873 Void setUseDefaultScalingMatrixFlag (UInt sizeId, UInt listId, Bool b) { m_useDefaultScalingMatrixFlag[sizeId][listId] = b; } //!< set default matrix enabled/disabled in each matrix 1100 874 Bool getUseDefaultScalingMatrixFlag (UInt sizeId, UInt listId) { return m_useDefaultScalingMatrixFlag[sizeId][listId]; } //!< get default matrix enabled/disabled in each matrix 1101 #endif1102 875 Void processRefMatrix (UInt sizeId, UInt listId , UInt refListId ); 1103 876 Bool xParseScalingList (char* pchFile); … … 1106 879 Void init (); 1107 880 Void destroy (); 1108 #if SCALING_LIST1109 881 Int m_scalingListDC [SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; //!< the DC value of the matrix coefficient for 16x16 1110 882 Bool m_useDefaultScalingMatrixFlag [SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; //!< UseDefaultScalingMatrixFlag 1111 #endif1112 883 UInt m_refMatrixId [SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM]; //!< RefMatrixID 1113 884 Bool m_scalingListPresentFlag; //!< flag for using default matrix … … 1130 901 Bool getAlfEnabled () {return m_bAlfEnabled; } //!< get ALF enabled/disabled in APS 1131 902 1132 #if LCU_SYNTAX_ALF1133 903 AlfParamSet* getAlfParam () {return m_alfParamSet;} 1134 #else1135 ALFParam* getAlfParam () {return m_pAlfParam; } //!< get ALF parameters in APS1136 #endif1137 904 SAOParam* getSaoParam () {return m_pSaoParam; } //!< get SAO parameters in APS 1138 905 … … 1157 924 Bool getScalingListEnabled () { return m_scalingListEnabled; } //!< get ScalingList enabled/disabled in APS 1158 925 TComScalingList* getScalingList () { return m_scalingList; } //!< get ScalingList class pointer in APS 1159 #if SAO_UNIT_INTERLEAVING1160 926 Bool getSaoInterleavingFlag() {return m_saoInterleavingFlag;} //!< get SAO interleaving flag in APS 1161 927 Void setSaoInterleavingFlag(Bool bVal) {m_saoInterleavingFlag = bVal;} //!< set SAO interleaving flag in APS 1162 #endif1163 928 1164 929 private: … … 1167 932 Bool m_bAlfEnabled; //!< ALF enabled/disabled in APS (true for enabled) 1168 933 SAOParam* m_pSaoParam; //!< SAO parameter object pointer 1169 #if LCU_SYNTAX_ALF1170 934 AlfParamSet* m_alfParamSet; 1171 #else1172 ALFParam* m_pAlfParam; //!< ALF parameter object pointer1173 #endif1174 935 Bool m_loopFilterOffsetInAPS; //< offset for deblocking filter in 0 = slice header, 1 = APS 1175 936 Bool m_loopFilterDisable; //< Deblocking filter enabled/disabled in APS … … 1178 939 Bool m_scalingListEnabled; //!< ScalingList enabled/disabled in APS (true for enabled) 1179 940 TComScalingList* m_scalingList; //!< ScalingList class pointer 1180 #if SAO_UNIT_INTERLEAVING1181 941 Bool m_saoInterleavingFlag; //!< SAO interleaving flag 1182 #endif1183 942 1184 943 public: … … 1212 971 bool m_alfEnabledFlag; 1213 972 bool m_saoEnabledFlag; 1214 #if SAO_UNIT_INTERLEAVING1215 973 bool m_saoInterleavingFlag; ///< SAO interleaving flag 1216 974 bool m_saoEnabledFlagCb; ///< SAO Cb enabled flag 1217 975 bool m_saoEnabledFlagCr; ///< SAO Cr enabled flag 1218 #endif1219 976 Int m_iPPSId; ///< picture parameter set ID 1220 #if H03881221 977 Bool m_PicOutputFlag; ///< pic_output_flag 1222 #endif1223 978 Int m_iPOC; 1224 979 Int m_iLastIDR; … … 1337 1092 #endif 1338 1093 1339 #if H0111_MVD_L1_ZERO1340 1094 Bool m_bLMvdL1Zero; 1341 #endif1342 #if TILES_WPP_ENTRY_POINT_SIGNALLING1343 1095 Int m_numEntryPointOffsets; 1344 #endif1345 1096 1346 1097 Int m_viewId; … … 1397 1148 Void setAPSId ( Int Id) { m_iAPSId =Id; } //!< set APS ID 1398 1149 Int getAPSId () { return m_iAPSId; } //!< get APS ID 1399 #if H03881400 1150 Void setPicOutputFlag( Bool b ) { m_PicOutputFlag = b; } 1401 1151 Bool getPicOutputFlag() { return m_PicOutputFlag; } 1402 #endif1403 1152 Void setAlfEnabledFlag(Bool s) {m_alfEnabledFlag =s; } 1404 1153 Bool getAlfEnabledFlag() { return m_alfEnabledFlag; } 1405 1154 Void setSaoEnabledFlag(Bool s) {m_saoEnabledFlag =s; } 1406 1155 Bool getSaoEnabledFlag() { return m_saoEnabledFlag; } 1407 #if SAO_UNIT_INTERLEAVING1408 1156 Void setSaoInterleavingFlag(Bool s) {m_saoInterleavingFlag =s; } //!< set SAO interleaving flag 1409 1157 Bool getSaoInterleavingFlag() { return m_saoInterleavingFlag; } //!< get SAO interleaving flag … … 1412 1160 Void setSaoEnabledFlagCr(Bool s) {m_saoEnabledFlagCr =s; } //!< set SAO Cr enabled flag 1413 1161 Bool getSaoEnabledFlagCr() { return m_saoEnabledFlagCr; } //!< get SAO Cr enabled flag 1414 #endif1415 1162 Void setRPS ( TComReferencePictureSet *pcRPS ) { m_pcRPS = pcRPS; } 1416 1163 TComReferencePictureSet* getRPS () { return m_pcRPS; } … … 1454 1201 #endif 1455 1202 Bool getCheckLDC () { return m_bCheckLDC; } 1456 #if H0111_MVD_L1_ZERO1457 1203 Bool getMvdL1ZeroFlag () { return m_bLMvdL1Zero; } 1458 #endif1459 1204 Int getRefIdxOfLC (RefPicList e, Int iRefIdx) { return m_iRefIdxOfLC[e][iRefIdx]; } 1460 1205 Int getListIdFromIdxOfLC(Int iRefIdx) { return m_eListIdFromIdxOfLC[iRefIdx]; } … … 1510 1255 #endif 1511 1256 Void setCheckLDC ( Bool b ) { m_bCheckLDC = b; } 1512 #if H0111_MVD_L1_ZERO1513 1257 Void setMvdL1ZeroFlag ( Bool b) { m_bLMvdL1Zero = b; } 1514 #endif1515 1258 1516 1259 Bool isIntra () { return m_eSliceType == I_SLICE; } … … 1550 1293 Void setTLayer ( UInt uiTLayer ) { m_uiTLayer = uiTLayer; } 1551 1294 1552 #if !H0566_TLA1553 Bool getTLayerSwitchingFlag() { return m_bTLayerSwitchingFlag; }1554 Void setTLayerSwitchingFlag( Bool bValue ) { m_bTLayerSwitchingFlag = bValue; }1555 #endif1556 1295 1557 1296 Void setTLayerInfo( UInt uiTLayer ); 1558 1297 Void decodingMarking( TComList<TComPic*>& rcListPic, Int iGOPSIze, Int& iMaxRefPicNum ); 1559 1298 Void applyReferencePictureSet( TComList<TComPic*>& rcListPic, TComReferencePictureSet *RPSList); 1560 #if H0566_TLA && H0566_TLA_SET_FOR_SWITCHING_POINTS1299 #if H0566_TLA_SET_FOR_SWITCHING_POINTS 1561 1300 Bool isTemporalLayerSwitchingPoint( TComList<TComPic*>& rcListPic, TComReferencePictureSet *RPSList); 1562 1301 #endif 1563 #if START_DECODING_AT_CRA1564 1302 Int checkThatAllRefPicsAreAvailable( TComList<TComPic*>& rcListPic, TComReferencePictureSet *pReferencePictureSet, Bool outputFlag, Int pocRandomAccess = 0); 1565 #else1566 Int checkThatAllRefPicsAreAvailable( TComList<TComPic*>& rcListPic, TComReferencePictureSet *pReferencePictureSet, Bool outputFlag);1567 #endif1568 1303 Void createExplicitReferencePictureSetFromReference( TComList<TComPic*>& rcListPic, TComReferencePictureSet *pReferencePictureSet); 1569 1304 … … 1639 1374 Int getCABACinitIDC() {return m_cabacInitIdc; } //!< get CABAC initial IDC number 1640 1375 #endif 1641 #if TILES_WPP_ENTRY_POINT_SIGNALLING1642 1376 Void setNumEntryPointOffsets(Int val) { m_numEntryPointOffsets = val; } 1643 1377 Int getNumEntryPointOffsets() { return m_numEntryPointOffsets; } 1644 #endif1645 1378 1646 1379 Void setViewId( Int viewId ) { m_viewId = viewId; } -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComTrQuant.cpp
r56 r294 180 180 181 181 182 #if H0736_AVC_STYLE_QP_RANGE183 182 /** Set qP for Quantization. 184 183 * \param qpy QPy … … 214 213 m_cQP.setQpParam( qpScaled, bLowpass, eSliceType ); 215 214 } 216 #else217 /// Including Chroma QP Parameter setting218 Void TComTrQuant::setQPforQuant( Int iQP, Bool bLowpass, SliceType eSliceType, TextType eTxtType, Int Shift)219 {220 iQP = Clip3( MIN_QP, MAX_QP, iQP + Shift );221 222 if(eTxtType != TEXT_LUMA) //Chroma223 {224 iQP = g_aucChromaScale[ iQP ];225 }226 227 m_cQP.setQpParam( iQP, bLowpass, eSliceType );228 }229 #endif230 215 231 216 #if MATRIX_MULT … … 421 406 * \param shift specifies right shift after 1D transform 422 407 */ 423 #if !UNIFIED_TRANSFORM424 void partialButterfly4(short src[4][4],short dst[4][4],int shift)425 {426 int j;427 int E[2],O[2];428 int add = 1<<(shift-1);429 430 for (j=0; j<4; j++)431 {432 /* E and O */433 E[0] = src[j][0] + src[j][3];434 O[0] = src[j][0] - src[j][3];435 E[1] = src[j][1] + src[j][2];436 O[1] = src[j][1] - src[j][2];437 438 dst[0][j] = (g_aiT4[0][0]*E[0] + g_aiT4[0][1]*E[1] + add)>>shift;439 dst[2][j] = (g_aiT4[2][0]*E[0] + g_aiT4[2][1]*E[1] + add)>>shift;440 dst[1][j] = (g_aiT4[1][0]*O[0] + g_aiT4[1][1]*O[1] + add)>>shift;441 dst[3][j] = (g_aiT4[3][0]*O[0] + g_aiT4[3][1]*O[1] + add)>>shift;442 }443 }444 #endif445 408 446 409 void partialButterfly4(short *src,short *dst,int shift, int line) … … 470 433 // Fast DST Algorithm. Full matrix multiplication for DST and Fast DST algorithm 471 434 // give identical results 472 #if UNIFIED_TRANSFORM473 435 void fastForwardDst(short *block,short *coeff,int shift) // input block, output coeff 474 #else475 void fastForwardDst(short block[4][4],short coeff[4][4],int shift) // input block, output coeff476 #endif477 436 { 478 437 int i, c[4]; … … 481 440 { 482 441 // Intermediate Variables 483 #if UNIFIED_TRANSFORM484 442 c[0] = block[4*i+0] + block[4*i+3]; 485 443 c[1] = block[4*i+1] + block[4*i+3]; … … 491 449 coeff[ 8+i] = ( 29 * c[2] + 55 * c[0] - c[3] + rnd_factor ) >> shift; 492 450 coeff[12+i] = ( 55 * c[2] - 29 * c[1] + c[3] + rnd_factor ) >> shift; 493 #else 494 c[0] = block[i][0] + block[i][3]; 495 c[1] = block[i][1] + block[i][3]; 496 c[2] = block[i][0] - block[i][1]; 497 c[3] = 74* block[i][2]; 498 499 coeff[0][i] = ( 29 * c[0] + 55 * c[1] + c[3] + rnd_factor ) >> shift; 500 coeff[1][i] = ( 74 * (block[i][0]+ block[i][1] - block[i][3]) + rnd_factor ) >> shift; 501 coeff[2][i] = ( 29 * c[2] + 55 * c[0] - c[3] + rnd_factor ) >> shift; 502 coeff[3][i] = ( 55 * c[2] - 29 * c[1] + c[3] + rnd_factor ) >> shift; 503 #endif 504 } 505 } 506 507 #if UNIFIED_TRANSFORM 451 } 452 } 453 508 454 void fastInverseDst(short *tmp,short *block,int shift) // input tmp, output block 509 #else510 void fastInverseDst(short tmp[4][4],short block[4][4],int shift) // input tmp, output block511 #endif512 455 { 513 456 int i, c[4]; … … 516 459 { 517 460 // Intermediate Variables 518 #if UNIFIED_TRANSFORM519 461 c[0] = tmp[ i] + tmp[ 8+i]; 520 462 c[1] = tmp[8+i] + tmp[12+i]; … … 526 468 block[4*i+2] = Clip3( -32768, 32767, ( 74 * (tmp[i] - tmp[8+i] + tmp[12+i]) + rnd_factor ) >> shift ); 527 469 block[4*i+3] = Clip3( -32768, 32767, ( 55 * c[0] + 29 * c[2] - c[3] + rnd_factor ) >> shift ); 528 #else 529 c[0] = tmp[0][i] + tmp[2][i]; 530 c[1] = tmp[2][i] + tmp[3][i]; 531 c[2] = tmp[0][i] - tmp[3][i]; 532 c[3] = 74* tmp[1][i]; 533 534 block[i][0] = Clip3( -32768, 32767, ( 29 * c[0] + 55 * c[1] + c[3] + rnd_factor ) >> shift ); 535 block[i][1] = Clip3( -32768, 32767, ( 55 * c[2] - 29 * c[1] + c[3] + rnd_factor ) >> shift ); 536 block[i][2] = Clip3( -32768, 32767, ( 74 * (tmp[0][i] - tmp[2][i] + tmp[3][i]) + rnd_factor ) >> shift ); 537 block[i][3] = Clip3( -32768, 32767, ( 55 * c[0] + 29 * c[2] - c[3] + rnd_factor ) >> shift ); 538 #endif 539 } 540 } 541 #if !UNIFIED_TRANSFORM 542 /** 4x4 forward transform (2D) 543 * \param block input data (residual) 544 * \param coeff output data (transform coefficients) 545 * \param uiMode is Intra Prediction mode used in Mode-Dependent DCT/DST only 546 */ 547 void xTr4(short block[4][4],short coeff[4][4],UInt uiMode) 548 { 549 #if FULL_NBIT 550 int shift_1st = 1 + g_uiBitDepth - 8; // log2(4) - 1 + g_uiBitDepth - 8 551 #else 552 int shift_1st = 1 + g_uiBitIncrement; // log2(4) - 1 + g_uiBitIncrement 553 #endif 554 int shift_2nd = 8; // log2(4) + 6 555 short tmp[4][4]; 556 #if LOGI_INTRA_NAME_3MPM 557 if (uiMode != REG_DCT && (!uiMode || (uiMode>=2 && uiMode <= 25))) // Check for DCT or DST 558 #else 559 if (uiMode != REG_DCT && g_aucDCTDSTMode_Hor[uiMode])// Check for DCT or DST 560 #endif 561 { 562 fastForwardDst(block,tmp,shift_1st); // Forward DST BY FAST ALGORITHM, block input, tmp output 563 } 564 else 565 { 566 partialButterfly4(block,tmp,shift_1st); 567 } 568 569 #if LOGI_INTRA_NAME_3MPM 570 if (uiMode != REG_DCT && (!uiMode || (uiMode>=11 && uiMode <= 34))) // Check for DCT or DST 571 #else 572 if (uiMode != REG_DCT && g_aucDCTDSTMode_Vert[uiMode] ) // Check for DCT or DST 573 #endif 574 { 575 fastForwardDst(tmp,coeff,shift_2nd); // Forward DST BY FAST ALGORITHM, tmp input, coeff output 576 } 577 else 578 { 579 partialButterfly4(tmp,coeff,shift_2nd); 580 } 581 } 582 583 /** 4x4 inverse transform implemented using partial butterfly structure (1D) 584 * \param src input data (transform coefficients) 585 * \param dst output data (residual) 586 * \param shift specifies right shift after 1D transform 587 */ 588 void partialButterflyInverse4(short src[4][4],short dst[4][4],int shift) 589 { 590 int j; 591 int E[2],O[2]; 592 int add = 1<<(shift-1); 593 594 for (j=0; j<4; j++) 595 { 596 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */ 597 O[0] = g_aiT4[1][0]*src[1][j] + g_aiT4[3][0]*src[3][j]; 598 O[1] = g_aiT4[1][1]*src[1][j] + g_aiT4[3][1]*src[3][j]; 599 E[0] = g_aiT4[0][0]*src[0][j] + g_aiT4[2][0]*src[2][j]; 600 E[1] = g_aiT4[0][1]*src[0][j] + g_aiT4[2][1]*src[2][j]; 601 602 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */ 603 dst[j][0] = Clip3( -32768, 32767, (E[0] + O[0] + add)>>shift ); 604 dst[j][1] = Clip3( -32768, 32767, (E[1] + O[1] + add)>>shift ); 605 dst[j][2] = Clip3( -32768, 32767, (E[1] - O[1] + add)>>shift ); 606 dst[j][3] = Clip3( -32768, 32767, (E[0] - O[0] + add)>>shift ); 607 } 608 } 609 #endif 470 } 471 } 610 472 611 473 void partialButterflyInverse4(short *src,short *dst,int shift, int line) … … 634 496 } 635 497 636 #if !UNIFIED_TRANSFORM637 /** 4x4 inverse transform (2D)638 * \param coeff input data (transform coefficients)639 * \param block output data (residual)640 * \param uiMode is Intra Prediction mode used in Mode-Dependent DCT/DST only641 */642 void xITr4(short coeff[4][4],short block[4][4], UInt uiMode)643 {644 int shift_1st = SHIFT_INV_1ST;645 #if FULL_NBIT646 int shift_2nd = SHIFT_INV_2ND - ((short)g_uiBitDepth - 8);647 #else648 int shift_2nd = SHIFT_INV_2ND - g_uiBitIncrement;649 #endif650 short tmp[4][4];651 652 #if LOGI_INTRA_NAME_3MPM653 if (uiMode != REG_DCT && (!uiMode || (uiMode>=11 && uiMode <= 34))) // Check for DCT or DST654 #else655 if (uiMode != REG_DCT && g_aucDCTDSTMode_Vert[uiMode] ) // Check for DCT or DST656 #endif657 {658 fastInverseDst(coeff,tmp,shift_1st); // Inverse DST by FAST Algorithm, coeff input, tmp output659 }660 else661 {662 partialButterflyInverse4(coeff,tmp,shift_1st);663 }664 #if LOGI_INTRA_NAME_3MPM665 if (uiMode != REG_DCT && (!uiMode || (uiMode>=2 && uiMode <= 25))) // Check for DCT or DST666 #else667 if (uiMode != REG_DCT && g_aucDCTDSTMode_Hor[uiMode] ) // Check for DCT or DST668 #endif669 {670 fastInverseDst(tmp,block,shift_2nd); // Inverse DST by FAST Algorithm, tmp input, coeff output671 }672 else673 {674 partialButterflyInverse4(tmp,block,shift_2nd);675 }676 }677 678 /** 8x8 forward transform implemented using partial butterfly structure (1D)679 * \param src input data (residual)680 * \param dst output data (transform coefficients)681 * \param shift specifies right shift after 1D transform682 */683 void partialButterfly8(short src[8][8],short dst[8][8],int shift)684 {685 int j,k;686 int E[4],O[4];687 int EE[2],EO[2];688 int add = 1<<(shift-1);689 690 for (j=0; j<8; j++)691 {692 /* E and O*/693 for (k=0;k<4;k++)694 {695 E[k] = src[j][k] + src[j][7-k];696 O[k] = src[j][k] - src[j][7-k];697 }698 /* EE and EO */699 EE[0] = E[0] + E[3];700 EO[0] = E[0] - E[3];701 EE[1] = E[1] + E[2];702 EO[1] = E[1] - E[2];703 704 dst[0][j] = (g_aiT8[0][0]*EE[0] + g_aiT8[0][1]*EE[1] + add)>>shift;705 dst[4][j] = (g_aiT8[4][0]*EE[0] + g_aiT8[4][1]*EE[1] + add)>>shift;706 dst[2][j] = (g_aiT8[2][0]*EO[0] + g_aiT8[2][1]*EO[1] + add)>>shift;707 dst[6][j] = (g_aiT8[6][0]*EO[0] + g_aiT8[6][1]*EO[1] + add)>>shift;708 709 dst[1][j] = (g_aiT8[1][0]*O[0] + g_aiT8[1][1]*O[1] + g_aiT8[1][2]*O[2] + g_aiT8[1][3]*O[3] + add)>>shift;710 dst[3][j] = (g_aiT8[3][0]*O[0] + g_aiT8[3][1]*O[1] + g_aiT8[3][2]*O[2] + g_aiT8[3][3]*O[3] + add)>>shift;711 dst[5][j] = (g_aiT8[5][0]*O[0] + g_aiT8[5][1]*O[1] + g_aiT8[5][2]*O[2] + g_aiT8[5][3]*O[3] + add)>>shift;712 dst[7][j] = (g_aiT8[7][0]*O[0] + g_aiT8[7][1]*O[1] + g_aiT8[7][2]*O[2] + g_aiT8[7][3]*O[3] + add)>>shift;713 }714 }715 #endif716 498 717 499 void partialButterfly8(short *src,short *dst,int shift, int line) … … 751 533 } 752 534 753 #if !UNIFIED_TRANSFORM 754 /** 8x8 forward transform (2D) 755 * \param block input data (residual) 756 * \param coeff output data (transform coefficients) 757 */ 758 void xTr8(short block[8][8],short coeff[8][8]) 759 { 760 #if FULL_NBIT 761 int shift_1st = 2 + g_uiBitDepth - 8; // log2(8) - 1 + g_uiBitDepth - 8 762 #else 763 int shift_1st = 2 + g_uiBitIncrement; // log2(8) - 1 + g_uiBitIncrement 764 #endif 765 int shift_2nd = 9; // log2(8) + 6 766 short tmp[8][8]; 767 768 partialButterfly8(block,tmp,shift_1st); 769 partialButterfly8(tmp,coeff,shift_2nd); 770 } 771 772 /** 8x8 inverse transform implemented using partial butterfly structure (1D) 773 * \param src input data (transform coefficients) 774 * \param dst output data (residual) 775 * \param shift specifies right shift after 1D transform 776 */ 777 void partialButterflyInverse8(short src[8][8],short dst[8][8],int shift) 535 536 void partialButterflyInverse8(short *src,short *dst,int shift, int line) 778 537 { 779 538 int j,k; … … 782 541 int add = 1<<(shift-1); 783 542 784 for (j=0; j< 8; j++)543 for (j=0; j<line; j++) 785 544 { 786 545 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */ 787 546 for (k=0;k<4;k++) 788 547 { 789 O[k] = g_aiT8[ 1][k]*src[ 1][j] + g_aiT8[ 3][k]*src[ 3][j] + g_aiT8[ 5][k]*src[ 5][j] + g_aiT8[ 7][k]*src[ 7][j];790 } 791 792 EO[0] = g_aiT8[2][0]*src[ 2][j] + g_aiT8[6][0]*src[6][j];793 EO[1] = g_aiT8[2][1]*src[ 2][j] + g_aiT8[6][1]*src[6][j];794 EE[0] = g_aiT8[0][0]*src[ 0][j] + g_aiT8[4][0]*src[4][j];795 EE[1] = g_aiT8[0][1]*src[ 0][j] + g_aiT8[4][1]*src[4][j];548 O[k] = g_aiT8[ 1][k]*src[line] + g_aiT8[ 3][k]*src[3*line] + g_aiT8[ 5][k]*src[5*line] + g_aiT8[ 7][k]*src[7*line]; 549 } 550 551 EO[0] = g_aiT8[2][0]*src[ 2*line ] + g_aiT8[6][0]*src[ 6*line ]; 552 EO[1] = g_aiT8[2][1]*src[ 2*line ] + g_aiT8[6][1]*src[ 6*line ]; 553 EE[0] = g_aiT8[0][0]*src[ 0 ] + g_aiT8[4][0]*src[ 4*line ]; 554 EE[1] = g_aiT8[0][1]*src[ 0 ] + g_aiT8[4][1]*src[ 4*line ]; 796 555 797 556 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */ … … 802 561 for (k=0;k<4;k++) 803 562 { 804 dst[j][k] = Clip3( -32768, 32767, (E[k] + O[k] + add)>>shift );805 dst[j][k+4] = Clip3( -32768, 32767, (E[3-k] - O[3-k] + add)>>shift );806 }807 }808 }809 #endif810 811 void partialButterflyInverse8(short *src,short *dst,int shift, int line)812 {813 int j,k;814 int E[4],O[4];815 int EE[2],EO[2];816 int add = 1<<(shift-1);817 818 for (j=0; j<line; j++)819 {820 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */821 for (k=0;k<4;k++)822 {823 O[k] = g_aiT8[ 1][k]*src[line] + g_aiT8[ 3][k]*src[3*line] + g_aiT8[ 5][k]*src[5*line] + g_aiT8[ 7][k]*src[7*line];824 }825 826 EO[0] = g_aiT8[2][0]*src[ 2*line ] + g_aiT8[6][0]*src[ 6*line ];827 EO[1] = g_aiT8[2][1]*src[ 2*line ] + g_aiT8[6][1]*src[ 6*line ];828 EE[0] = g_aiT8[0][0]*src[ 0 ] + g_aiT8[4][0]*src[ 4*line ];829 EE[1] = g_aiT8[0][1]*src[ 0 ] + g_aiT8[4][1]*src[ 4*line ];830 831 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */832 E[0] = EE[0] + EO[0];833 E[3] = EE[0] - EO[0];834 E[1] = EE[1] + EO[1];835 E[2] = EE[1] - EO[1];836 for (k=0;k<4;k++)837 {838 563 dst[ k ] = Clip3( -32768, 32767, (E[k] + O[k] + add)>>shift ); 839 564 dst[ k+4 ] = Clip3( -32768, 32767, (E[3-k] - O[3-k] + add)>>shift ); … … 844 569 } 845 570 846 #if !UNIFIED_TRANSFORM 847 /** 8x8 inverse transform (2D) 848 * \param coeff input data (transform coefficients) 849 * \param block output data (residual) 850 */ 851 void xITr8(short coeff[8][8],short block[8][8]) 571 572 void partialButterfly16(short *src,short *dst,int shift, int line) 573 { 574 int j,k; 575 int E[8],O[8]; 576 int EE[4],EO[4]; 577 int EEE[2],EEO[2]; 578 int add = 1<<(shift-1); 579 580 for (j=0; j<line; j++) 581 { 582 /* E and O*/ 583 for (k=0;k<8;k++) 584 { 585 E[k] = src[k] + src[15-k]; 586 O[k] = src[k] - src[15-k]; 587 } 588 /* EE and EO */ 589 for (k=0;k<4;k++) 590 { 591 EE[k] = E[k] + E[7-k]; 592 EO[k] = E[k] - E[7-k]; 593 } 594 /* EEE and EEO */ 595 EEE[0] = EE[0] + EE[3]; 596 EEO[0] = EE[0] - EE[3]; 597 EEE[1] = EE[1] + EE[2]; 598 EEO[1] = EE[1] - EE[2]; 599 600 dst[ 0 ] = (g_aiT16[ 0][0]*EEE[0] + g_aiT16[ 0][1]*EEE[1] + add)>>shift; 601 dst[ 8*line ] = (g_aiT16[ 8][0]*EEE[0] + g_aiT16[ 8][1]*EEE[1] + add)>>shift; 602 dst[ 4*line ] = (g_aiT16[ 4][0]*EEO[0] + g_aiT16[ 4][1]*EEO[1] + add)>>shift; 603 dst[ 12*line] = (g_aiT16[12][0]*EEO[0] + g_aiT16[12][1]*EEO[1] + add)>>shift; 604 605 for (k=2;k<16;k+=4) 606 { 607 dst[ k*line ] = (g_aiT16[k][0]*EO[0] + g_aiT16[k][1]*EO[1] + g_aiT16[k][2]*EO[2] + g_aiT16[k][3]*EO[3] + add)>>shift; 608 } 609 610 for (k=1;k<16;k+=2) 611 { 612 dst[ k*line ] = (g_aiT16[k][0]*O[0] + g_aiT16[k][1]*O[1] + g_aiT16[k][2]*O[2] + g_aiT16[k][3]*O[3] + 613 g_aiT16[k][4]*O[4] + g_aiT16[k][5]*O[5] + g_aiT16[k][6]*O[6] + g_aiT16[k][7]*O[7] + add)>>shift; 614 } 615 616 src += 16; 617 dst ++; 618 619 } 620 } 621 622 623 void partialButterflyInverse16(short *src,short *dst,int shift, int line) 624 { 625 int j,k; 626 int E[8],O[8]; 627 int EE[4],EO[4]; 628 int EEE[2],EEO[2]; 629 int add = 1<<(shift-1); 630 631 for (j=0; j<line; j++) 632 { 633 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */ 634 for (k=0;k<8;k++) 635 { 636 O[k] = g_aiT16[ 1][k]*src[ line] + g_aiT16[ 3][k]*src[ 3*line] + g_aiT16[ 5][k]*src[ 5*line] + g_aiT16[ 7][k]*src[ 7*line] + 637 g_aiT16[ 9][k]*src[ 9*line] + g_aiT16[11][k]*src[11*line] + g_aiT16[13][k]*src[13*line] + g_aiT16[15][k]*src[15*line]; 638 } 639 for (k=0;k<4;k++) 640 { 641 EO[k] = g_aiT16[ 2][k]*src[ 2*line] + g_aiT16[ 6][k]*src[ 6*line] + g_aiT16[10][k]*src[10*line] + g_aiT16[14][k]*src[14*line]; 642 } 643 EEO[0] = g_aiT16[4][0]*src[ 4*line ] + g_aiT16[12][0]*src[ 12*line ]; 644 EEE[0] = g_aiT16[0][0]*src[ 0 ] + g_aiT16[ 8][0]*src[ 8*line ]; 645 EEO[1] = g_aiT16[4][1]*src[ 4*line ] + g_aiT16[12][1]*src[ 12*line ]; 646 EEE[1] = g_aiT16[0][1]*src[ 0 ] + g_aiT16[ 8][1]*src[ 8*line ]; 647 648 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */ 649 for (k=0;k<2;k++) 650 { 651 EE[k] = EEE[k] + EEO[k]; 652 EE[k+2] = EEE[1-k] - EEO[1-k]; 653 } 654 for (k=0;k<4;k++) 655 { 656 E[k] = EE[k] + EO[k]; 657 E[k+4] = EE[3-k] - EO[3-k]; 658 } 659 for (k=0;k<8;k++) 660 { 661 dst[k] = Clip3( -32768, 32767, (E[k] + O[k] + add)>>shift ); 662 dst[k+8] = Clip3( -32768, 32767, (E[7-k] - O[7-k] + add)>>shift ); 663 } 664 src ++; 665 dst += 16; 666 } 667 } 668 669 670 void partialButterfly32(short *src,short *dst,int shift, int line) 671 { 672 int j,k; 673 int E[16],O[16]; 674 int EE[8],EO[8]; 675 int EEE[4],EEO[4]; 676 int EEEE[2],EEEO[2]; 677 int add = 1<<(shift-1); 678 679 for (j=0; j<line; j++) 680 { 681 /* E and O*/ 682 for (k=0;k<16;k++) 683 { 684 E[k] = src[k] + src[31-k]; 685 O[k] = src[k] - src[31-k]; 686 } 687 /* EE and EO */ 688 for (k=0;k<8;k++) 689 { 690 EE[k] = E[k] + E[15-k]; 691 EO[k] = E[k] - E[15-k]; 692 } 693 /* EEE and EEO */ 694 for (k=0;k<4;k++) 695 { 696 EEE[k] = EE[k] + EE[7-k]; 697 EEO[k] = EE[k] - EE[7-k]; 698 } 699 /* EEEE and EEEO */ 700 EEEE[0] = EEE[0] + EEE[3]; 701 EEEO[0] = EEE[0] - EEE[3]; 702 EEEE[1] = EEE[1] + EEE[2]; 703 EEEO[1] = EEE[1] - EEE[2]; 704 705 dst[ 0 ] = (g_aiT32[ 0][0]*EEEE[0] + g_aiT32[ 0][1]*EEEE[1] + add)>>shift; 706 dst[ 16*line ] = (g_aiT32[16][0]*EEEE[0] + g_aiT32[16][1]*EEEE[1] + add)>>shift; 707 dst[ 8*line ] = (g_aiT32[ 8][0]*EEEO[0] + g_aiT32[ 8][1]*EEEO[1] + add)>>shift; 708 dst[ 24*line ] = (g_aiT32[24][0]*EEEO[0] + g_aiT32[24][1]*EEEO[1] + add)>>shift; 709 for (k=4;k<32;k+=8) 710 { 711 dst[ k*line ] = (g_aiT32[k][0]*EEO[0] + g_aiT32[k][1]*EEO[1] + g_aiT32[k][2]*EEO[2] + g_aiT32[k][3]*EEO[3] + add)>>shift; 712 } 713 for (k=2;k<32;k+=4) 714 { 715 dst[ k*line ] = (g_aiT32[k][0]*EO[0] + g_aiT32[k][1]*EO[1] + g_aiT32[k][2]*EO[2] + g_aiT32[k][3]*EO[3] + 716 g_aiT32[k][4]*EO[4] + g_aiT32[k][5]*EO[5] + g_aiT32[k][6]*EO[6] + g_aiT32[k][7]*EO[7] + add)>>shift; 717 } 718 for (k=1;k<32;k+=2) 719 { 720 dst[ k*line ] = (g_aiT32[k][ 0]*O[ 0] + g_aiT32[k][ 1]*O[ 1] + g_aiT32[k][ 2]*O[ 2] + g_aiT32[k][ 3]*O[ 3] + 721 g_aiT32[k][ 4]*O[ 4] + g_aiT32[k][ 5]*O[ 5] + g_aiT32[k][ 6]*O[ 6] + g_aiT32[k][ 7]*O[ 7] + 722 g_aiT32[k][ 8]*O[ 8] + g_aiT32[k][ 9]*O[ 9] + g_aiT32[k][10]*O[10] + g_aiT32[k][11]*O[11] + 723 g_aiT32[k][12]*O[12] + g_aiT32[k][13]*O[13] + g_aiT32[k][14]*O[14] + g_aiT32[k][15]*O[15] + add)>>shift; 724 } 725 src += 32; 726 dst ++; 727 } 728 } 729 730 731 void partialButterflyInverse32(short *src,short *dst,int shift, int line) 732 { 733 int j,k; 734 int E[16],O[16]; 735 int EE[8],EO[8]; 736 int EEE[4],EEO[4]; 737 int EEEE[2],EEEO[2]; 738 int add = 1<<(shift-1); 739 740 for (j=0; j<line; j++) 741 { 742 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */ 743 for (k=0;k<16;k++) 744 { 745 O[k] = g_aiT32[ 1][k]*src[ line ] + g_aiT32[ 3][k]*src[ 3*line ] + g_aiT32[ 5][k]*src[ 5*line ] + g_aiT32[ 7][k]*src[ 7*line ] + 746 g_aiT32[ 9][k]*src[ 9*line ] + g_aiT32[11][k]*src[ 11*line ] + g_aiT32[13][k]*src[ 13*line ] + g_aiT32[15][k]*src[ 15*line ] + 747 g_aiT32[17][k]*src[ 17*line ] + g_aiT32[19][k]*src[ 19*line ] + g_aiT32[21][k]*src[ 21*line ] + g_aiT32[23][k]*src[ 23*line ] + 748 g_aiT32[25][k]*src[ 25*line ] + g_aiT32[27][k]*src[ 27*line ] + g_aiT32[29][k]*src[ 29*line ] + g_aiT32[31][k]*src[ 31*line ]; 749 } 750 for (k=0;k<8;k++) 751 { 752 EO[k] = g_aiT32[ 2][k]*src[ 2*line ] + g_aiT32[ 6][k]*src[ 6*line ] + g_aiT32[10][k]*src[ 10*line ] + g_aiT32[14][k]*src[ 14*line ] + 753 g_aiT32[18][k]*src[ 18*line ] + g_aiT32[22][k]*src[ 22*line ] + g_aiT32[26][k]*src[ 26*line ] + g_aiT32[30][k]*src[ 30*line ]; 754 } 755 for (k=0;k<4;k++) 756 { 757 EEO[k] = g_aiT32[4][k]*src[ 4*line ] + g_aiT32[12][k]*src[ 12*line ] + g_aiT32[20][k]*src[ 20*line ] + g_aiT32[28][k]*src[ 28*line ]; 758 } 759 EEEO[0] = g_aiT32[8][0]*src[ 8*line ] + g_aiT32[24][0]*src[ 24*line ]; 760 EEEO[1] = g_aiT32[8][1]*src[ 8*line ] + g_aiT32[24][1]*src[ 24*line ]; 761 EEEE[0] = g_aiT32[0][0]*src[ 0 ] + g_aiT32[16][0]*src[ 16*line ]; 762 EEEE[1] = g_aiT32[0][1]*src[ 0 ] + g_aiT32[16][1]*src[ 16*line ]; 763 764 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */ 765 EEE[0] = EEEE[0] + EEEO[0]; 766 EEE[3] = EEEE[0] - EEEO[0]; 767 EEE[1] = EEEE[1] + EEEO[1]; 768 EEE[2] = EEEE[1] - EEEO[1]; 769 for (k=0;k<4;k++) 770 { 771 EE[k] = EEE[k] + EEO[k]; 772 EE[k+4] = EEE[3-k] - EEO[3-k]; 773 } 774 for (k=0;k<8;k++) 775 { 776 E[k] = EE[k] + EO[k]; 777 E[k+8] = EE[7-k] - EO[7-k]; 778 } 779 for (k=0;k<16;k++) 780 { 781 dst[k] = Clip3( -32768, 32767, (E[k] + O[k] + add)>>shift ); 782 dst[k+16] = Clip3( -32768, 32767, (E[15-k] - O[15-k] + add)>>shift ); 783 } 784 src ++; 785 dst += 32; 786 } 787 } 788 789 790 /** MxN forward transform (2D) 791 * \param block input data (residual) 792 * \param coeff output data (transform coefficients) 793 * \param iWidth input data (width of transform) 794 * \param iHeight input data (height of transform) 795 */ 796 void xTrMxN(short *block,short *coeff, int iWidth, int iHeight, UInt uiMode) 797 { 798 #if FULL_NBIT 799 int shift_1st = g_aucConvertToBit[iWidth] + 1 + g_uiBitDepth - 8; // log2(iWidth) - 1 + g_uiBitDepth - 8 800 #else 801 int shift_1st = g_aucConvertToBit[iWidth] + 1 + g_uiBitIncrement; // log2(iWidth) - 1 + g_uiBitIncrement 802 #endif 803 int shift_2nd = g_aucConvertToBit[iHeight] + 8; // log2(iHeight) + 6 804 805 short tmp[ 64 * 64 ]; 806 807 if( iWidth == 16 && iHeight == 4) 808 { 809 partialButterfly16( block, tmp, shift_1st, iHeight ); 810 partialButterfly4( tmp, coeff, shift_2nd, iWidth ); 811 } 812 else if( iWidth == 32 && iHeight == 8 ) 813 { 814 partialButterfly32( block, tmp, shift_1st, iHeight ); 815 partialButterfly8( tmp, coeff, shift_2nd, iWidth ); 816 } 817 else if( iWidth == 4 && iHeight == 16) 818 { 819 partialButterfly4( block, tmp, shift_1st, iHeight ); 820 partialButterfly16( tmp, coeff, shift_2nd, iWidth ); 821 } 822 else if( iWidth == 8 && iHeight == 32 ) 823 { 824 partialButterfly8( block, tmp, shift_1st, iHeight ); 825 partialButterfly32( tmp, coeff, shift_2nd, iWidth ); 826 } 827 else if( iWidth == 4 && iHeight == 4) 828 { 829 if (uiMode != REG_DCT && (!uiMode || (uiMode>=2 && uiMode <= 25))) // Check for DCT or DST 830 { 831 fastForwardDst(block,tmp,shift_1st); // Forward DST BY FAST ALGORITHM, block input, tmp output 832 } 833 else 834 { 835 partialButterfly4(block, tmp, shift_1st, iHeight); 836 } 837 if (uiMode != REG_DCT && (!uiMode || (uiMode>=11 && uiMode <= 34))) // Check for DCT or DST 838 { 839 fastForwardDst(tmp,coeff,shift_2nd); // Forward DST BY FAST ALGORITHM, tmp input, coeff output 840 } 841 else 842 { 843 partialButterfly4(tmp, coeff, shift_2nd, iWidth); 844 } 845 } 846 else if( iWidth == 8 && iHeight == 8) 847 { 848 partialButterfly8( block, tmp, shift_1st, iHeight ); 849 partialButterfly8( tmp, coeff, shift_2nd, iWidth ); 850 } 851 else if( iWidth == 16 && iHeight == 16) 852 { 853 partialButterfly16( block, tmp, shift_1st, iHeight ); 854 partialButterfly16( tmp, coeff, shift_2nd, iWidth ); 855 } 856 else if( iWidth == 32 && iHeight == 32) 857 { 858 partialButterfly32( block, tmp, shift_1st, iHeight ); 859 partialButterfly32( tmp, coeff, shift_2nd, iWidth ); 860 } 861 } 862 /** MxN inverse transform (2D) 863 * \param coeff input data (transform coefficients) 864 * \param block output data (residual) 865 * \param iWidth input data (width of transform) 866 * \param iHeight input data (height of transform) 867 */ 868 void xITrMxN(short *coeff,short *block, int iWidth, int iHeight, UInt uiMode) 852 869 { 853 870 int shift_1st = SHIFT_INV_1ST; … … 857 874 int shift_2nd = SHIFT_INV_2ND - g_uiBitIncrement; 858 875 #endif 859 short tmp[8][8];860 861 partialButterflyInverse8(coeff,tmp,shift_1st);862 partialButterflyInverse8(tmp,block,shift_2nd);863 }864 865 /** 16x16 forward transform implemented using partial butterfly structure (1D)866 * \param src input data (residual)867 * \param dst output data (transform coefficients)868 * \param shift specifies right shift after 1D transform869 */870 void partialButterfly16(short src[16][16],short dst[16][16],int shift)871 {872 int j,k;873 int E[8],O[8];874 int EE[4],EO[4];875 int EEE[2],EEO[2];876 int add = 1<<(shift-1);877 878 for (j=0; j<16; j++)879 {880 /* E and O*/881 for (k=0;k<8;k++)882 {883 E[k] = src[j][k] + src[j][15-k];884 O[k] = src[j][k] - src[j][15-k];885 }886 /* EE and EO */887 for (k=0;k<4;k++)888 {889 EE[k] = E[k] + E[7-k];890 EO[k] = E[k] - E[7-k];891 }892 /* EEE and EEO */893 EEE[0] = EE[0] + EE[3];894 EEO[0] = EE[0] - EE[3];895 EEE[1] = EE[1] + EE[2];896 EEO[1] = EE[1] - EE[2];897 898 dst[ 0][j] = (g_aiT16[ 0][0]*EEE[0] + g_aiT16[ 0][1]*EEE[1] + add)>>shift;899 dst[ 8][j] = (g_aiT16[ 8][0]*EEE[0] + g_aiT16[ 8][1]*EEE[1] + add)>>shift;900 dst[ 4][j] = (g_aiT16[ 4][0]*EEO[0] + g_aiT16[ 4][1]*EEO[1] + add)>>shift;901 dst[12][j] = (g_aiT16[12][0]*EEO[0] + g_aiT16[12][1]*EEO[1] + add)>>shift;902 903 for (k=2;k<16;k+=4)904 {905 dst[k][j] = (g_aiT16[k][0]*EO[0] + g_aiT16[k][1]*EO[1] + g_aiT16[k][2]*EO[2] + g_aiT16[k][3]*EO[3] + add)>>shift;906 }907 908 for (k=1;k<16;k+=2)909 {910 dst[k][j] = (g_aiT16[k][0]*O[0] + g_aiT16[k][1]*O[1] + g_aiT16[k][2]*O[2] + g_aiT16[k][3]*O[3] +911 g_aiT16[k][4]*O[4] + g_aiT16[k][5]*O[5] + g_aiT16[k][6]*O[6] + g_aiT16[k][7]*O[7] + add)>>shift;912 }913 914 }915 }916 #endif917 918 void partialButterfly16(short *src,short *dst,int shift, int line)919 {920 int j,k;921 int E[8],O[8];922 int EE[4],EO[4];923 int EEE[2],EEO[2];924 int add = 1<<(shift-1);925 926 for (j=0; j<line; j++)927 {928 /* E and O*/929 for (k=0;k<8;k++)930 {931 E[k] = src[k] + src[15-k];932 O[k] = src[k] - src[15-k];933 }934 /* EE and EO */935 for (k=0;k<4;k++)936 {937 EE[k] = E[k] + E[7-k];938 EO[k] = E[k] - E[7-k];939 }940 /* EEE and EEO */941 EEE[0] = EE[0] + EE[3];942 EEO[0] = EE[0] - EE[3];943 EEE[1] = EE[1] + EE[2];944 EEO[1] = EE[1] - EE[2];945 946 dst[ 0 ] = (g_aiT16[ 0][0]*EEE[0] + g_aiT16[ 0][1]*EEE[1] + add)>>shift;947 dst[ 8*line ] = (g_aiT16[ 8][0]*EEE[0] + g_aiT16[ 8][1]*EEE[1] + add)>>shift;948 dst[ 4*line ] = (g_aiT16[ 4][0]*EEO[0] + g_aiT16[ 4][1]*EEO[1] + add)>>shift;949 dst[ 12*line] = (g_aiT16[12][0]*EEO[0] + g_aiT16[12][1]*EEO[1] + add)>>shift;950 951 for (k=2;k<16;k+=4)952 {953 dst[ k*line ] = (g_aiT16[k][0]*EO[0] + g_aiT16[k][1]*EO[1] + g_aiT16[k][2]*EO[2] + g_aiT16[k][3]*EO[3] + add)>>shift;954 }955 956 for (k=1;k<16;k+=2)957 {958 dst[ k*line ] = (g_aiT16[k][0]*O[0] + g_aiT16[k][1]*O[1] + g_aiT16[k][2]*O[2] + g_aiT16[k][3]*O[3] +959 g_aiT16[k][4]*O[4] + g_aiT16[k][5]*O[5] + g_aiT16[k][6]*O[6] + g_aiT16[k][7]*O[7] + add)>>shift;960 }961 962 src += 16;963 dst ++;964 965 }966 }967 968 #if !UNIFIED_TRANSFORM969 /** 16x16 forward transform (2D)970 * \param block input data (residual)971 * \param coeff output data (transform coefficients)972 */973 void xTr16(short block[16][16],short coeff[16][16])974 {975 #if FULL_NBIT976 int shift_1st = 3 + g_uiBitDepth - 8; // log2(16) - 1 + g_uiBitDepth - 8977 #else978 int shift_1st = 3 + g_uiBitIncrement; // log2(16) - 1 + g_uiBitIncrement979 #endif980 int shift_2nd = 10; // log2(16) + 6981 short tmp[16][16];982 983 partialButterfly16(block,tmp,shift_1st);984 partialButterfly16(tmp,coeff,shift_2nd);985 }986 987 /** 16x16 inverse transform implemented using partial butterfly structure (1D)988 * \param src input data (transform coefficients)989 * \param dst output data (residual)990 * \param shift specifies right shift after 1D transform991 */992 void partialButterflyInverse16(short src[16][16],short dst[16][16],int shift)993 {994 int j,k;995 int E[8],O[8];996 int EE[4],EO[4];997 int EEE[2],EEO[2];998 int add = 1<<(shift-1);999 1000 for (j=0; j<16; j++)1001 {1002 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */1003 for (k=0;k<8;k++)1004 {1005 O[k] = g_aiT16[ 1][k]*src[ 1][j] + g_aiT16[ 3][k]*src[ 3][j] + g_aiT16[ 5][k]*src[ 5][j] + g_aiT16[ 7][k]*src[ 7][j] +1006 g_aiT16[ 9][k]*src[ 9][j] + g_aiT16[11][k]*src[11][j] + g_aiT16[13][k]*src[13][j] + g_aiT16[15][k]*src[15][j];1007 }1008 for (k=0;k<4;k++)1009 {1010 EO[k] = g_aiT16[ 2][k]*src[ 2][j] + g_aiT16[ 6][k]*src[ 6][j] + g_aiT16[10][k]*src[10][j] + g_aiT16[14][k]*src[14][j];1011 }1012 EEO[0] = g_aiT16[4][0]*src[4][j] + g_aiT16[12][0]*src[12][j];1013 EEE[0] = g_aiT16[0][0]*src[0][j] + g_aiT16[ 8][0]*src[ 8][j];1014 EEO[1] = g_aiT16[4][1]*src[4][j] + g_aiT16[12][1]*src[12][j];1015 EEE[1] = g_aiT16[0][1]*src[0][j] + g_aiT16[ 8][1]*src[ 8][j];1016 1017 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */1018 for (k=0;k<2;k++)1019 {1020 EE[k] = EEE[k] + EEO[k];1021 EE[k+2] = EEE[1-k] - EEO[1-k];1022 }1023 for (k=0;k<4;k++)1024 {1025 E[k] = EE[k] + EO[k];1026 E[k+4] = EE[3-k] - EO[3-k];1027 }1028 for (k=0;k<8;k++)1029 {1030 dst[j][k] = Clip3( -32768, 32767, (E[k] + O[k] + add)>>shift );1031 dst[j][k+8] = Clip3( -32768, 32767, (E[7-k] - O[7-k] + add)>>shift );1032 }1033 }1034 }1035 #endif1036 1037 void partialButterflyInverse16(short *src,short *dst,int shift, int line)1038 {1039 int j,k;1040 int E[8],O[8];1041 int EE[4],EO[4];1042 int EEE[2],EEO[2];1043 int add = 1<<(shift-1);1044 1045 for (j=0; j<line; j++)1046 {1047 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */1048 for (k=0;k<8;k++)1049 {1050 O[k] = g_aiT16[ 1][k]*src[ line] + g_aiT16[ 3][k]*src[ 3*line] + g_aiT16[ 5][k]*src[ 5*line] + g_aiT16[ 7][k]*src[ 7*line] +1051 g_aiT16[ 9][k]*src[ 9*line] + g_aiT16[11][k]*src[11*line] + g_aiT16[13][k]*src[13*line] + g_aiT16[15][k]*src[15*line];1052 }1053 for (k=0;k<4;k++)1054 {1055 EO[k] = g_aiT16[ 2][k]*src[ 2*line] + g_aiT16[ 6][k]*src[ 6*line] + g_aiT16[10][k]*src[10*line] + g_aiT16[14][k]*src[14*line];1056 }1057 EEO[0] = g_aiT16[4][0]*src[ 4*line ] + g_aiT16[12][0]*src[ 12*line ];1058 EEE[0] = g_aiT16[0][0]*src[ 0 ] + g_aiT16[ 8][0]*src[ 8*line ];1059 EEO[1] = g_aiT16[4][1]*src[ 4*line ] + g_aiT16[12][1]*src[ 12*line ];1060 EEE[1] = g_aiT16[0][1]*src[ 0 ] + g_aiT16[ 8][1]*src[ 8*line ];1061 1062 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */1063 for (k=0;k<2;k++)1064 {1065 EE[k] = EEE[k] + EEO[k];1066 EE[k+2] = EEE[1-k] - EEO[1-k];1067 }1068 for (k=0;k<4;k++)1069 {1070 E[k] = EE[k] + EO[k];1071 E[k+4] = EE[3-k] - EO[3-k];1072 }1073 for (k=0;k<8;k++)1074 {1075 dst[k] = Clip3( -32768, 32767, (E[k] + O[k] + add)>>shift );1076 dst[k+8] = Clip3( -32768, 32767, (E[7-k] - O[7-k] + add)>>shift );1077 }1078 src ++;1079 dst += 16;1080 }1081 }1082 1083 #if !UNIFIED_TRANSFORM1084 /** 16x16 inverse transform (2D)1085 * \param coeff input data (transform coefficients)1086 * \param block output data (residual)1087 */1088 void xITr16(short coeff[16][16],short block[16][16])1089 {1090 int shift_1st = SHIFT_INV_1ST;1091 #if FULL_NBIT1092 int shift_2nd = SHIFT_INV_2ND - ((short)g_uiBitDepth - 8);1093 #else1094 int shift_2nd = SHIFT_INV_2ND - g_uiBitIncrement;1095 #endif1096 short tmp[16][16];1097 1098 partialButterflyInverse16(coeff,tmp,shift_1st);1099 partialButterflyInverse16(tmp,block,shift_2nd);1100 }1101 1102 /** 32x32 forward transform implemented using partial butterfly structure (1D)1103 * \param src input data (residual)1104 * \param dst output data (transform coefficients)1105 * \param shift specifies right shift after 1D transform1106 */1107 void partialButterfly32(short src[32][32],short dst[32][32],int shift)1108 {1109 int j,k;1110 int E[16],O[16];1111 int EE[8],EO[8];1112 int EEE[4],EEO[4];1113 int EEEE[2],EEEO[2];1114 int add = 1<<(shift-1);1115 1116 for (j=0; j<32; j++)1117 {1118 /* E and O*/1119 for (k=0;k<16;k++)1120 {1121 E[k] = src[j][k] + src[j][31-k];1122 O[k] = src[j][k] - src[j][31-k];1123 }1124 /* EE and EO */1125 for (k=0;k<8;k++)1126 {1127 EE[k] = E[k] + E[15-k];1128 EO[k] = E[k] - E[15-k];1129 }1130 /* EEE and EEO */1131 for (k=0;k<4;k++)1132 {1133 EEE[k] = EE[k] + EE[7-k];1134 EEO[k] = EE[k] - EE[7-k];1135 }1136 /* EEEE and EEEO */1137 EEEE[0] = EEE[0] + EEE[3];1138 EEEO[0] = EEE[0] - EEE[3];1139 EEEE[1] = EEE[1] + EEE[2];1140 EEEO[1] = EEE[1] - EEE[2];1141 1142 dst[ 0][j] = (g_aiT32[ 0][0]*EEEE[0] + g_aiT32[ 0][1]*EEEE[1] + add)>>shift;1143 dst[16][j] = (g_aiT32[16][0]*EEEE[0] + g_aiT32[16][1]*EEEE[1] + add)>>shift;1144 dst[ 8][j] = (g_aiT32[ 8][0]*EEEO[0] + g_aiT32[ 8][1]*EEEO[1] + add)>>shift;1145 dst[24][j] = (g_aiT32[24][0]*EEEO[0] + g_aiT32[24][1]*EEEO[1] + add)>>shift;1146 for (k=4;k<32;k+=8)1147 {1148 dst[k][j] = (g_aiT32[k][0]*EEO[0] + g_aiT32[k][1]*EEO[1] + g_aiT32[k][2]*EEO[2] + g_aiT32[k][3]*EEO[3] + add)>>shift;1149 }1150 for (k=2;k<32;k+=4)1151 {1152 dst[k][j] = (g_aiT32[k][0]*EO[0] + g_aiT32[k][1]*EO[1] + g_aiT32[k][2]*EO[2] + g_aiT32[k][3]*EO[3] +1153 g_aiT32[k][4]*EO[4] + g_aiT32[k][5]*EO[5] + g_aiT32[k][6]*EO[6] + g_aiT32[k][7]*EO[7] + add)>>shift;1154 }1155 for (k=1;k<32;k+=2)1156 {1157 dst[k][j] = (g_aiT32[k][ 0]*O[ 0] + g_aiT32[k][ 1]*O[ 1] + g_aiT32[k][ 2]*O[ 2] + g_aiT32[k][ 3]*O[ 3] +1158 g_aiT32[k][ 4]*O[ 4] + g_aiT32[k][ 5]*O[ 5] + g_aiT32[k][ 6]*O[ 6] + g_aiT32[k][ 7]*O[ 7] +1159 g_aiT32[k][ 8]*O[ 8] + g_aiT32[k][ 9]*O[ 9] + g_aiT32[k][10]*O[10] + g_aiT32[k][11]*O[11] +1160 g_aiT32[k][12]*O[12] + g_aiT32[k][13]*O[13] + g_aiT32[k][14]*O[14] + g_aiT32[k][15]*O[15] + add)>>shift;1161 }1162 }1163 }1164 #endif1165 1166 void partialButterfly32(short *src,short *dst,int shift, int line)1167 {1168 int j,k;1169 int E[16],O[16];1170 int EE[8],EO[8];1171 int EEE[4],EEO[4];1172 int EEEE[2],EEEO[2];1173 int add = 1<<(shift-1);1174 1175 for (j=0; j<line; j++)1176 {1177 /* E and O*/1178 for (k=0;k<16;k++)1179 {1180 E[k] = src[k] + src[31-k];1181 O[k] = src[k] - src[31-k];1182 }1183 /* EE and EO */1184 for (k=0;k<8;k++)1185 {1186 EE[k] = E[k] + E[15-k];1187 EO[k] = E[k] - E[15-k];1188 }1189 /* EEE and EEO */1190 for (k=0;k<4;k++)1191 {1192 EEE[k] = EE[k] + EE[7-k];1193 EEO[k] = EE[k] - EE[7-k];1194 }1195 /* EEEE and EEEO */1196 EEEE[0] = EEE[0] + EEE[3];1197 EEEO[0] = EEE[0] - EEE[3];1198 EEEE[1] = EEE[1] + EEE[2];1199 EEEO[1] = EEE[1] - EEE[2];1200 1201 dst[ 0 ] = (g_aiT32[ 0][0]*EEEE[0] + g_aiT32[ 0][1]*EEEE[1] + add)>>shift;1202 dst[ 16*line ] = (g_aiT32[16][0]*EEEE[0] + g_aiT32[16][1]*EEEE[1] + add)>>shift;1203 dst[ 8*line ] = (g_aiT32[ 8][0]*EEEO[0] + g_aiT32[ 8][1]*EEEO[1] + add)>>shift;1204 dst[ 24*line ] = (g_aiT32[24][0]*EEEO[0] + g_aiT32[24][1]*EEEO[1] + add)>>shift;1205 for (k=4;k<32;k+=8)1206 {1207 dst[ k*line ] = (g_aiT32[k][0]*EEO[0] + g_aiT32[k][1]*EEO[1] + g_aiT32[k][2]*EEO[2] + g_aiT32[k][3]*EEO[3] + add)>>shift;1208 }1209 for (k=2;k<32;k+=4)1210 {1211 dst[ k*line ] = (g_aiT32[k][0]*EO[0] + g_aiT32[k][1]*EO[1] + g_aiT32[k][2]*EO[2] + g_aiT32[k][3]*EO[3] +1212 g_aiT32[k][4]*EO[4] + g_aiT32[k][5]*EO[5] + g_aiT32[k][6]*EO[6] + g_aiT32[k][7]*EO[7] + add)>>shift;1213 }1214 for (k=1;k<32;k+=2)1215 {1216 dst[ k*line ] = (g_aiT32[k][ 0]*O[ 0] + g_aiT32[k][ 1]*O[ 1] + g_aiT32[k][ 2]*O[ 2] + g_aiT32[k][ 3]*O[ 3] +1217 g_aiT32[k][ 4]*O[ 4] + g_aiT32[k][ 5]*O[ 5] + g_aiT32[k][ 6]*O[ 6] + g_aiT32[k][ 7]*O[ 7] +1218 g_aiT32[k][ 8]*O[ 8] + g_aiT32[k][ 9]*O[ 9] + g_aiT32[k][10]*O[10] + g_aiT32[k][11]*O[11] +1219 g_aiT32[k][12]*O[12] + g_aiT32[k][13]*O[13] + g_aiT32[k][14]*O[14] + g_aiT32[k][15]*O[15] + add)>>shift;1220 }1221 src += 32;1222 dst ++;1223 }1224 }1225 1226 #if !UNIFIED_TRANSFORM1227 /** 32x32 forward transform (2D)1228 * \param block input data (residual)1229 * \param coeff output data (transform coefficients)1230 */1231 void xTr32(short block[32][32],short coeff[32][32])1232 {1233 #if FULL_NBIT1234 int shift_1st = 4 + g_uiBitDepth - 8; // log2(32) - 1 + g_uiBitDepth - 81235 #else1236 int shift_1st = 4 + g_uiBitIncrement; // log2(32) - 1 + g_uiBitIncrement1237 #endif1238 int shift_2nd = 11; // log2(32) + 61239 short tmp[32][32];1240 1241 partialButterfly32(block,tmp,shift_1st);1242 partialButterfly32(tmp,coeff,shift_2nd);1243 }1244 1245 /** 32x32 inverse transform implemented using partial butterfly structure (1D)1246 * \param src input data (transform coefficients)1247 * \param dst output data (residual)1248 * \param shift specifies right shift after 1D transform1249 */1250 void partialButterflyInverse32(short src[32][32],short dst[32][32],int shift)1251 {1252 int j,k;1253 int E[16],O[16];1254 int EE[8],EO[8];1255 int EEE[4],EEO[4];1256 int EEEE[2],EEEO[2];1257 int add = 1<<(shift-1);1258 1259 for (j=0; j<32; j++)1260 {1261 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */1262 for (k=0;k<16;k++)1263 {1264 O[k] = g_aiT32[ 1][k]*src[ 1][j] + g_aiT32[ 3][k]*src[ 3][j] + g_aiT32[ 5][k]*src[ 5][j] + g_aiT32[ 7][k]*src[ 7][j] +1265 g_aiT32[ 9][k]*src[ 9][j] + g_aiT32[11][k]*src[11][j] + g_aiT32[13][k]*src[13][j] + g_aiT32[15][k]*src[15][j] +1266 g_aiT32[17][k]*src[17][j] + g_aiT32[19][k]*src[19][j] + g_aiT32[21][k]*src[21][j] + g_aiT32[23][k]*src[23][j] +1267 g_aiT32[25][k]*src[25][j] + g_aiT32[27][k]*src[27][j] + g_aiT32[29][k]*src[29][j] + g_aiT32[31][k]*src[31][j];1268 }1269 for (k=0;k<8;k++)1270 {1271 EO[k] = g_aiT32[ 2][k]*src[ 2][j] + g_aiT32[ 6][k]*src[ 6][j] + g_aiT32[10][k]*src[10][j] + g_aiT32[14][k]*src[14][j] +1272 g_aiT32[18][k]*src[18][j] + g_aiT32[22][k]*src[22][j] + g_aiT32[26][k]*src[26][j] + g_aiT32[30][k]*src[30][j];1273 }1274 for (k=0;k<4;k++)1275 {1276 EEO[k] = g_aiT32[4][k]*src[4][j] + g_aiT32[12][k]*src[12][j] + g_aiT32[20][k]*src[20][j] + g_aiT32[28][k]*src[28][j];1277 }1278 EEEO[0] = g_aiT32[8][0]*src[8][j] + g_aiT32[24][0]*src[24][j];1279 EEEO[1] = g_aiT32[8][1]*src[8][j] + g_aiT32[24][1]*src[24][j];1280 EEEE[0] = g_aiT32[0][0]*src[0][j] + g_aiT32[16][0]*src[16][j];1281 EEEE[1] = g_aiT32[0][1]*src[0][j] + g_aiT32[16][1]*src[16][j];1282 1283 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */1284 EEE[0] = EEEE[0] + EEEO[0];1285 EEE[3] = EEEE[0] - EEEO[0];1286 EEE[1] = EEEE[1] + EEEO[1];1287 EEE[2] = EEEE[1] - EEEO[1];1288 for (k=0;k<4;k++)1289 {1290 EE[k] = EEE[k] + EEO[k];1291 EE[k+4] = EEE[3-k] - EEO[3-k];1292 }1293 for (k=0;k<8;k++)1294 {1295 E[k] = EE[k] + EO[k];1296 E[k+8] = EE[7-k] - EO[7-k];1297 }1298 for (k=0;k<16;k++)1299 {1300 dst[j][k] = Clip3( -32768, 32767, (E[k] + O[k] + add)>>shift );1301 dst[j][k+16] = Clip3( -32768, 32767, (E[15-k] - O[15-k] + add)>>shift );1302 }1303 }1304 }1305 #endif1306 1307 void partialButterflyInverse32(short *src,short *dst,int shift, int line)1308 {1309 int j,k;1310 int E[16],O[16];1311 int EE[8],EO[8];1312 int EEE[4],EEO[4];1313 int EEEE[2],EEEO[2];1314 int add = 1<<(shift-1);1315 1316 for (j=0; j<line; j++)1317 {1318 /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */1319 for (k=0;k<16;k++)1320 {1321 O[k] = g_aiT32[ 1][k]*src[ line ] + g_aiT32[ 3][k]*src[ 3*line ] + g_aiT32[ 5][k]*src[ 5*line ] + g_aiT32[ 7][k]*src[ 7*line ] +1322 g_aiT32[ 9][k]*src[ 9*line ] + g_aiT32[11][k]*src[ 11*line ] + g_aiT32[13][k]*src[ 13*line ] + g_aiT32[15][k]*src[ 15*line ] +1323 g_aiT32[17][k]*src[ 17*line ] + g_aiT32[19][k]*src[ 19*line ] + g_aiT32[21][k]*src[ 21*line ] + g_aiT32[23][k]*src[ 23*line ] +1324 g_aiT32[25][k]*src[ 25*line ] + g_aiT32[27][k]*src[ 27*line ] + g_aiT32[29][k]*src[ 29*line ] + g_aiT32[31][k]*src[ 31*line ];1325 }1326 for (k=0;k<8;k++)1327 {1328 EO[k] = g_aiT32[ 2][k]*src[ 2*line ] + g_aiT32[ 6][k]*src[ 6*line ] + g_aiT32[10][k]*src[ 10*line ] + g_aiT32[14][k]*src[ 14*line ] +1329 g_aiT32[18][k]*src[ 18*line ] + g_aiT32[22][k]*src[ 22*line ] + g_aiT32[26][k]*src[ 26*line ] + g_aiT32[30][k]*src[ 30*line ];1330 }1331 for (k=0;k<4;k++)1332 {1333 EEO[k] = g_aiT32[4][k]*src[ 4*line ] + g_aiT32[12][k]*src[ 12*line ] + g_aiT32[20][k]*src[ 20*line ] + g_aiT32[28][k]*src[ 28*line ];1334 }1335 EEEO[0] = g_aiT32[8][0]*src[ 8*line ] + g_aiT32[24][0]*src[ 24*line ];1336 EEEO[1] = g_aiT32[8][1]*src[ 8*line ] + g_aiT32[24][1]*src[ 24*line ];1337 EEEE[0] = g_aiT32[0][0]*src[ 0 ] + g_aiT32[16][0]*src[ 16*line ];1338 EEEE[1] = g_aiT32[0][1]*src[ 0 ] + g_aiT32[16][1]*src[ 16*line ];1339 1340 /* Combining even and odd terms at each hierarchy levels to calculate the final spatial domain vector */1341 EEE[0] = EEEE[0] + EEEO[0];1342 EEE[3] = EEEE[0] - EEEO[0];1343 EEE[1] = EEEE[1] + EEEO[1];1344 EEE[2] = EEEE[1] - EEEO[1];1345 for (k=0;k<4;k++)1346 {1347 EE[k] = EEE[k] + EEO[k];1348 EE[k+4] = EEE[3-k] - EEO[3-k];1349 }1350 for (k=0;k<8;k++)1351 {1352 E[k] = EE[k] + EO[k];1353 E[k+8] = EE[7-k] - EO[7-k];1354 }1355 for (k=0;k<16;k++)1356 {1357 dst[k] = Clip3( -32768, 32767, (E[k] + O[k] + add)>>shift );1358 dst[k+16] = Clip3( -32768, 32767, (E[15-k] - O[15-k] + add)>>shift );1359 }1360 src ++;1361 dst += 32;1362 }1363 }1364 1365 #if !UNIFIED_TRANSFORM1366 /** 32x32 inverse transform (2D)1367 * \param coeff input data (transform coefficients)1368 * \param block output data (residual)1369 */1370 void xITr32(short coeff[32][32],short block[32][32])1371 {1372 int shift_1st = SHIFT_INV_1ST;1373 #if FULL_NBIT1374 int shift_2nd = SHIFT_INV_2ND - ((short)g_uiBitDepth - 8);1375 #else1376 int shift_2nd = SHIFT_INV_2ND - g_uiBitIncrement;1377 #endif1378 short tmp[32][32];1379 1380 partialButterflyInverse32(coeff,tmp,shift_1st);1381 partialButterflyInverse32(tmp,block,shift_2nd);1382 }1383 #endif1384 1385 /** MxN forward transform (2D)1386 * \param block input data (residual)1387 * \param coeff output data (transform coefficients)1388 * \param iWidth input data (width of transform)1389 * \param iHeight input data (height of transform)1390 */1391 #if UNIFIED_TRANSFORM1392 void xTrMxN(short *block,short *coeff, int iWidth, int iHeight, UInt uiMode)1393 #else1394 void xTrMxN(short *block,short *coeff, int iWidth, int iHeight)1395 #endif1396 {1397 #if FULL_NBIT1398 int shift_1st = g_aucConvertToBit[iWidth] + 1 + g_uiBitDepth - 8; // log2(iWidth) - 1 + g_uiBitDepth - 81399 #else1400 int shift_1st = g_aucConvertToBit[iWidth] + 1 + g_uiBitIncrement; // log2(iWidth) - 1 + g_uiBitIncrement1401 #endif1402 int shift_2nd = g_aucConvertToBit[iHeight] + 8; // log2(iHeight) + 61403 1404 short tmp[ 64 * 64 ];1405 1406 if( iWidth == 16 && iHeight == 4)1407 {1408 partialButterfly16( block, tmp, shift_1st, iHeight );1409 partialButterfly4( tmp, coeff, shift_2nd, iWidth );1410 }1411 else if( iWidth == 32 && iHeight == 8 )1412 {1413 partialButterfly32( block, tmp, shift_1st, iHeight );1414 partialButterfly8( tmp, coeff, shift_2nd, iWidth );1415 }1416 else if( iWidth == 4 && iHeight == 16)1417 {1418 partialButterfly4( block, tmp, shift_1st, iHeight );1419 partialButterfly16( tmp, coeff, shift_2nd, iWidth );1420 }1421 else if( iWidth == 8 && iHeight == 32 )1422 {1423 partialButterfly8( block, tmp, shift_1st, iHeight );1424 partialButterfly32( tmp, coeff, shift_2nd, iWidth );1425 }1426 #if UNIFIED_TRANSFORM1427 else if( iWidth == 4 && iHeight == 4)1428 {1429 #if LOGI_INTRA_NAME_3MPM1430 if (uiMode != REG_DCT && (!uiMode || (uiMode>=2 && uiMode <= 25))) // Check for DCT or DST1431 #else1432 if (uiMode != REG_DCT && g_aucDCTDSTMode_Hor[uiMode])// Check for DCT or DST1433 #endif1434 {1435 fastForwardDst(block,tmp,shift_1st); // Forward DST BY FAST ALGORITHM, block input, tmp output1436 }1437 else1438 {1439 partialButterfly4(block, tmp, shift_1st, iHeight);1440 }1441 #if LOGI_INTRA_NAME_3MPM1442 if (uiMode != REG_DCT && (!uiMode || (uiMode>=11 && uiMode <= 34))) // Check for DCT or DST1443 #else1444 if (uiMode != REG_DCT && g_aucDCTDSTMode_Vert[uiMode] ) // Check for DCT or DST1445 #endif1446 {1447 fastForwardDst(tmp,coeff,shift_2nd); // Forward DST BY FAST ALGORITHM, tmp input, coeff output1448 }1449 else1450 {1451 partialButterfly4(tmp, coeff, shift_2nd, iWidth);1452 }1453 }1454 else if( iWidth == 8 && iHeight == 8)1455 {1456 partialButterfly8( block, tmp, shift_1st, iHeight );1457 partialButterfly8( tmp, coeff, shift_2nd, iWidth );1458 }1459 else if( iWidth == 16 && iHeight == 16)1460 {1461 partialButterfly16( block, tmp, shift_1st, iHeight );1462 partialButterfly16( tmp, coeff, shift_2nd, iWidth );1463 }1464 else if( iWidth == 32 && iHeight == 32)1465 {1466 partialButterfly32( block, tmp, shift_1st, iHeight );1467 partialButterfly32( tmp, coeff, shift_2nd, iWidth );1468 }1469 #endif1470 }1471 /** MxN inverse transform (2D)1472 * \param coeff input data (transform coefficients)1473 * \param block output data (residual)1474 * \param iWidth input data (width of transform)1475 * \param iHeight input data (height of transform)1476 */1477 #if UNIFIED_TRANSFORM1478 void xITrMxN(short *coeff,short *block, int iWidth, int iHeight, UInt uiMode)1479 #else1480 void xITrMxN(short *coeff,short *block, int iWidth, int iHeight)1481 #endif1482 {1483 int shift_1st = SHIFT_INV_1ST;1484 #if FULL_NBIT1485 int shift_2nd = SHIFT_INV_2ND - ((short)g_uiBitDepth - 8);1486 #else1487 int shift_2nd = SHIFT_INV_2ND - g_uiBitIncrement;1488 #endif1489 876 1490 877 short tmp[ 64*64]; … … 1509 896 partialButterflyInverse8(tmp,block,shift_2nd,iHeight); 1510 897 } 1511 #if UNIFIED_TRANSFORM1512 898 else if( iWidth == 4 && iHeight == 4) 1513 899 { 1514 #if LOGI_INTRA_NAME_3MPM1515 900 if (uiMode != REG_DCT && (!uiMode || (uiMode>=11 && uiMode <= 34))) // Check for DCT or DST 1516 #else1517 if (uiMode != REG_DCT && g_aucDCTDSTMode_Vert[uiMode] ) // Check for DCT or DST1518 #endif1519 901 { 1520 902 fastInverseDst(coeff,tmp,shift_1st); // Inverse DST by FAST Algorithm, coeff input, tmp output … … 1524 906 partialButterflyInverse4(coeff,tmp,shift_1st,iWidth); 1525 907 } 1526 #if LOGI_INTRA_NAME_3MPM1527 908 if (uiMode != REG_DCT && (!uiMode || (uiMode>=2 && uiMode <= 25))) // Check for DCT or DST 1528 #else1529 if (uiMode != REG_DCT && g_aucDCTDSTMode_Hor[uiMode] ) // Check for DCT or DST1530 #endif1531 909 { 1532 910 fastInverseDst(tmp,block,shift_2nd); // Inverse DST by FAST Algorithm, tmp input, coeff output … … 1552 930 partialButterflyInverse32(tmp,block,shift_2nd,iHeight); 1553 931 } 1554 #endif1555 932 } 1556 933 1557 934 #endif //MATRIX_MULT 1558 935 1559 #if MULTIBITS_DATA_HIDING1560 936 // To minimize the distortion only. No rate is considered. 1561 937 Void TComTrQuant::signBitHidingHDQ( TComDataCU* pcCU, TCoeff* pQCoef, TCoeff* pCoef, UInt const *scan, Int* deltaU, Int width, Int height ) … … 1684 1060 return; 1685 1061 } 1686 #endif1687 1062 1688 1063 Void TComTrQuant::xQuant( TComDataCU* pcCU, … … 1715 1090 else 1716 1091 { 1717 #if MULTIBITS_DATA_HIDING1718 1092 const UInt log2BlockSize = g_aucConvertToBit[ iWidth ] + 2; 1719 1093 … … 1740 1114 1741 1115 Int deltaU[32*32] ; 1742 #endif1743 1116 1744 1117 #if ADAPTIVE_QP_SELECTION … … 1746 1119 Int iQpBase = pcCU->getSlice()->getSliceQpBase(); 1747 1120 1748 #if H0736_AVC_STYLE_QP_RANGE1749 1121 Int qpScaled; 1750 1122 Int qpBDOffset = (eTType == TEXT_LUMA)? pcCU->getSlice()->getSPS()->getQpBDOffsetY() : pcCU->getSlice()->getSPS()->getQpBDOffsetC(); … … 1768 1140 } 1769 1141 cQpBase.setQpParam(qpScaled, false, pcCU->getSlice()->getSliceType()); 1770 #else1771 if(eTType != TEXT_LUMA)1772 {1773 iQpBase = g_aucChromaScale[iQpBase];1774 }1775 cQpBase.setQpParam(iQpBase, false, pcCU->getSlice()->getSliceType());1776 #endif1777 1142 #endif 1778 1143 … … 1811 1176 #endif 1812 1177 1813 #if MULTIBITS_DATA_HIDING1814 1178 Int qBits8 = iQBits-8; 1815 #endif1816 1179 for( Int n = 0; n < iWidth*iHeight; n++ ) 1817 1180 { … … 1829 1192 } 1830 1193 iLevel = (Int)((tmpLevel + iAdd ) >> iQBits); 1831 #if MULTIBITS_DATA_HIDING1832 1194 deltaU[uiBlockPos] = (Int)((tmpLevel - (iLevel<<iQBits) )>> qBits8); 1833 #endif1834 1195 #else 1835 1196 iLevel = ((Int64)abs(iLevel) * piQuantCoeff[uiBlockPos] + iAdd ) >> iQBits; 1836 #if MULTIBITS_DATA_HIDING1837 1197 deltaU[uiBlockPos] = (Int)( ((Int64)abs(iLevel) * piQuantCoeff[uiBlockPos] - (iLevel<<iQBits) )>> qBits8 ); 1838 #endif1839 1198 #endif 1840 1199 uiAcSum += iLevel; … … 1842 1201 piQCoef[uiBlockPos] = Clip3( -32768, 32767, iLevel ); 1843 1202 } // for n 1844 #if MULTIBITS_DATA_HIDING1845 1203 if( pcCU->getSlice()->getPPS()->getSignHideFlag() ) 1846 1204 { … … 1850 1208 } 1851 1209 } 1852 #endif1853 1210 } //if RDOQ 1854 1211 //return; … … 1888 1245 iShift = QUANT_IQUANT_SHIFT - QUANT_SHIFT - iTransformShift; 1889 1246 1890 #if DEQUANT_CLIPPING1891 1247 TCoeff clipQCoef; 1892 1248 const Int bitRange = min( 15, ( Int )( 12 + uiLog2TrSize + uiBitDepth - m_cQP.m_iPer) ); 1893 1249 const Int levelLimit = 1 << bitRange; 1894 #endif1895 1250 1896 1251 if(getUseScalingList()) … … 1911 1266 for( Int n = 0; n < iWidth*iHeight; n++ ) 1912 1267 { 1913 #if DEQUANT_CLIPPING1914 1268 clipQCoef = Clip3( -32768, 32767, piQCoef[n] ); 1915 1269 iCoeffQ = ((clipQCoef * piDequantCoef[n]) + iAdd ) >> (iShift - m_cQP.m_iPer); 1916 #else1917 iCoeffQ = ((piQCoef[n] * piDequantCoef[n]) + iAdd ) >> (iShift - m_cQP.m_iPer);1918 #endif1919 1270 piCoef[n] = Clip3(-32768,32767,iCoeffQ); 1920 1271 } … … 1924 1275 for( Int n = 0; n < iWidth*iHeight; n++ ) 1925 1276 { 1926 #if DEQUANT_CLIPPING1927 1277 clipQCoef = Clip3( -levelLimit, levelLimit - 1, piQCoef[n] ); 1928 1278 iCoeffQ = (clipQCoef * piDequantCoef[n]) << (m_cQP.m_iPer - iShift); 1929 #else1930 iCoeffQ = (piQCoef[n] * piDequantCoef[n]) << (m_cQP.m_iPer - iShift);1931 #endif1932 1279 piCoef[n] = Clip3(-32768,32767,iCoeffQ); 1933 1280 } … … 1941 1288 for( Int n = 0; n < iWidth*iHeight; n++ ) 1942 1289 { 1943 #if DEQUANT_CLIPPING1944 1290 clipQCoef = Clip3( -32768, 32767, piQCoef[n] ); 1945 1291 iCoeffQ = ( clipQCoef * scale + iAdd ) >> iShift; 1946 #else1947 iCoeffQ = ( piQCoef[n] * scale + iAdd ) >> iShift;1948 #endif1949 1292 piCoef[n] = Clip3(-32768,32767,iCoeffQ); 1950 1293 } … … 2134 1477 xTr(piBlkResi,psCoeff,uiStride,(UInt)iSize,uiMode); 2135 1478 #else 2136 #if UNIFIED_TRANSFORM2137 1479 Int j; 2138 #else2139 Int iSize = iWidth;2140 if( iWidth != iHeight)2141 #endif2142 1480 { 2143 1481 short block[ 64 * 64 ]; … … 2149 1487 } 2150 1488 } 2151 #if UNIFIED_TRANSFORM2152 1489 xTrMxN( block, coeff, iWidth, iHeight, uiMode ); 2153 #else2154 xTrMxN( block, coeff, iWidth, iHeight );2155 #endif2156 1490 for ( j = 0; j < iHeight * iWidth; j++ ) 2157 1491 { … … 2160 1494 return ; 2161 1495 } 2162 #if !UNIFIED_TRANSFORM2163 if (iSize==4)2164 {2165 short block[4][4];2166 short coeff[4][4];2167 for (j=0; j<4; j++)2168 {2169 memcpy(block[j],piBlkResi+j*uiStride,4*sizeof(short));2170 }2171 xTr4(block,coeff,uiMode);2172 for (j=0; j<4; j++)2173 {2174 for (k=0; k<4; k++)2175 {2176 psCoeff[j*4+k] = coeff[j][k];2177 }2178 }2179 }2180 else if (iSize==8)2181 {2182 short block[8][8];2183 short coeff[8][8];2184 2185 for (j=0; j<8; j++)2186 {2187 memcpy(block[j],piBlkResi+j*uiStride,8*sizeof(short));2188 }2189 2190 xTr8(block,coeff);2191 for (j=0; j<8; j++)2192 {2193 for (k=0; k<8; k++)2194 {2195 psCoeff[j*8+k] = coeff[j][k];2196 }2197 }2198 }2199 else if (iSize==16)2200 {2201 short block[16][16];2202 short coeff[16][16];2203 2204 for (j=0; j<16; j++)2205 {2206 memcpy(block[j],piBlkResi+j*uiStride,16*sizeof(short));2207 }2208 xTr16(block,coeff);2209 for (j=0; j<16; j++)2210 {2211 for (k=0; k<16; k++)2212 {2213 psCoeff[j*16+k] = coeff[j][k];2214 }2215 }2216 }2217 else if (iSize==32)2218 {2219 short block[32][32];2220 short coeff[32][32];2221 2222 for (j=0; j<32; j++)2223 {2224 memcpy(block[j],piBlkResi+j*uiStride,32*sizeof(short));2225 }2226 xTr32(block,coeff);2227 for (j=0; j<32; j++)2228 {2229 for (k=0; k<32; k++)2230 {2231 psCoeff[j*32+k] = coeff[j][k];2232 }2233 }2234 }2235 #endif2236 1496 #endif 2237 1497 } … … 2255 1515 xITr(plCoef,pResidual,uiStride,(UInt)iSize,uiMode); 2256 1516 #else 2257 #if UNIFIED_TRANSFORM2258 1517 Int j; 2259 #else2260 Int j,k;2261 Int iSize = iWidth;2262 if( iWidth != iHeight )2263 #endif2264 1518 { 2265 1519 short block[ 64 * 64 ]; … … 2269 1523 coeff[j] = (short)plCoef[j]; 2270 1524 } 2271 #if UNIFIED_TRANSFORM2272 1525 xITrMxN( coeff, block, iWidth, iHeight, uiMode ); 2273 #else2274 xITrMxN( coeff, block, iWidth, iHeight );2275 #endif2276 1526 { 2277 1527 for ( j = 0; j < iHeight; j++ ) … … 2282 1532 return ; 2283 1533 } 2284 #if !UNIFIED_TRANSFORM2285 if (iSize==4)2286 {2287 short block[4][4];2288 short coeff[4][4];2289 2290 for (j=0; j<4; j++)2291 {2292 for (k=0; k<4; k++)2293 {2294 coeff[j][k] = (short)plCoef[j*4+k];2295 }2296 }2297 xITr4(coeff,block,uiMode);2298 for (j=0; j<4; j++)2299 {2300 memcpy(pResidual+j*uiStride,block[j],4*sizeof(short));2301 }2302 }2303 else if (iSize==8)2304 {2305 short block[8][8];2306 short coeff[8][8];2307 2308 for (j=0; j<8; j++)2309 {2310 for (k=0; k<8; k++)2311 {2312 coeff[j][k] = (short)plCoef[j*8+k];2313 }2314 }2315 xITr8(coeff,block);2316 for (j=0; j<8; j++)2317 {2318 memcpy(pResidual+j*uiStride,block[j],8*sizeof(short));2319 }2320 }2321 else if (iSize==16)2322 {2323 short block[16][16];2324 short coeff[16][16];2325 2326 for (j=0; j<16; j++)2327 {2328 for (k=0; k<16; k++)2329 {2330 coeff[j][k] = (short)plCoef[j*16+k];2331 }2332 }2333 xITr16(coeff,block);2334 for (j=0; j<16; j++)2335 {2336 memcpy(pResidual+j*uiStride,block[j],16*sizeof(short));2337 }2338 }2339 2340 else if (iSize==32)2341 {2342 short block[32][32];2343 short coeff[32][32];2344 2345 for (j=0; j<32; j++)2346 {2347 for (k=0; k<32; k++)2348 {2349 coeff[j][k] = (short)plCoef[j*32+k];2350 }2351 }2352 xITr32(coeff,block);2353 for (j=0; j<32; j++)2354 {2355 memcpy(pResidual+j*uiStride,block[j],32*sizeof(short));2356 }2357 }2358 #endif2359 1534 #endif 2360 1535 } … … 2442 1617 ::memset( pdCostCoeff, 0, sizeof(Double) * uiMaxNumCoeff ); 2443 1618 ::memset( pdCostSig, 0, sizeof(Double) * uiMaxNumCoeff ); 2444 #if MULTIBITS_DATA_HIDING2445 1619 Int rateIncUp [ 32 * 32 ]; 2446 1620 Int rateIncDown [ 32 * 32 ]; … … 2451 1625 ::memset( sigRateDelta, 0, sizeof(Int) * uiMaxNumCoeff ); 2452 1626 ::memset( deltaU, 0, sizeof(Int) * uiMaxNumCoeff ); 2453 #endif2454 1627 2455 1628 const UInt * scanCG; … … 2457 1630 { 2458 1631 scanCG = g_auiSigLastScan[ uiScanIdx ][ uiLog2BlkSize > 3 ? uiLog2BlkSize-2-1 : 0 ]; 2459 #if MULTILEVEL_SIGMAP_EXT2460 1632 if( uiLog2BlkSize == 3 ) 2461 1633 { … … 2466 1638 scanCG = g_sigLastScanCG32x32; 2467 1639 } 2468 #endif2469 1640 } 2470 1641 else … … 2486 1657 dTemp = dErrScale; 2487 1658 2488 #if RESTRICT_GR1GR2FLAG_NUMBER2489 1659 UInt c1Idx = 0; 2490 1660 UInt c2Idx = 0; 2491 1661 Int baseLevel; 2492 #endif2493 1662 2494 1663 const UInt * scan; … … 2502 1671 } 2503 1672 2504 #if !MULTILEVEL_SIGMAP_EXT2505 if (blockType < 4)2506 {2507 for( Int iScanPos = (Int) uiMaxNumCoeff-1; iScanPos >= 0; iScanPos-- )2508 {2509 //===== quantization =====2510 UInt uiBlkPos = scan[iScanPos];2511 // set coeff2512 uiQ = piQCoef[uiBlkPos];2513 dTemp = pdErrScale[uiBlkPos];2514 Int lLevelDouble = plSrcCoeff[ uiBlkPos ];2515 lLevelDouble = (Int)min<Int64>(((Int64)abs(lLevelDouble) * uiQ), MAX_INT-(1 << (iQBits - 1)));2516 #if ADAPTIVE_QP_SELECTION2517 if( m_bUseAdaptQpSelect )2518 {2519 piArlDstCoeff[uiBlkPos] = (Int)(( lLevelDouble + iAddC) >> iQBitsC );2520 }2521 #endif2522 UInt uiMaxAbsLevel = (lLevelDouble + (1 << (iQBits - 1))) >> iQBits;2523 uiMaxAbsLevel=plSrcCoeff[ uiBlkPos ]>=0 ? min<UInt>(uiMaxAbsLevel,32767): min<UInt>(uiMaxAbsLevel,32768);2524 Double dErr = Double( lLevelDouble );2525 pdCostCoeff0[ iScanPos ] = dErr * dErr * dTemp;2526 d64BlockUncodedCost += pdCostCoeff0[ iScanPos ];2527 piDstCoeff[ uiBlkPos ] = uiMaxAbsLevel;2528 2529 if ( uiMaxAbsLevel > 0 && iLastScanPos < 0 )2530 {2531 iLastScanPos = iScanPos;2532 #if LEVEL_CTX_LUMA_RED2533 uiCtxSet = (iScanPos < SCAN_SET_SIZE || eTType!=TEXT_LUMA) ? 0 : 2;2534 #else2535 uiCtxSet = iScanPos < SCAN_SET_SIZE ? 0 : 3;2536 uiCtxSet = (iScanPos < SCAN_SET_SIZE || eTType!=TEXT_LUMA) ? 0 : 3;2537 #endif2538 }2539 2540 if ( iLastScanPos >= 0 )2541 {2542 //===== coefficient level estimation =====2543 UInt uiLevel;2544 UInt uiOneCtx = 4 * uiCtxSet + c1;2545 #if RESTRICT_GR1GR2FLAG_NUMBER2546 UInt uiAbsCtx = uiCtxSet + c2;2547 #else2548 UInt uiAbsCtx = 3 * uiCtxSet + c2;2549 #endif2550 2551 if( iScanPos == iLastScanPos )2552 {2553 #if RESTRICT_GR1GR2FLAG_NUMBER2554 uiLevel = xGetCodedLevel( pdCostCoeff[ iScanPos ], pdCostCoeff0[ iScanPos ], pdCostSig[ iScanPos ], lLevelDouble, uiMaxAbsLevel, 0, uiOneCtx, uiAbsCtx, uiGoRiceParam, c1Idx, c2Idx, iQBits, dTemp, 1 );2555 #else2556 uiLevel = xGetCodedLevel( pdCostCoeff[ iScanPos ], pdCostCoeff0[ iScanPos ], pdCostSig[ iScanPos ], lLevelDouble, uiMaxAbsLevel, 0, uiOneCtx, uiAbsCtx, uiGoRiceParam, iQBits, dTemp, 1 );2557 #endif2558 }2559 else2560 {2561 UInt uiPosY = uiBlkPos >> uiLog2BlkSize;2562 UInt uiPosX = uiBlkPos - ( uiPosY << uiLog2BlkSize );2563 UShort uiCtxSig = getSigCtxInc( piDstCoeff, uiPosX, uiPosY, blockType, uiWidth, uiHeight, eTType );2564 #if RESTRICT_GR1GR2FLAG_NUMBER2565 uiLevel = xGetCodedLevel( pdCostCoeff[ iScanPos ], pdCostCoeff0[ iScanPos ], pdCostSig[ iScanPos ], lLevelDouble, uiMaxAbsLevel, uiCtxSig, uiOneCtx, uiAbsCtx, uiGoRiceParam, c1Idx, c2Idx, iQBits, dTemp, 0 );2566 #else2567 uiLevel = xGetCodedLevel( pdCostCoeff[ iScanPos ], pdCostCoeff0[ iScanPos ], pdCostSig[ iScanPos ], lLevelDouble, uiMaxAbsLevel, uiCtxSig, uiOneCtx, uiAbsCtx, uiGoRiceParam, iQBits, dTemp, 0 );2568 #endif2569 #if MULTIBITS_DATA_HIDING2570 sigRateDelta[ uiBlkPos ] = m_pcEstBitsSbac->significantBits[ uiCtxSig ][ 1 ] - m_pcEstBitsSbac->significantBits[ uiCtxSig ][ 0 ];2571 #endif2572 }2573 #if MULTIBITS_DATA_HIDING2574 deltaU[ uiBlkPos ] = (lLevelDouble - ((Int)uiLevel << iQBits)) >> (iQBits-8);2575 if( uiLevel > 0 )2576 {2577 #if RESTRICT_GR1GR2FLAG_NUMBER2578 Int rateNow = xGetICRate( uiLevel, uiOneCtx, uiAbsCtx, uiGoRiceParam, c1Idx, c2Idx );2579 rateIncUp [ uiBlkPos ] = xGetICRate( uiLevel+1, uiOneCtx, uiAbsCtx, uiGoRiceParam, c1Idx, c2Idx ) - rateNow;2580 rateIncDown [ uiBlkPos ] = xGetICRate( uiLevel-1, uiOneCtx, uiAbsCtx, uiGoRiceParam, c1Idx, c2Idx ) - rateNow;2581 #else2582 Int rateNow = xGetICRate( uiLevel, uiOneCtx, uiAbsCtx, uiGoRiceParam );2583 rateIncUp [ uiBlkPos ] = xGetICRate( uiLevel+1, uiOneCtx, uiAbsCtx, uiGoRiceParam ) - rateNow;2584 rateIncDown [ uiBlkPos ] = xGetICRate( uiLevel-1, uiOneCtx, uiAbsCtx, uiGoRiceParam ) - rateNow;2585 #endif2586 }2587 else // uiLevel == 02588 {2589 rateIncUp [ uiBlkPos ] = m_pcEstBitsSbac->m_greaterOneBits[ uiOneCtx ][ 0 ];2590 }2591 #endif2592 piDstCoeff[ uiBlkPos ] = uiLevel;2593 d64BaseCost += pdCostCoeff [ iScanPos ];2594 2595 #if RESTRICT_GR1GR2FLAG_NUMBER2596 baseLevel = (c1Idx < C1FLAG_NUMBER) ? (2 + (c2Idx < C2FLAG_NUMBER)) : 1;2597 if( uiLevel >= baseLevel )2598 {2599 #if EIGHT_BITS_RICE_CODE2600 uiGoRiceParam = g_aauiGoRiceUpdate[ uiGoRiceParam ][ min<UInt>( uiLevel - baseLevel, 23 ) ];2601 #else2602 uiGoRiceParam = g_aauiGoRiceUpdate[ uiGoRiceParam ][ min<UInt>( uiLevel - baseLevel, 15 ) ];2603 #endif2604 }2605 if ( uiLevel >= 1)2606 {2607 c1Idx ++;2608 }2609 #endif2610 2611 //===== update bin model =====2612 if( uiLevel > 1 )2613 {2614 c1 = 0;2615 c2 += (c2 < 2);2616 uiNumOne++;2617 #if RESTRICT_GR1GR2FLAG_NUMBER2618 c2Idx ++;2619 #else2620 if( uiLevel > 2 )2621 {2622 #if EIGHT_BITS_RICE_CODE2623 uiGoRiceParam = g_aauiGoRiceUpdate[ uiGoRiceParam ][ min<UInt>( uiLevel - 3, 23 ) ];2624 #else2625 uiGoRiceParam = g_aauiGoRiceUpdate[ uiGoRiceParam ][ min<UInt>( uiLevel - 3, 15 ) ];2626 #endif2627 }2628 #endif2629 }2630 else if( (c1 < 3) && (c1 > 0) && uiLevel)2631 {2632 c1++;2633 }2634 2635 //===== context set update =====2636 if( ( iScanPos % SCAN_SET_SIZE == 0 ) && ( iScanPos > 0 ) )2637 {2638 c1 = 1;2639 c2 = 0;2640 uiGoRiceParam = 0;2641 2642 #if RESTRICT_GR1GR2FLAG_NUMBER2643 c1Idx = 0;2644 c2Idx = 0;2645 #endif2646 #if LEVEL_CTX_LUMA_RED2647 uiCtxSet = (iScanPos == SCAN_SET_SIZE || eTType!=TEXT_LUMA) ? 0 : 2;2648 #else2649 uiCtxSet = (iScanPos == SCAN_SET_SIZE || eTType!=TEXT_LUMA) ? 0 : 3;2650 #endif2651 if( uiNumOne > 0 )2652 {2653 uiCtxSet++;2654 #if !LEVEL_CTX_LUMA_RED2655 if(uiNumOne > 3 && eTType==TEXT_LUMA)2656 {2657 uiCtxSet++;2658 }2659 #endif2660 }2661 uiNumOne >>= 1;2662 }2663 }2664 else2665 {2666 d64BaseCost += pdCostCoeff0[ iScanPos ];2667 }2668 }2669 }2670 else //(uiLog2BlkSize > 3), for 16x16 and 32x32 TU2671 {2672 #endif2673 1673 ::memset( pdCostCoeffGroupSig, 0, sizeof(Double) * MLS_GRP_NUM ); 2674 1674 ::memset( uiSigCoeffGroupFlag, 0, sizeof(UInt) * MLS_GRP_NUM ); … … 2683 1683 UInt uiCGPosY = uiCGBlkPos / uiNumBlkSide; 2684 1684 UInt uiCGPosX = uiCGBlkPos - (uiCGPosY * uiNumBlkSide); 2685 #if MULTILEVEL_SIGMAP_EXT2686 1685 if( uiWidth == 8 && uiHeight == 8 && (uiScanIdx == SCAN_HOR || uiScanIdx == SCAN_VER) ) 2687 1686 { … … 2689 1688 uiCGPosX = (uiScanIdx == SCAN_VER ? uiCGBlkPos : 0); 2690 1689 } 2691 #endif2692 1690 ::memset( &rdStats, 0, sizeof (coeffGroupRDStats)); 2693 1691 … … 2718 1716 { 2719 1717 iLastScanPos = iScanPos; 2720 #if LEVEL_CTX_LUMA_RED2721 1718 uiCtxSet = (iScanPos < SCAN_SET_SIZE || eTType!=TEXT_LUMA) ? 0 : 2; 2722 #else2723 uiCtxSet = (iScanPos < SCAN_SET_SIZE || eTType!=TEXT_LUMA) ? 0 : 3;2724 #endif2725 1719 iCGLastScanPos = iCGScanPos; 2726 1720 } … … 2731 1725 UInt uiLevel; 2732 1726 UInt uiOneCtx = 4 * uiCtxSet + c1; 2733 #if RESTRICT_GR1GR2FLAG_NUMBER2734 1727 UInt uiAbsCtx = uiCtxSet + c2; 2735 #else2736 UInt uiAbsCtx = 3 * uiCtxSet + c2;2737 #endif2738 1728 2739 1729 if( iScanPos == iLastScanPos ) 2740 1730 { 2741 #if RESTRICT_GR1GR2FLAG_NUMBER2742 1731 uiLevel = xGetCodedLevel( pdCostCoeff[ iScanPos ], pdCostCoeff0[ iScanPos ], pdCostSig[ iScanPos ], 2743 1732 lLevelDouble, uiMaxAbsLevel, 0, uiOneCtx, uiAbsCtx, uiGoRiceParam, 2744 1733 c1Idx, c2Idx, iQBits, dTemp, 1 ); 2745 #else2746 uiLevel = xGetCodedLevel( pdCostCoeff[ iScanPos ], pdCostCoeff0[ iScanPos ], pdCostSig[ iScanPos ],2747 lLevelDouble, uiMaxAbsLevel, 0, uiOneCtx, uiAbsCtx, uiGoRiceParam,2748 iQBits, dTemp, 1 );2749 #endif2750 1734 } 2751 1735 else … … 2754 1738 UInt uiPosX = uiBlkPos - ( uiPosY << uiLog2BlkSize ); 2755 1739 UShort uiCtxSig = getSigCtxInc( piDstCoeff, uiPosX, uiPosY, blockType, uiWidth, uiHeight, eTType ); 2756 #if RESTRICT_GR1GR2FLAG_NUMBER2757 1740 uiLevel = xGetCodedLevel( pdCostCoeff[ iScanPos ], pdCostCoeff0[ iScanPos ], pdCostSig[ iScanPos ], 2758 1741 lLevelDouble, uiMaxAbsLevel, uiCtxSig, uiOneCtx, uiAbsCtx, uiGoRiceParam, 2759 1742 c1Idx, c2Idx, iQBits, dTemp, 0 ); 2760 #else2761 uiLevel = xGetCodedLevel( pdCostCoeff[ iScanPos ], pdCostCoeff0[ iScanPos ], pdCostSig[ iScanPos ],2762 lLevelDouble, uiMaxAbsLevel, uiCtxSig, uiOneCtx, uiAbsCtx, uiGoRiceParam,2763 iQBits, dTemp, 0 );2764 #endif2765 #if MULTIBITS_DATA_HIDING2766 1743 sigRateDelta[ uiBlkPos ] = m_pcEstBitsSbac->significantBits[ uiCtxSig ][ 1 ] - m_pcEstBitsSbac->significantBits[ uiCtxSig ][ 0 ]; 2767 #endif2768 1744 } 2769 #if MULTIBITS_DATA_HIDING2770 1745 deltaU[ uiBlkPos ] = (lLevelDouble - ((Int)uiLevel << iQBits)) >> (iQBits-8); 2771 1746 if( uiLevel > 0 ) 2772 1747 { 2773 #if RESTRICT_GR1GR2FLAG_NUMBER2774 1748 Int rateNow = xGetICRate( uiLevel, uiOneCtx, uiAbsCtx, uiGoRiceParam, c1Idx, c2Idx ); 2775 1749 rateIncUp [ uiBlkPos ] = xGetICRate( uiLevel+1, uiOneCtx, uiAbsCtx, uiGoRiceParam, c1Idx, c2Idx ) - rateNow; 2776 1750 rateIncDown [ uiBlkPos ] = xGetICRate( uiLevel-1, uiOneCtx, uiAbsCtx, uiGoRiceParam, c1Idx, c2Idx ) - rateNow; 2777 #else2778 Int rateNow = xGetICRate( uiLevel, uiOneCtx, uiAbsCtx, uiGoRiceParam );2779 rateIncUp [ uiBlkPos ] = xGetICRate( uiLevel+1, uiOneCtx, uiAbsCtx, uiGoRiceParam ) - rateNow;2780 rateIncDown [ uiBlkPos ] = xGetICRate( uiLevel-1, uiOneCtx, uiAbsCtx, uiGoRiceParam ) - rateNow;2781 #endif2782 1751 } 2783 1752 else // uiLevel == 0 … … 2785 1754 rateIncUp [ uiBlkPos ] = m_pcEstBitsSbac->m_greaterOneBits[ uiOneCtx ][ 0 ]; 2786 1755 } 2787 #endif2788 1756 piDstCoeff[ uiBlkPos ] = uiLevel; 2789 1757 d64BaseCost += pdCostCoeff [ iScanPos ]; 2790 1758 2791 1759 2792 #if RESTRICT_GR1GR2FLAG_NUMBER2793 1760 baseLevel = (c1Idx < C1FLAG_NUMBER) ? (2 + (c2Idx < C2FLAG_NUMBER)) : 1; 2794 1761 if( uiLevel >= baseLevel ) 2795 1762 { 2796 #if EIGHT_BITS_RICE_CODE2797 1763 uiGoRiceParam = g_aauiGoRiceUpdate[ uiGoRiceParam ][ min<UInt>( uiLevel - baseLevel , 23 ) ]; 2798 #else2799 uiGoRiceParam = g_aauiGoRiceUpdate[ uiGoRiceParam ][ min<UInt>( uiLevel - baseLevel, 15 ) ];2800 #endif2801 1764 } 2802 1765 if ( uiLevel >= 1) … … 2804 1767 c1Idx ++; 2805 1768 } 2806 #endif2807 1769 2808 1770 //===== update bin model ===== … … 2812 1774 c2 += (c2 < 2); 2813 1775 uiNumOne++; 2814 #if RESTRICT_GR1GR2FLAG_NUMBER2815 1776 c2Idx ++; 2816 #else2817 if( uiLevel > 2 )2818 {2819 #if EIGHT_BITS_RICE_CODE2820 uiGoRiceParam = g_aauiGoRiceUpdate[ uiGoRiceParam ][ min<UInt>( uiLevel - 3, 23 ) ];2821 #else2822 uiGoRiceParam = g_aauiGoRiceUpdate[ uiGoRiceParam ][ min<UInt>( uiLevel - 3, 15 ) ];2823 #endif2824 }2825 #endif2826 1777 } 2827 1778 else if( (c1 < 3) && (c1 > 0) && uiLevel) … … 2837 1788 uiGoRiceParam = 0; 2838 1789 2839 #if RESTRICT_GR1GR2FLAG_NUMBER2840 1790 c1Idx = 0; 2841 1791 c2Idx = 0; 2842 #endif2843 #if LEVEL_CTX_LUMA_RED2844 1792 uiCtxSet = (iScanPos == SCAN_SET_SIZE || eTType!=TEXT_LUMA) ? 0 : 2; 2845 #else2846 uiCtxSet = (iScanPos == SCAN_SET_SIZE || eTType!=TEXT_LUMA) ? 0 : 3;2847 #endif2848 1793 if( uiNumOne > 0 ) 2849 1794 { 2850 1795 uiCtxSet++; 2851 #if !LEVEL_CTX_LUMA_RED2852 if( uiNumOne > 3 && eTType==TEXT_LUMA)2853 {2854 uiCtxSet++;2855 }2856 #endif2857 1796 } 2858 1797 uiNumOne >>= 1; … … 2882 1821 if (iCGLastScanPos >= 0) 2883 1822 { 2884 #if REMOVE_INFER_SIGGRP2885 1823 if( iCGScanPos ) 2886 #else2887 #if MULTILEVEL_SIGMAP_EXT2888 if ( !bothCGNeighboursOne( uiSigCoeffGroupFlag, uiCGPosX, uiCGPosY, uiScanIdx, uiWidth, uiHeight ) && (iCGScanPos != 0) )2889 #else2890 if ( !bothCGNeighboursOne( uiSigCoeffGroupFlag, uiCGPosX, uiCGPosY, uiWidth, uiHeight ) && (iCGScanPos != 0) )2891 #endif2892 #endif2893 1824 { 2894 1825 if (uiSigCoeffGroupFlag[ uiCGBlkPos ] == 0) 2895 1826 { 2896 #if MULTILEVEL_SIGMAP_EXT2897 1827 UInt uiCtxSig = getSigCoeffGroupCtxInc( uiSigCoeffGroupFlag, uiCGPosX, uiCGPosY, uiScanIdx, uiWidth, uiHeight); 2898 #else2899 UInt uiCtxSig = getSigCoeffGroupCtxInc( uiSigCoeffGroupFlag, uiCGPosX, uiCGPosY, uiWidth, uiHeight);2900 #endif2901 1828 d64BaseCost += xGetRateSigCoeffGroup(0, uiCtxSig) - rdStats.d64SigCost;; 2902 1829 pdCostCoeffGroupSig[ iCGScanPos ] = xGetRateSigCoeffGroup(0, uiCtxSig); … … 2915 1842 2916 1843 // add SigCoeffGroupFlag cost to total cost 2917 #if MULTILEVEL_SIGMAP_EXT2918 1844 UInt uiCtxSig = getSigCoeffGroupCtxInc( uiSigCoeffGroupFlag, uiCGPosX, uiCGPosY, uiScanIdx, uiWidth, uiHeight); 2919 #else2920 UInt uiCtxSig = getSigCoeffGroupCtxInc( uiSigCoeffGroupFlag, uiCGPosX, uiCGPosY, uiWidth, uiHeight);2921 #endif2922 1845 if (iCGScanPos < iCGLastScanPos) 2923 1846 { … … 2958 1881 } // end if if (uiSigCoeffGroupFlag[ uiCGBlkPos ] == 0) 2959 1882 } 2960 #if REMOVE_INFER_SIGGRP2961 1883 else 2962 1884 { 2963 1885 uiSigCoeffGroupFlag[ uiCGBlkPos ] = 1; 2964 1886 } 2965 #else2966 else // if ( !bothCGNeighboursOne( uiSigCoeffGroupFlag, uiCGPosX, uiCGPosY ) && (uiCGScanPos != 0) && (uiSigCoeffGroupFlag[ uiCGBlkPos ] != 0) )2967 {2968 uiSigCoeffGroupFlag[ uiCGBlkPos ] = 1;2969 } // end if ( !bothCGNeighboursOne( uiSigCoeffGroupFlag, uiCGPosX, uiCGPosY ) && (uiCGScanPos != 0) && (uiSigCoeffGroupFlag[ uiCGBlkPos ] != 0) )2970 #endif2971 1887 } 2972 1888 } //end for (iCGScanPos) 2973 #if !MULTILEVEL_SIGMAP_EXT2974 }2975 #endif2976 1889 2977 1890 //===== estimate last position ===== … … 2998 1911 } 2999 1912 3000 #if !MULTILEVEL_SIGMAP_EXT3001 if (blockType < 4)3002 {3003 for( Int iScanPos = iLastScanPos; iScanPos >= 0; iScanPos-- )3004 {3005 UInt uiBlkPos = scan[iScanPos];3006 if( piDstCoeff[ uiBlkPos ] )3007 {3008 UInt uiPosY = uiBlkPos >> uiLog2BlkSize;3009 UInt uiPosX = uiBlkPos - ( uiPosY << uiLog2BlkSize );3010 Double d64CostLast= uiScanIdx == SCAN_VER ? xGetRateLast( uiPosY, uiPosX, uiWidth ) : xGetRateLast( uiPosX, uiPosY, uiWidth );3011 Double totalCost = d64BaseCost + d64CostLast - pdCostSig[ iScanPos ];3012 if( totalCost < d64BestCost )3013 {3014 iBestLastIdxP1 = iScanPos + 1;3015 d64BestCost = totalCost;3016 }3017 if( piDstCoeff[ uiBlkPos ] > 1 )3018 {3019 break;3020 }3021 d64BaseCost -= pdCostCoeff[ iScanPos ];3022 d64BaseCost += pdCostCoeff0[ iScanPos ];3023 }3024 else3025 {3026 d64BaseCost -= pdCostSig[ iScanPos ];3027 }3028 }3029 }3030 else //if (uiLog2BlkSize < 4)3031 {3032 #endif3033 1913 Bool bFoundLast = false; 3034 1914 for (Int iCGScanPos = iCGLastScanPos; iCGScanPos >= 0; iCGScanPos--) … … 3041 1921 for (Int iScanPosinCG = uiCGSize-1; iScanPosinCG >= 0; iScanPosinCG--) 3042 1922 { 3043 #if MULTILEVEL_SIGMAP_EXT3044 1923 iScanPos = iCGScanPos*uiCGSize + iScanPosinCG; 3045 #else3046 Int iScanPos = iCGScanPos*uiCGSize + iScanPosinCG;3047 #endif3048 1924 if (iScanPos > iLastScanPos) continue; 3049 1925 UInt uiBlkPos = scan[iScanPos]; … … 3081 1957 } // end if (uiSigCoeffGroupFlag[ uiCGBlkPos ]) 3082 1958 } // end for 3083 #if !MULTILEVEL_SIGMAP_EXT3084 } //if (uiLog2BlkSize < 4)3085 #endif3086 1959 3087 1960 for ( Int scanPos = 0; scanPos < iBestLastIdxP1; scanPos++ ) … … 3099 1972 } 3100 1973 3101 #if MULTIBITS_DATA_HIDING3102 1974 if( pcCU->getSlice()->getPPS()->getSignHideFlag() && uiAbsSum>=2) 3103 1975 { … … 3226 2098 } 3227 2099 } 3228 #endif3229 2100 } 3230 2101 … … 3311 2182 const TCoeff *pData = pcCoeff + posX + posY * width; 3312 2183 3313 #if !SIGMAP_CTX_SUBBLOCK3314 Int thred = std::max(height, width) >> 2;3315 #endif3316 2184 3317 2185 Int cnt = 0; … … 3341 2209 3342 2210 cnt = ( cnt + 1 ) >> 1; 3343 #if SIGMAP_CTX_SUBBLOCK3344 2211 return (( textureType == TEXT_LUMA && ((posX>>2) + (posY>>2)) > 0 ) ? 4 : 1) + offset + cnt; 3345 #else3346 return (( textureType == TEXT_LUMA && posX + posY >= thred ) ? 4 : 1) + offset + cnt;3347 #endif3348 2212 } 3349 2213 … … 3373 2237 UShort ui16CtxNumAbs, 3374 2238 UShort ui16AbsGoRice, 3375 #if RESTRICT_GR1GR2FLAG_NUMBER3376 2239 UInt c1Idx, 3377 2240 UInt c2Idx, 3378 #endif3379 2241 Int iQBits, 3380 2242 Double dTemp, … … 3407 2269 { 3408 2270 Double dErr = Double( lLevelDouble - ( uiAbsLevel << iQBits ) ); 3409 #if RESTRICT_GR1GR2FLAG_NUMBER3410 2271 Double dCurrCost = dErr * dErr * dTemp + xGetICRateCost( uiAbsLevel, ui16CtxNumOne, ui16CtxNumAbs, ui16AbsGoRice, c1Idx, c2Idx ); 3411 #else3412 Double dCurrCost = dErr * dErr * dTemp + xGetICRateCost( uiAbsLevel, ui16CtxNumOne, ui16CtxNumAbs, ui16AbsGoRice );3413 #endif3414 2272 dCurrCost += dCurrCostSig; 3415 2273 … … 3436 2294 UShort ui16CtxNumAbs, 3437 2295 UShort ui16AbsGoRice 3438 #if RESTRICT_GR1GR2FLAG_NUMBER3439 2296 , UInt c1Idx, 3440 2297 UInt c2Idx 3441 #endif3442 2298 ) const 3443 2299 { 3444 2300 Double iRate = xGetIEPRate(); 3445 #if RESTRICT_GR1GR2FLAG_NUMBER3446 2301 UInt baseLevel = (c1Idx < C1FLAG_NUMBER)? (2 + (c2Idx < C2FLAG_NUMBER)) : 1; 3447 2302 … … 3476 2331 } 3477 2332 else 3478 #endif3479 2333 if( uiAbsLevel == 1 ) 3480 2334 { … … 3488 2342 else 3489 2343 { 3490 #if RESTRICT_GR1GR2FLAG_NUMBER3491 2344 assert (0); 3492 #else 3493 UInt uiSymbol = uiAbsLevel - 3; 2345 } 2346 return xGetICost( iRate ); 2347 } 2348 2349 __inline Int TComTrQuant::xGetICRate ( UInt uiAbsLevel, 2350 UShort ui16CtxNumOne, 2351 UShort ui16CtxNumAbs, 2352 UShort ui16AbsGoRice 2353 , UInt c1Idx, 2354 UInt c2Idx 2355 ) const 2356 { 2357 Int iRate = 0; 2358 UInt baseLevel = (c1Idx < C1FLAG_NUMBER)? (2 + (c2Idx < C2FLAG_NUMBER)) : 1; 2359 2360 if ( uiAbsLevel >= baseLevel ) 2361 { 2362 UInt uiSymbol = uiAbsLevel - baseLevel; 3494 2363 UInt uiMaxVlc = g_auiGoRiceRange[ ui16AbsGoRice ]; 3495 2364 Bool bExpGolomb = ( uiSymbol > uiMaxVlc ); … … 3507 2376 3508 2377 iRate += ui16NumBins << 15; 3509 iRate += m_pcEstBitsSbac->m_greaterOneBits[ ui16CtxNumOne ][ 1 ];3510 iRate += m_pcEstBitsSbac->m_levelAbsBits[ ui16CtxNumAbs ][ 1 ];3511 #endif3512 }3513 return xGetICost( iRate );3514 }3515 3516 #if MULTIBITS_DATA_HIDING3517 __inline Int TComTrQuant::xGetICRate ( UInt uiAbsLevel,3518 UShort ui16CtxNumOne,3519 UShort ui16CtxNumAbs,3520 UShort ui16AbsGoRice3521 #if RESTRICT_GR1GR2FLAG_NUMBER3522 , UInt c1Idx,3523 UInt c2Idx3524 #endif3525 ) const3526 {3527 Int iRate = 0;3528 #if RESTRICT_GR1GR2FLAG_NUMBER3529 UInt baseLevel = (c1Idx < C1FLAG_NUMBER)? (2 + (c2Idx < C2FLAG_NUMBER)) : 1;3530 3531 if ( uiAbsLevel >= baseLevel )3532 {3533 UInt uiSymbol = uiAbsLevel - baseLevel;3534 UInt uiMaxVlc = g_auiGoRiceRange[ ui16AbsGoRice ];3535 Bool bExpGolomb = ( uiSymbol > uiMaxVlc );3536 3537 if( bExpGolomb )3538 {3539 uiAbsLevel = uiSymbol - uiMaxVlc;3540 int iEGS = 1; for( UInt uiMax = 2; uiAbsLevel >= uiMax; uiMax <<= 1, iEGS += 2 );3541 iRate += iEGS << 15;3542 uiSymbol = min<UInt>( uiSymbol, ( uiMaxVlc + 1 ) );3543 }3544 3545 UShort ui16PrefLen = UShort( uiSymbol >> ui16AbsGoRice ) + 1;3546 UShort ui16NumBins = min<UInt>( ui16PrefLen, g_auiGoRicePrefixLen[ ui16AbsGoRice ] ) + ui16AbsGoRice;3547 3548 iRate += ui16NumBins << 15;3549 2378 3550 2379 if (c1Idx < C1FLAG_NUMBER) … … 3559 2388 } 3560 2389 else 3561 #endif3562 2390 if( uiAbsLevel == 0 ) 3563 2391 { … … 3575 2403 else 3576 2404 { 3577 #if RESTRICT_GR1GR2FLAG_NUMBER3578 2405 assert(0); 3579 #else3580 UInt uiSymbol = uiAbsLevel - 3;3581 UInt uiMaxVlc = g_auiGoRiceRange[ ui16AbsGoRice ];3582 Bool bExpGolomb = ( uiSymbol > uiMaxVlc );3583 3584 if( bExpGolomb )3585 {3586 uiAbsLevel = uiSymbol - uiMaxVlc;3587 int iEGS = 1; for( UInt uiMax = 2; uiAbsLevel >= uiMax; uiMax <<= 1, iEGS += 2 );3588 iRate += iEGS << 15;3589 uiSymbol = min<UInt>( uiSymbol, ( uiMaxVlc + 1 ) );3590 }3591 3592 UShort ui16PrefLen = UShort( uiSymbol >> ui16AbsGoRice ) + 1;3593 UShort ui16NumBins = min<UInt>( ui16PrefLen, g_auiGoRicePrefixLen[ ui16AbsGoRice ] ) + ui16AbsGoRice;3594 3595 iRate += ui16NumBins << 15;3596 iRate += m_pcEstBitsSbac->m_greaterOneBits[ ui16CtxNumOne ][ 1 ];3597 iRate += m_pcEstBitsSbac->m_levelAbsBits[ ui16CtxNumAbs ][ 1 ];3598 #endif3599 2406 } 3600 2407 return iRate; 3601 2408 } 3602 #endif3603 2409 3604 2410 __inline Double TComTrQuant::xGetRateSigCoeffGroup ( UShort uiSignificanceCoeffGroup, … … 3674 2480 const UInt uiCGPosX, 3675 2481 const UInt uiCGPosY, 3676 #if MULTILEVEL_SIGMAP_EXT3677 2482 const UInt scanIdx, 3678 #endif3679 2483 Int width, Int height) 3680 2484 { … … 3684 2488 width >>= 2; 3685 2489 height >>= 2; 3686 #if MULTILEVEL_SIGMAP_EXT3687 2490 if( width == 2 && height == 2 ) // 8x8 3688 2491 { … … 3698 2501 } 3699 2502 } 3700 #endif3701 2503 if( uiCGPosX < width - 1 ) 3702 2504 { … … 3707 2509 uiLower = (uiSigCoeffGroupFlag[ (uiCGPosY + 1 ) * width + uiCGPosX ] != 0); 3708 2510 } 3709 #if REMOVE_INFER_SIGGRP3710 2511 return (uiRight || uiLower); 3711 #else 3712 return uiRight + uiLower; 3713 #endif 3714 3715 } 3716 #if !REMOVE_INFER_SIGGRP 3717 // return 1 if both right neighbour and lower neighour are 1's 3718 Bool TComTrQuant::bothCGNeighboursOne ( const UInt* uiSigCoeffGroupFlag, 3719 const UInt uiCGPosX, 3720 const UInt uiCGPosY, 3721 #if MULTILEVEL_SIGMAP_EXT 3722 const UInt scanIdx, 3723 #endif 3724 Int width, Int height) 3725 { 3726 UInt uiRight = 0; 3727 UInt uiLower = 0; 3728 3729 width >>= 2; 3730 height >>= 2; 3731 #if MULTILEVEL_SIGMAP_EXT 3732 if( width == 2 && height == 2 ) // 8x8 3733 { 3734 if( scanIdx == SCAN_HOR ) 3735 { 3736 width = 1; 3737 height = 4; 3738 } 3739 else if( scanIdx == SCAN_VER ) 3740 { 3741 width = 4; 3742 height = 1; 3743 } 3744 } 3745 #endif 3746 if( uiCGPosX < width - 1 ) 3747 { 3748 uiRight = (uiSigCoeffGroupFlag[ uiCGPosY * width + uiCGPosX + 1 ] != 0); 3749 } 3750 if (uiCGPosY < height - 1 ) 3751 { 3752 uiLower = (uiSigCoeffGroupFlag[ (uiCGPosY + 1 ) * width + uiCGPosX ] != 0); 3753 } 3754 3755 return (uiRight & uiLower); 3756 } 3757 #endif 2512 2513 } 3758 2514 /** set quantized matrix coefficient for encode 3759 2515 * \param scalingList quantaized matrix address … … 3842 2598 UInt width = g_scalingListSizeX[sizeId]; 3843 2599 UInt height = g_scalingListSizeX[sizeId]; 3844 #if SCALING_LIST3845 2600 UInt ratio = g_scalingListSizeX[sizeId]/min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]); 3846 #endif3847 2601 Int *quantcoeff; 3848 2602 Int *coeff = scalingList->getScalingListAddress(sizeId,listId); 3849 2603 quantcoeff = getQuantCoeff(listId, qp, sizeId, SCALING_LIST_SQT); 3850 2604 3851 #if SCALING_LIST3852 2605 processScalingListEnc(coeff,quantcoeff,g_quantScales[qp]<<4,height,width,ratio,min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]),scalingList->getScalingListDC(sizeId,listId)); 3853 #else3854 processScalingListEnc(coeff,quantcoeff,g_quantScales[qp]<<4,height,width,1,(Int)g_scalingListSizeX[sizeId],0);3855 #endif3856 2606 3857 2607 if(sizeId == SCALING_LIST_32x32 || sizeId == SCALING_LIST_16x16) //for NSQT 3858 2608 { 3859 2609 quantcoeff = getQuantCoeff(listId, qp, sizeId-1,SCALING_LIST_VER); 3860 #if SCALING_LIST3861 2610 processScalingListEnc(coeff,quantcoeff,g_quantScales[qp]<<4,height,width>>2,ratio,min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]),scalingList->getScalingListDC(sizeId,listId)); 3862 #else3863 processScalingListEnc(coeff,quantcoeff,g_quantScales[qp]<<4,height,width>>2,1,(Int)g_scalingListSizeX[sizeId],0);3864 #endif3865 2611 3866 2612 quantcoeff = getQuantCoeff(listId, qp, sizeId-1,SCALING_LIST_HOR); 3867 #if SCALING_LIST3868 2613 processScalingListEnc(coeff,quantcoeff,g_quantScales[qp]<<4,height>>2,width,ratio,min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]),scalingList->getScalingListDC(sizeId,listId)); 3869 #else3870 processScalingListEnc(coeff,quantcoeff,g_quantScales[qp]<<4,height>>2,width,1,(Int)g_scalingListSizeX[sizeId],0);3871 #endif3872 2614 } 3873 2615 } … … 3882 2624 UInt width = g_scalingListSizeX[sizeId]; 3883 2625 UInt height = g_scalingListSizeX[sizeId]; 3884 #if SCALING_LIST3885 2626 UInt ratio = g_scalingListSizeX[sizeId]/min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]); 3886 #endif3887 2627 Int *dequantcoeff; 3888 2628 Int *coeff = scalingList->getScalingListAddress(sizeId,listId); 3889 2629 3890 2630 dequantcoeff = getDequantCoeff(listId, qp, sizeId,SCALING_LIST_SQT); 3891 #if SCALING_LIST3892 2631 processScalingListDec(coeff,dequantcoeff,g_invQuantScales[qp],height,width,ratio,min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]),scalingList->getScalingListDC(sizeId,listId)); 3893 #else3894 processScalingListDec(coeff,dequantcoeff,g_invQuantScales[qp],height,width,1,(Int)g_scalingListSizeX[sizeId],0);3895 #endif3896 2632 3897 2633 if(sizeId == SCALING_LIST_32x32 || sizeId == SCALING_LIST_16x16) 3898 2634 { 3899 2635 dequantcoeff = getDequantCoeff(listId, qp, sizeId-1,SCALING_LIST_VER); 3900 #if SCALING_LIST3901 2636 processScalingListDec(coeff,dequantcoeff,g_invQuantScales[qp],height,width>>2,ratio,min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]),scalingList->getScalingListDC(sizeId,listId)); 3902 #else3903 processScalingListDec(coeff,dequantcoeff,g_invQuantScales[qp],height,width>>2,1,(Int)g_scalingListSizeX[sizeId],0);3904 #endif3905 2637 3906 2638 dequantcoeff = getDequantCoeff(listId, qp, sizeId-1,SCALING_LIST_HOR); 3907 2639 3908 #if SCALING_LIST3909 2640 processScalingListDec(coeff,dequantcoeff,g_invQuantScales[qp],height>>2,width,ratio,min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]),scalingList->getScalingListDC(sizeId,listId)); 3910 #else3911 processScalingListDec(coeff,dequantcoeff,g_invQuantScales[qp],height>>2,width,1,min(MAX_MATRIX_SIZE_NUM,(Int)g_scalingListSizeX[sizeId]),0);3912 #endif3913 2641 } 3914 2642 } … … 4004 2732 } 4005 2733 } 4006 #if SCALING_LIST4007 2734 if(ratio > 1) 4008 2735 { 4009 2736 quantcoeff[0] = quantScales / dc; 4010 2737 } 4011 #endif4012 2738 } 4013 2739 /** set quantized matrix coefficient for decode … … 4032 2758 } 4033 2759 } 4034 #if SCALING_LIST4035 2760 if(ratio > 1) 4036 2761 { 4037 2762 dequantcoeff[0] = invQuantScales * dc; 4038 2763 } 4039 #endif4040 2764 } 4041 2765 -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TComTrQuant.h
r56 r294 89 89 Int m_iBits; 90 90 91 #if H0736_AVC_STYLE_QP_RANGE92 91 Void setQpParam( Int qpScaled, Bool bLowpass, SliceType eSliceType ) 93 92 { … … 97 96 m_iBits = QP_BITS + m_iPer; 98 97 } 99 #else100 Void setQpParam( Int iQP, Bool bLowpass, SliceType eSliceType )101 {102 assert ( iQP >= MIN_QP && iQP <= MAX_QP );103 m_iQP = iQP;104 105 m_iPer = (iQP + 6*g_uiBitIncrement)/6;106 #if FULL_NBIT107 m_iPer += g_uiBitDepth - 8;108 #endif109 m_iRem = iQP % 6;110 111 m_iBits = QP_BITS + m_iPer;112 }113 #endif114 98 115 99 Void clear() … … 165 149 166 150 // Misc functions 167 #if H0736_AVC_STYLE_QP_RANGE168 151 Void setQPforQuant( Int qpy, Bool bLowpass, SliceType eSliceType, TextType eTxtType, Int qpBdOffset, Int chromaQPOffset); 169 #else170 Void setQPforQuant( Int iQP, Bool bLowpass, SliceType eSliceType, TextType eTxtType, Int Shift);171 #endif172 152 173 153 #if RDOQ_CHROMA_LAMBDA … … 192 172 const UInt uiCGPosX, 193 173 const UInt uiCGPosY, 194 #if MULTILEVEL_SIGMAP_EXT195 174 const UInt scanIdx, 196 #endif197 175 Int width, Int height); 198 #if !REMOVE_INFER_SIGGRP199 static Bool bothCGNeighboursOne ( const UInt* uiSigCoeffGroupFlag,200 const UInt uiCGPosX,201 const UInt uiCGPosY,202 #if MULTILEVEL_SIGMAP_EXT203 const UInt scanIdx,204 #endif205 Int width, Int height);206 #endif207 176 Void initScalingList (); 208 177 Void destroyScalingList (); … … 259 228 Void xT ( UInt uiMode,Pel* pResidual, UInt uiStride, Int* plCoeff, Int iWidth, Int iHeight ); 260 229 261 #if MULTIBITS_DATA_HIDING262 230 Void signBitHidingHDQ( TComDataCU* pcCU, TCoeff* pQCoef, TCoeff* pCoef, UInt const *scan, Int* deltaU, Int width, Int height ); 263 #endif264 231 265 232 // quantization … … 298 265 UShort ui16CtxNumAbs, 299 266 UShort ui16AbsGoRice, 300 #if RESTRICT_GR1GR2FLAG_NUMBER301 267 UInt c1Idx, 302 268 UInt c2Idx, 303 #endif304 269 Int iQBits, 305 270 Double dTemp, … … 309 274 UShort ui16CtxNumAbs, 310 275 UShort ui16AbsGoRice 311 #if RESTRICT_GR1GR2FLAG_NUMBER312 276 , UInt c1Idx, 313 277 UInt c2Idx 314 #endif315 278 ) const; 316 #if MULTIBITS_DATA_HIDING317 279 __inline Int xGetICRate ( UInt uiAbsLevel, 318 280 UShort ui16CtxNumOne, 319 281 UShort ui16CtxNumAbs, 320 282 UShort ui16AbsGoRice 321 #if RESTRICT_GR1GR2FLAG_NUMBER322 283 , UInt c1Idx, 323 284 UInt c2Idx 324 #endif325 285 ) const; 326 #endif327 286 __inline Double xGetRateLast ( const UInt uiPosX, 328 287 const UInt uiPosY, -
branches/HTM-5.1-dev0/source/Lib/TLibCommon/TypeDef.h
r293 r294 257 257 ///// ***** HM 6.1 ********* 258 258 259 // REMOVED HM 6.1 Macros 259 //// REMOVED HM 6.1 Guard macros 260 /* 260 261 #define SKIPFRAME_BUGFIX 1 ///< bug fix to enable skipFrame at decoder 261 262 #define START_DECODING_AT_CRA 1 ///< H0496, start decoding at clear random access point … … 319 320 #define COMPLETE_SLICES_IN_TILE 1 // Among the constraints between slices and tiles, all slices within a tile shall be complete (JCTVC-H0348/JCTVC-H0463) for SliceMode 1&2 320 321 #define WPP_SIMPLIFICATION 1 // JCTVC-H0349/JCTVC-0517 321 322 */ 322 323 323 324 … … 329 330 #define LOG2_PARALLEL_MERGE_LEVEL_MINUS2 0 //< H0082 parallel merge level 0-> 4x4, 1-> 8x8, 2->16x16, 3->32x32, 4->64x64 330 331 331 #if PARALLEL_MERGE &&LOG2_PARALLEL_MERGE_LEVEL_MINUS2332 #if LOG2_PARALLEL_MERGE_LEVEL_MINUS2 332 333 #define CU_BASED_MRG_CAND_LIST 1 //< H0240: single merge candidate list for all PUs inside a 8x8 CU conditioned on LOG2_PARALLEL_MERGE_LEVEL_MINUS2 > 0 333 334 #define FIX_CU_BASED_MRG_CAND_LIST_B0136 1 //< B0136 bug fix for CU_BASED_MRG_CAND_LIST … … 337 338 #define SIGMAP_CONST_AT_HIGH_FREQUENCY 1 ///< H0095 method2.1: const significance map at high freaquency 338 339 339 #if RESTRICT_GR1GR2FLAG_NUMBER //340 340 #define C1FLAG_NUMBER 8 // maximum number of largerThan1 flag coded in one chunk : 16 in HM5 341 341 #define C2FLAG_NUMBER 1 // maximum number of largerThan2 flag coded in one chunk: 16 in HM5 342 #endif343 342 344 343 #define REMOVE_SAO_LCU_ENC_CONSTRAINTS_1 0 ///< disable the encoder constraint that does not test SAO/BO mode for chroma in interleaved mode … … 391 390 392 391 393 #if !H0137_0138_LIST_MODIFICATION394 #error "H0137_0138_LIST_MODIFICATION must be enabled for multi-view coding."395 #endif396 392 397 393 #define VERBOSE_RATE 0 ///< Print additional rate information in encoder … … 475 471 476 472 #define PLANAR_IDX 0 477 #if LOGI_INTRA_NAME_3MPM478 473 #define VER_IDX 26 // index for intra VERTICAL mode 479 474 #define HOR_IDX 10 // index for intra HORIZONTAL mode 480 475 #define DC_IDX 1 // index for intra DC mode 481 #else482 #define DC_IDX 3 // index for intra DC mode483 #endif484 476 #define NUM_CHROMA_MODE 6 // total number of chroma modes 485 477 #define DM_CHROMA_IDX 36 // chroma mode index for derived from luma intra mode … … 495 487 #define AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE 1 ///< OPTION IDENTIFIER. mode==1 -> Limit maximum number of largest coding tree blocks in a slice 496 488 #define AD_HOC_SLICES_FIXED_NUMBER_OF_BYTES_IN_SLICE 2 ///< OPTION IDENTIFIER. mode==2 -> Limit maximum number of bins/bits in a slice 497 #if FIXED_NUMBER_OF_TILES_SLICE_MODE498 489 #define AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE 3 499 #endif500 490 501 491 // Entropy slice options … … 521 511 522 512 #define SCALING_LIST_OUTPUT_RESULT 0 //JCTVC-G880/JCTVC-G1016 quantization matrices 523 #if H0566_TLA524 513 #define H0566_TLA_SET_FOR_SWITCHING_POINTS 1 525 #endif526 514 527 515 … … 609 597 { 610 598 SAO_EO_LEN = 4, 611 #if SAO_UNIT_INTERLEAVING612 599 SAO_BO_LEN = 4, 613 600 SAO_MAX_BO_CLASSES = 32 614 #else615 SAO_BO_LEN = 16616 #endif617 601 }; 618 602 … … 623 607 SAO_EO_2, 624 608 SAO_EO_3, 625 #if SAO_UNIT_INTERLEAVING626 609 SAO_BO, 627 #else628 SAO_BO_0,629 SAO_BO_1,630 #endif631 610 MAX_NUM_SAO_TYPE 632 611 }; … … 634 613 typedef struct _SaoQTPart 635 614 { 636 #if !SAO_UNIT_INTERLEAVING637 Bool bEnableFlag;638 #endif639 615 Int iBestType; 640 616 Int iLength; 641 #if SAO_UNIT_INTERLEAVING642 617 Int bandPosition ; 643 618 Int iOffset[4]; 644 #else645 Int iOffset[32];646 #endif647 619 Int StartCUX; 648 620 Int StartCUY; … … 668 640 } SAOQTPart; 669 641 670 #if SAO_UNIT_INTERLEAVING671 642 typedef struct _SaoLcuParam 672 643 { … … 682 653 Int length; 683 654 } SaoLcuParam; 684 #endif685 655 686 656 struct SAOParam … … 690 660 Int iMaxSplitLevel; 691 661 Int iNumClass[MAX_NUM_SAO_TYPE]; 692 #if SAO_UNIT_INTERLEAVING693 662 Bool oneUnitFlag[3]; 694 663 SaoLcuParam* saoLcuParam[3]; 695 664 Int numCuInHeight; 696 665 Int numCuInWidth; 697 #endif698 666 ~SAOParam(); 699 667 }; … … 702 670 { 703 671 Int alf_flag; ///< indicates use of ALF 704 #if !LCU_SYNTAX_ALF705 Int chroma_idc; ///< indicates use of ALF for chroma706 #endif707 672 Int num_coeff; ///< number of filter coefficients 708 673 Int filter_shape; 709 #if !LCU_SYNTAX_ALF710 Int filter_shape_chroma;711 Int num_coeff_chroma; ///< number of filter coefficients (chroma)712 Int *coeff_chroma; ///< filter coefficient array (chroma)713 #endif714 674 Int *filterPattern; 715 675 Int startSecondFilter; … … 719 679 Int **coeffmulti; 720 680 Int minKStart; 721 #if !LCU_SYNTAX_ALF722 Int maxScanVal;723 Int kMinTab[42];724 725 Int alf_pcr_region_flag;726 ~ALFParam();727 #endif728 #if LCU_SYNTAX_ALF729 681 Int componentID; 730 682 Int* kMinTab; … … 739 691 Void destroy(); 740 692 Void copy(const ALFParam& src); 741 #endif 742 }; 743 744 #if LCU_SYNTAX_ALF 693 }; 694 745 695 struct AlfUnitParam 746 696 { … … 775 725 Void destroy(); 776 726 }; 777 #endif778 727 779 728 -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/NALread.cpp
r210 r294 124 124 assert(forbidden_zero_bit == 0); 125 125 126 #if NAL_REF_FLAG127 126 nalu.m_nalRefFlag = (bs.read(1) != 0 ); 128 127 nalu.m_nalUnitType = (NalUnitType) bs.read(6); 129 #else130 nalu.m_nalRefIDC = (NalRefIdc) bs.read(2);131 nalu.m_nalUnitType = (NalUnitType) bs.read(5);132 #endif133 128 134 129 #if QC_MVHEVC_B0046 … … 137 132 nalu.m_temporalId = bs.read(3) - 1; 138 133 #else 139 #if H0388140 134 nalu.m_temporalId = bs.read(3); 141 135 // unsigned reserved_one_5bits = bs.read(5); … … 147 141 nalu.m_isDepth = bs.read(1); 148 142 #endif 149 #if H0566_TLA150 143 if ( nalu.m_temporalId ) 151 144 { … … 157 150 } 158 151 #endif 159 #else160 switch (nalu.m_nalUnitType)161 {162 case NAL_UNIT_CODED_SLICE:163 case NAL_UNIT_CODED_SLICE_IDR:164 #if H0566_TLA165 #if !QC_REM_IDV_B0046166 case NAL_UNIT_CODED_SLICE_IDV:167 #endif168 case NAL_UNIT_CODED_SLICE_CRA:169 case NAL_UNIT_CODED_SLICE_TLA:170 #else171 case NAL_UNIT_CODED_SLICE_CDR:172 #endif173 {174 nalu.m_temporalId = bs.read(3);175 #if VIDYO_VPS_INTEGRATION176 nalu.m_layerId = bs.read(5) - 1;177 #else178 nalu.m_OutputFlag = bs.read(1);179 // unsigned reserved_one_4bits = bs.read(4);180 // assert(reserved_one_4bits == 1);181 nalu.m_viewId = bs.read(3)-1;182 nalu.m_isDepth = bs.read(1);183 #endif184 185 #if H0566_TLA186 if (nalu.m_temporalId == 0)187 {188 #if QC_REM_IDV_B0046189 assert(nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR);190 #else191 assert(nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDV );192 #endif193 }194 else195 {196 assert(nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_TLA);197 }198 #endif199 }200 break;201 default:202 nalu.m_temporalId = 0;203 nalu.m_OutputFlag = true;204 break;205 }206 #endif207 #endif208 152 } 209 153 //! \} -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecBinCoder.h
r56 r294 54 54 virtual Void start () = 0; 55 55 virtual Void finish () = 0; 56 #if OL_FLUSH57 56 virtual Void flush () = 0; 58 #endif59 57 60 58 virtual Void decodeBin ( UInt& ruiBin, ContextModel& rcCtxModel ) = 0; … … 64 62 65 63 virtual Void resetBac () = 0; 66 #if BURST_IPCM67 64 virtual Void decodeNumSubseqIPCM( Int& numSubseqIPCM ) = 0; 68 #endif69 65 virtual Void decodePCMAlignBits() = 0; 70 66 virtual Void xReadPCMCode ( UInt uiLength, UInt& ruiCode) = 0; -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecBinCoderCABAC.cpp
r56 r294 65 65 TDecBinCABAC::start() 66 66 { 67 #if !OL_FLUSH ||OL_FLUSH_ALIGN67 #if OL_FLUSH_ALIGN 68 68 assert( m_pcTComBitstream->getNumBitsUntilByteAligned() == 0 ); 69 69 #endif … … 72 72 m_bitsNeeded = -8; 73 73 m_uiValue = m_pcTComBitstream->readByte() << 8; 74 #if OL_FLUSH &&!OL_FLUSH_ALIGN74 #if !OL_FLUSH_ALIGN 75 75 m_uiLastByte = m_pcTComBitstream->readByte(); 76 76 m_uiValue |= m_uiLastByte; … … 85 85 } 86 86 87 #if OL_FLUSH88 87 Void 89 88 TDecBinCABAC::flush() … … 108 107 #endif // OL_FLUSH_ALIGN 109 108 } 110 #endif // OL_FLUSH111 109 112 110 /** … … 122 120 m_uiValue = pcTDecBinCABAC->m_uiValue; 123 121 m_bitsNeeded= pcTDecBinCABAC->m_bitsNeeded; 124 #if OL_FLUSH &&!OL_FLUSH_ALIGN122 #if !OL_FLUSH_ALIGN 125 123 m_uiLastByte= pcTDecBinCABAC->m_uiLastByte; 126 124 #endif … … 152 150 { 153 151 m_bitsNeeded = -8; 154 #if OL_FLUSH &&!OL_FLUSH_ALIGN152 #if !OL_FLUSH_ALIGN 155 153 m_uiLastByte = m_pcTComBitstream->readByte(); 156 154 m_uiValue += m_uiLastByte; … … 173 171 if ( m_bitsNeeded >= 0 ) 174 172 { 175 #if OL_FLUSH &&!OL_FLUSH_ALIGN173 #if !OL_FLUSH_ALIGN 176 174 m_uiLastByte = m_pcTComBitstream->readByte(); 177 175 m_uiValue += m_uiLastByte << m_bitsNeeded; … … 192 190 { 193 191 m_bitsNeeded = -8; 194 #if OL_FLUSH &&!OL_FLUSH_ALIGN192 #if !OL_FLUSH_ALIGN 195 193 m_uiLastByte = m_pcTComBitstream->readByte(); 196 194 m_uiValue += m_uiLastByte; … … 215 213 while ( numBins > 8 ) 216 214 { 217 #if OL_FLUSH &&!OL_FLUSH_ALIGN215 #if !OL_FLUSH_ALIGN 218 216 m_uiLastByte = m_pcTComBitstream->readByte(); 219 217 m_uiValue = ( m_uiValue << 8 ) + ( m_uiLastByte << ( 8 + m_bitsNeeded ) ); … … 241 239 if ( m_bitsNeeded >= 0 ) 242 240 { 243 #if OL_FLUSH &&!OL_FLUSH_ALIGN241 #if !OL_FLUSH_ALIGN 244 242 m_uiLastByte = m_pcTComBitstream->readByte(); 245 243 m_uiValue += m_uiLastByte << m_bitsNeeded; … … 285 283 { 286 284 m_bitsNeeded = -8; 287 #if OL_FLUSH &&!OL_FLUSH_ALIGN285 #if !OL_FLUSH_ALIGN 288 286 m_uiLastByte = m_pcTComBitstream->readByte(); 289 287 m_uiValue += m_uiLastByte; … … 306 304 } 307 305 308 #if BURST_IPCM309 306 /** Decode subsequent_pcm_num. 310 307 * \param numSubseqIPCM … … 323 320 { 324 321 m_bitsNeeded = -8; 325 #if OL_FLUSH &&!OL_FLUSH_ALIGN322 #if !OL_FLUSH_ALIGN 326 323 m_uiLastByte = m_pcTComBitstream->readByte(); 327 324 m_uiValue += m_uiLastByte; … … 342 339 numSubseqIPCM --; 343 340 } 344 #endif345 341 346 342 /** Decode PCM alignment zero bits. -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecBinCoderCABAC.h
r56 r294 56 56 Void start (); 57 57 Void finish (); 58 #if OL_FLUSH59 58 Void flush (); 60 #endif61 59 62 60 Void decodeBin ( UInt& ruiBin, ContextModel& rcCtxModel ); … … 66 64 67 65 Void resetBac (); 68 #if BURST_IPCM69 66 Void decodeNumSubseqIPCM( Int& numSubseqIPCM ) ; 70 #endif71 67 Void decodePCMAlignBits(); 72 68 Void xReadPCMCode ( UInt uiLength, UInt& ruiCode ); … … 82 78 UInt m_uiRange; 83 79 UInt m_uiValue; 84 #if OL_FLUSH &&!OL_FLUSH_ALIGN80 #if !OL_FLUSH_ALIGN 85 81 UInt m_uiLastByte; 86 82 #endif -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecCAVLC.cpp
r292 r294 169 169 assert(m_pcBitstream->getNumBitsLeft() == 8); /* rsbp_trailing_bits */ 170 170 } 171 #if RPS_IN_SPS172 171 void TDecCavlc::parseShortTermRefPicSet( TComSPS* sps, TComReferencePictureSet* rps, Int idx ) 173 #else174 void TDecCavlc::parseShortTermRefPicSet( TComPPS* pcPPS, TComReferencePictureSet* rps, Int idx )175 #endif176 172 { 177 173 UInt code; … … 184 180 Int rIdx = idx - 1 - code; 185 181 assert (rIdx <= idx && rIdx >= 0); 186 #if RPS_IN_SPS187 182 TComReferencePictureSet* rpsRef = sps->getRPSList()->getReferencePictureSet(rIdx); 188 #else189 TComReferencePictureSet* rpsRef = pcPPS->getRPSList()->getReferencePictureSet(rIdx);190 #endif191 183 Int k = 0, k0 = 0, k1 = 0; 192 184 READ_CODE(1, bit, "delta_rps_sign"); // delta_RPS_sign … … 265 257 READ_FLAG(uiCode, "aps_scaling_list_data_present_flag"); aps->setScalingListEnabled( (uiCode==1)?true:false ); 266 258 READ_FLAG(uiCode, "aps_deblocking_filter_flag"); aps->setLoopFilterOffsetInAPS( (uiCode==1)?true:false ); 267 #if !SAO_UNIT_INTERLEAVING268 READ_FLAG(uiCode, "aps_sample_adaptive_offset_flag"); aps->setSaoEnabled( (uiCode==1)?true:false );269 #endif270 #if !LCU_SYNTAX_ALF271 READ_FLAG(uiCode, "aps_adaptive_loop_filter_flag"); aps->setAlfEnabled( (uiCode==1)?true:false );272 #endif273 259 if(aps->getScalingListEnabled()) 274 260 { 275 261 parseScalingList( aps->getScalingList() ); 276 262 } 277 #if DBL_CONTROL278 263 if(aps->getLoopFilterOffsetInAPS()) 279 264 { 280 265 xParseDblParam( aps ); 281 266 } 282 #endif283 #if SAO_UNIT_INTERLEAVING284 267 READ_FLAG(uiCode, "aps_sao_interleaving_flag"); aps->setSaoInterleavingFlag( (uiCode==1)?true:false ); 285 268 if(!aps->getSaoInterleavingFlag()) 286 269 { 287 270 READ_FLAG(uiCode, "aps_sample_adaptive_offset_flag"); aps->setSaoEnabled( (uiCode==1)?true:false ); 288 #endif289 271 if(aps->getSaoEnabled()) 290 272 { … … 292 274 xParseSaoParam( aps->getSaoParam() ); 293 275 } 294 #if SAO_UNIT_INTERLEAVING 295 } 296 #endif 297 #if LCU_SYNTAX_ALF 276 } 298 277 READ_FLAG(uiCode, "aps_adaptive_loop_filter_flag"); aps->setAlfEnabled( (uiCode==1)?true:false ); 299 #endif300 278 if(aps->getAlfEnabled()) 301 279 { 302 #if !LCU_SYNTAX_ALF303 aps->getAlfParam()->alf_flag = 1;304 #endif305 280 xParseAlfParam( aps->getAlfParam()); 306 281 } … … 316 291 } 317 292 318 #if DBL_CONTROL319 293 Void TDecCavlc::xParseDblParam ( TComAPS* aps ) 320 294 { … … 333 307 } 334 308 } 335 #endif336 309 /** parse SAO parameters 337 310 * \param pSaoParam … … 341 314 UInt uiSymbol; 342 315 343 #if SAO_UNIT_INTERLEAVING344 316 int i,j, compIdx; 345 317 int numCuInWidth; … … 393 365 } 394 366 } 395 #else 396 if (pSaoParam->bSaoFlag[0]) 397 { 398 xParseSaoSplitParam (pSaoParam, 0, 0); 399 xParseSaoOffsetParam(pSaoParam, 0, 0); 400 READ_FLAG (uiSymbol, "sao_flag_cb"); 401 pSaoParam->bSaoFlag[1] = uiSymbol? true:false; 402 if (pSaoParam->bSaoFlag[1]) 403 { 404 xParseSaoSplitParam (pSaoParam, 0, 1); 405 xParseSaoOffsetParam(pSaoParam, 0, 1); 406 } 407 408 READ_FLAG (uiSymbol, "sao_flag_cr"); 409 pSaoParam->bSaoFlag[2] = uiSymbol? true:false; 410 if (pSaoParam->bSaoFlag[2]) 411 { 412 xParseSaoSplitParam (pSaoParam, 0, 2); 413 xParseSaoOffsetParam(pSaoParam, 0, 2); 414 } 415 } 416 #endif 417 } 418 #if SAO_UNIT_INTERLEAVING 367 } 419 368 /** copy SAO parameter 420 369 * \param dst … … 584 533 } 585 534 586 #else 587 /** Decode quadtree split flag 588 * \param pSaoParam, iPartIdx 589 */ 590 Void TDecCavlc::xParseSaoSplitParam(SAOParam* pSaoParam, Int iPartIdx, Int iYCbCr) 591 { 592 UInt uiSymbol; 593 SAOQTPart* pSaoPart = NULL; 594 pSaoPart= &(pSaoParam->psSaoPart[iYCbCr][iPartIdx]); 595 596 if(pSaoPart->PartLevel < pSaoParam->iMaxSplitLevel) 597 { 598 READ_FLAG (uiSymbol, "sao_split_flag"); 599 pSaoPart->bSplit = uiSymbol? true:false; 600 if(pSaoPart->bSplit) 601 { 602 for (Int i=0;i<NUM_DOWN_PART;i++) 603 { 604 xParseSaoSplitParam(pSaoParam, pSaoPart->DownPartsIdx[i], iYCbCr); 605 } 606 } 607 } 608 else 609 { 610 pSaoPart->bSplit = false; 611 } 612 } 613 614 /** Decode SAO for one partition 615 * \param pSaoParam, iPartIdx 616 */ 617 Void TDecCavlc::xParseSaoOffsetParam(SAOParam* pSaoParam, Int iPartIdx, Int iYCbCr) 618 { 619 UInt uiSymbol; 620 Int iSymbol; 621 SAOQTPart* pSaoPart = NULL; 622 pSaoPart = &(pSaoParam->psSaoPart[iYCbCr][iPartIdx]); 623 624 static Int iTypeLength[MAX_NUM_SAO_TYPE] = { 625 SAO_EO_LEN, 626 SAO_EO_LEN, 627 SAO_EO_LEN, 628 SAO_EO_LEN, 629 SAO_BO_LEN, 630 SAO_BO_LEN 631 }; 632 if(!pSaoPart->bSplit) 633 { 634 READ_UVLC (uiSymbol, "sao_type_idx"); 635 if (uiSymbol) 636 { 637 pSaoPart->iBestType = uiSymbol-1; 638 pSaoPart->bEnableFlag = true; 639 } 640 else 641 { 642 pSaoPart->iBestType = -1; 643 pSaoPart->bEnableFlag = false; 644 } 645 646 if (pSaoPart->bEnableFlag) 647 { 648 pSaoPart->iLength = iTypeLength[pSaoPart->iBestType]; 649 for(Int i=0; i< pSaoPart->iLength; i++) 650 { 651 READ_SVLC (iSymbol, "sao_offset"); 652 pSaoPart->iOffset[i] = iSymbol; 653 } 654 } 655 return; 656 } 657 658 //split 659 if (pSaoPart->PartLevel < pSaoParam->iMaxSplitLevel) 660 { 661 for(Int i=0;i<NUM_DOWN_PART;i++) 662 { 663 xParseSaoOffsetParam(pSaoParam, pSaoPart->DownPartsIdx[i], iYCbCr); 664 } 665 } 666 } 667 #endif 668 669 #if LCU_SYNTAX_ALF 535 670 536 Void TDecCavlc::xParseAlfParam(AlfParamSet* pAlfParamSet, Bool bSentInAPS, Int firstLCUAddr, Bool acrossSlice, Int numLCUInWidth, Int numLCUInHeight) 671 537 { … … 931 797 } 932 798 933 #endif934 799 935 800 Void TDecCavlc::xParseAlfParam(ALFParam* pAlfParam) … … 937 802 UInt uiSymbol; 938 803 Int iSymbol; 939 #if ALF_SINGLE_FILTER_SHAPE940 804 Int sqrFiltLengthTab[NUM_ALF_FILTER_SHAPE] = {ALF_FILTER_LEN}; 941 #else 942 Int sqrFiltLengthTab[2] = { 9, 9}; 943 #endif 944 945 #if LCU_SYNTAX_ALF 805 946 806 switch(pAlfParam->componentID) 947 807 { … … 961 821 case ALF_Y: 962 822 { 963 #endif964 823 pAlfParam->filters_per_group = 0; 965 824 memset (pAlfParam->filterPattern, 0 , sizeof(Int)*NO_VAR_BINS); 966 #if !LCU_SYNTAX_ALF967 READ_FLAG (uiSymbol, "alf_region_adaptation_flag");968 pAlfParam->alf_pcr_region_flag = uiSymbol;969 #endif970 #if ALF_SINGLE_FILTER_SHAPE971 825 pAlfParam->filter_shape = 0; 972 #else973 READ_UVLC (uiSymbol, "alf_length_luma_minus_5_div2");974 pAlfParam->filter_shape = uiSymbol;975 #endif976 826 pAlfParam->num_coeff = sqrFiltLengthTab[pAlfParam->filter_shape]; 977 827 … … 989 839 { 990 840 pAlfParam->filters_per_group = 1; 991 #if LCU_SYNTAX_ALF992 #if ALF_16_BA_GROUPS993 841 Int numMergeFlags = 16; 994 #else995 Int numMergeFlags = 15;996 #endif997 #else998 #if ALF_16_BA_GROUPS999 Int numMergeFlags = 16;1000 #else1001 Int numMergeFlags = pAlfParam->alf_pcr_region_flag ? 16 : 15;1002 #endif1003 #endif1004 842 for (Int i=1; i<numMergeFlags; i++) 1005 843 { … … 1021 859 } 1022 860 1023 #if ALF_SINGLE_FILTER_SHAPE1024 861 Int minScanVal = MIN_SCAN_POS_CROSS; 1025 #else1026 Int minScanVal = (pAlfParam->filter_shape == ALF_STAR5x5) ? 0: MIN_SCAN_POS_CROSS;1027 #endif1028 862 1029 863 // Determine maxScanVal … … 1036 870 1037 871 // Golomb parameters 1038 #if LCU_SYNTAX_ALF1039 872 if( pAlfParam->filters_per_group > 1 ) 1040 873 { 1041 #endif1042 874 READ_UVLC (uiSymbol, "alf_min_kstart_minus1"); 1043 875 pAlfParam->minKStart = 1 + uiSymbol; … … 1051 883 kMin = pAlfParam->kMinTab[scanPos]; 1052 884 } 1053 #if LCU_SYNTAX_ALF 1054 } 1055 #endif 885 } 1056 886 1057 887 Int scanPos; … … 1061 891 { 1062 892 scanPos = pDepthInt[i] - 1; 1063 #if LCU_SYNTAX_ALF1064 893 Int k = (pAlfParam->filters_per_group == 1) ? kTableTabShapes[ALF_CROSS9x7_SQUARE3x3][i] : pAlfParam->kMinTab[scanPos]; 1065 894 pAlfParam->coeffmulti[idx][i] = xGolombDecode(k); 1066 #else 1067 pAlfParam->coeffmulti[idx][i] = xGolombDecode(pAlfParam->kMinTab[scanPos]); 1068 #endif 1069 } 1070 } 1071 #if LCU_SYNTAX_ALF 895 } 896 } 1072 897 } 1073 898 break; … … 1079 904 } 1080 905 } 1081 #else1082 // filter parameters for chroma1083 READ_UVLC (uiSymbol, "alf_chroma_idc");1084 pAlfParam->chroma_idc = uiSymbol;1085 1086 if(pAlfParam->chroma_idc)1087 {1088 1089 #if ALF_SINGLE_FILTER_SHAPE1090 pAlfParam->filter_shape_chroma = 0;1091 #else1092 READ_UVLC (uiSymbol, "alf_length_chroma_minus_5_div2");1093 1094 pAlfParam->filter_shape_chroma = uiSymbol;1095 #endif1096 pAlfParam->num_coeff_chroma = sqrFiltLengthTab[pAlfParam->filter_shape_chroma];1097 // filter coefficients for chroma1098 for(Int pos=0; pos<pAlfParam->num_coeff_chroma; pos++)1099 {1100 READ_SVLC (iSymbol, "alf_coeff_chroma");1101 pAlfParam->coeff_chroma[pos] = iSymbol;1102 }1103 }1104 #endif1105 906 } 1106 907 … … 1137 938 } 1138 939 1139 #if TILES_OR_ENTROPY_SYNC_IDC1140 940 Void TDecCavlc::parsePPS(TComPPS* pcPPS, ParameterSetManagerDecoder *parameterSet) 1141 #else1142 Void TDecCavlc::parsePPS(TComPPS* pcPPS)1143 #endif1144 941 { 1145 942 #if ENC_DEC_TRACE … … 1150 947 Int iCode; 1151 948 1152 #if !RPS_IN_SPS1153 TComRPSList* rpsList = pcPPS->getRPSList();1154 #endif1155 949 READ_UVLC( uiCode, "pic_parameter_set_id"); pcPPS->setPPSId (uiCode); 1156 950 READ_UVLC( uiCode, "seq_parameter_set_id"); pcPPS->setSPSId (uiCode); 1157 951 1158 #if MULTIBITS_DATA_HIDING1159 952 READ_FLAG ( uiCode, "sign_data_hiding_flag" ); pcPPS->setSignHideFlag( uiCode ); 1160 953 if( pcPPS->getSignHideFlag() ) … … 1162 955 READ_CODE( 4, uiCode, "sign_hiding_threshold"); pcPPS->setTSIG(uiCode); 1163 956 } 1164 #endif1165 957 1166 958 #if CABAC_INIT_FLAG 1167 959 READ_FLAG( uiCode, "cabac_init_present_flag" ); pcPPS->setCabacInitPresentFlag( uiCode ? true : false ); 1168 #endif1169 #if !RPS_IN_SPS1170 // RPS is put before entropy_coding_mode_flag1171 // since entropy_coding_mode_flag will probably be removed from the WD1172 TComReferencePictureSet* pcRPS;1173 1174 READ_UVLC( uiCode, "num_short_term_ref_pic_sets" );1175 rpsList->create(uiCode);1176 1177 for(Int i=0; i< rpsList->getNumberOfReferencePictureSets(); i++)1178 {1179 pcRPS = rpsList->getReferencePictureSet(i);1180 parseShortTermRefPicSet(pcPPS,pcRPS,i);1181 }1182 READ_FLAG( uiCode, "long_term_ref_pics_present_flag" ); pcPPS->setLongTermRefsPresent(uiCode);1183 960 #endif 1184 961 // entropy_coding_mode_flag … … 1187 964 if (pcPPS->getEntropyCodingMode()) 1188 965 { 1189 #if !WPP_SIMPLIFICATION 1190 READ_UVLC( uiCode, "entropy_coding_synchro" ); pcPPS->setEntropyCodingSynchro( uiCode ); 1191 READ_FLAG( uiCode, "cabac_istate_reset" ); pcPPS->setCabacIstateReset( uiCode ? true : false ); 1192 #endif 1193 #if !TILES_OR_ENTROPY_SYNC_IDC 1194 #if !WPP_SIMPLIFICATION 1195 if ( pcPPS->getEntropyCodingSynchro() ) 1196 #endif 1197 { 1198 READ_UVLC( uiCode, "num_substreams_minus1" ); pcPPS->setNumSubstreams(uiCode+1); 1199 } 1200 #endif 1201 } 1202 #if !H0566_TLA 1203 READ_UVLC( uiCode, "num_temporal_layer_switching_point_flags" ); pcPPS->setNumTLayerSwitchingFlags( uiCode ); 1204 for ( UInt i = 0; i < pcPPS->getNumTLayerSwitchingFlags(); i++ ) 1205 { 1206 READ_FLAG( uiCode, "temporal_layer_switching_point_flag" ); pcPPS->setTLayerSwitchingFlag( i, uiCode > 0 ? true : false ); 1207 } 1208 #endif 966 } 1209 967 1210 968 // num_ref_idx_l0_default_active_minus1 … … 1241 999 //printf("TDecCavlc::parsePPS():\tm_bUseWeightPred=%d\tm_uiBiPredIdc=%d\n", pcPPS->getUseWP(), pcPPS->getWPBiPredIdc()); 1242 1000 1243 #if H03881244 1001 READ_FLAG( uiCode, "output_flag_present_flag" ); 1245 1002 pcPPS->setOutputFlagPresentFlag( uiCode==1 ); 1246 #endif 1247 1248 #if TILES_OR_ENTROPY_SYNC_IDC 1003 1249 1004 if(parameterSet->getPrefetchedSPS(pcPPS->getSPSId())->getTilesOrEntropyCodingSyncIdc()==1) 1250 1005 { 1251 #endif1252 1006 READ_FLAG ( uiCode, "tile_info_present_flag" ); 1253 1007 pcPPS->setColumnRowInfoPresent(uiCode); … … 1290 1044 Int iNumColTilesMinus1 = (pcPPS->getColumnRowInfoPresent() == 1)?(pcPPS->getNumColumnsMinus1()):(pcPPS->getSPS()->getNumColumnsMinus1()); 1291 1045 Int iNumRowTilesMinus1 = (pcPPS->getColumnRowInfoPresent() == 1)?(pcPPS->getNumColumnsMinus1()):(pcPPS->getSPS()->getNumRowsMinus1()); 1292 #if !REMOVE_TILE_DEPENDENCE1293 pcPPS->setTileBoundaryIndependenceIdr( 1 ); //default1294 #endif1295 1046 pcPPS->setLFCrossTileBoundaryFlag(true); //default 1296 1047 1297 1048 if(iNumColTilesMinus1 !=0 || iNumRowTilesMinus1 !=0) 1298 1049 { 1299 #if !REMOVE_TILE_DEPENDENCE1300 READ_FLAG ( uiCode, "tile_boundary_independence_flag" );1301 pcPPS->setTileBoundaryIndependenceIdr( uiCode );1302 1303 if(pcPPS->getTileBoundaryIndependenceIdr() == 1)1304 {1305 #endif1306 1050 READ_FLAG ( uiCode, "loop_filter_across_tile_flag" ); 1307 1051 pcPPS->setLFCrossTileBoundaryFlag( (uiCode == 1)?true:false ); 1308 #if !REMOVE_TILE_DEPENDENCE 1309 } 1310 #endif 1311 } 1312 } 1313 #if TILES_OR_ENTROPY_SYNC_IDC 1052 } 1053 } 1314 1054 } 1315 1055 else if(parameterSet->getPrefetchedSPS(pcPPS->getSPSId())->getTilesOrEntropyCodingSyncIdc()==2) … … 1317 1057 READ_UVLC( uiCode, "num_substreams_minus1" ); pcPPS->setNumSubstreams(uiCode+1); 1318 1058 } 1319 #endif 1320 1321 #if DBL_CONTROL 1059 1322 1060 READ_FLAG( uiCode, "deblocking_filter_control_present_flag" ); 1323 1061 pcPPS->setDeblockingFilterControlPresent( uiCode ? true : false); 1324 #endif1325 #if PARALLEL_MERGE1326 1062 READ_UVLC( uiCode, "log2_parallel_merge_level_minus2"); 1327 1063 assert(uiCode == LOG2_PARALLEL_MERGE_LEVEL_MINUS2); 1328 1064 pcPPS->setLog2ParallelMergeLevelMinus2 (uiCode); 1329 #endif1330 1065 1331 1066 READ_FLAG( uiCode, "pps_extension_flag"); … … 1496 1231 READ_UVLC ( uiCode, "pic_width_in_luma_samples" ); pcSPS->setPicWidthInLumaSamples ( uiCode ); 1497 1232 READ_UVLC ( uiCode, "pic_height_in_luma_samples" ); pcSPS->setPicHeightInLumaSamples( uiCode ); 1498 #if PIC_CROPPING1499 1233 READ_FLAG( uiCode, "pic_cropping_flag"); pcSPS->setPicCroppingFlag ( uiCode ? true : false ); 1500 1234 if (uiCode != 0) … … 1505 1239 READ_UVLC( uiCode, "pic_crop_bottom_offset" ); pcSPS->setPicCropBottomOffset( uiCode ); 1506 1240 } 1507 #endif1508 1241 1509 1242 #if FULL_NBIT … … 1525 1258 #endif 1526 1259 1527 #if H0736_AVC_STYLE_QP_RANGE1528 1260 pcSPS->setQpBDOffsetY( (Int) (6*uiCode) ); 1529 #endif1530 1261 1531 1262 g_uiBASE_MAX = ((1<<(g_uiBitDepth))-1); … … 1537 1268 #endif 1538 1269 READ_UVLC( uiCode, "bit_depth_chroma_minus8" ); 1539 #if H0736_AVC_STYLE_QP_RANGE1540 1270 pcSPS->setQpBDOffsetC( (Int) (6*uiCode) ); 1541 #endif1542 1271 1543 1272 READ_FLAG( uiCode, "pcm_enabled_flag" ); pcSPS->setUsePCM( uiCode ? true : false ); … … 1554 1283 1555 1284 READ_UVLC( uiCode, "log2_max_pic_order_cnt_lsb_minus4" ); pcSPS->setBitsForPOC( 4 + uiCode ); 1556 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER1557 1285 for(UInt i=0; i <= pcSPS->getMaxTLayers()-1; i++) 1558 1286 { … … 1564 1292 pcSPS->setMaxLatencyIncrease( uiCode, i ); 1565 1293 } 1566 #else 1567 READ_UVLC( uiCode, "max_num_ref_pics" ); pcSPS->setMaxNumberOfReferencePictures(uiCode); 1568 READ_UVLC( uiCode, "num_reorder_frames" ); pcSPS->setNumReorderFrames(uiCode); 1569 READ_UVLC ( uiCode, "max_dec_frame_buffering"); 1570 pcSPS->setMaxDecFrameBuffering( uiCode ); 1571 READ_UVLC ( uiCode, "max_latency_increase"); 1572 pcSPS->setMaxLatencyIncrease( uiCode ); 1573 #endif 1574 1575 #if H0412_REF_PIC_LIST_RESTRICTION 1294 1576 1295 READ_FLAG( uiCode, "restricted_ref_pic_lists_flag" ); 1577 1296 pcSPS->setRestrictedRefPicListsFlag( uiCode ); … … 1585 1304 pcSPS->setListsModificationPresentFlag(true); 1586 1305 } 1587 #endif1588 1306 READ_UVLC( uiCode, "log2_min_coding_block_size_minus3" ); 1589 1307 UInt log2MinCUSize = uiCode + 3; … … 1628 1346 READ_FLAG( uiCode, "sample_adaptive_offset_enabled_flag" ); pcSPS->setUseSAO ( uiCode ? true : false ); 1629 1347 READ_FLAG( uiCode, "adaptive_loop_filter_enabled_flag" ); pcSPS->setUseALF ( uiCode ? true : false ); 1630 #if LCU_SYNTAX_ALF1631 1348 if(pcSPS->getUseALF()) 1632 1349 { 1633 1350 READ_FLAG( uiCode, "alf_coef_in_slice_flag" ); pcSPS->setUseALFCoefInSlice ( uiCode ? true : false ); 1634 1351 } 1635 #endif1636 1352 if( pcSPS->getUsePCM() ) 1637 1353 { … … 1642 1358 1643 1359 1644 #if RPS_IN_SPS1645 1360 TComRPSList* rpsList = pcSPS->getRPSList(); 1646 1361 TComReferencePictureSet* rps; … … 1655 1370 } 1656 1371 READ_FLAG( uiCode, "long_term_ref_pics_present_flag" ); pcSPS->setLongTermRefsPresent(uiCode); 1657 #endif1658 #if !PIC_CROPPING1659 //!!!KS: Syntax not in WD !!!1660 1661 xReadUvlc ( uiCode ); pcSPS->setPadX ( uiCode );1662 xReadUvlc ( uiCode ); pcSPS->setPadY ( uiCode );1663 #endif1664 1372 1665 1373 // AMVP mode for each depth (AM_NONE or AM_EXPL) … … 1670 1378 } 1671 1379 1672 #if TILES_WPP_ENTRY_POINT_SIGNALLING1673 1380 READ_CODE(2, uiCode, "tiles_or_entropy_coding_sync_idc"); pcSPS->setTilesOrEntropyCodingSyncIdc(uiCode); 1674 #endif 1675 1676 #if TILES_OR_ENTROPY_SYNC_IDC 1381 1677 1382 if(pcSPS->getTilesOrEntropyCodingSyncIdc() == 1) 1678 1383 { 1679 #endif1680 1384 READ_UVLC ( uiCode, "num_tile_columns_minus1" ); 1681 1385 pcSPS->setNumColumnsMinus1( uiCode ); … … 1704 1408 free(rowHeight); 1705 1409 } 1706 #if !REMOVE_TILE_DEPENDENCE1707 pcSPS->setTileBoundaryIndependenceIdr( 1 ); //default1708 #endif1709 1410 pcSPS->setLFCrossTileBoundaryFlag(true); //default 1710 1411 1711 1412 if( pcSPS->getNumColumnsMinus1() !=0 || pcSPS->getNumRowsMinus1() != 0) 1712 1413 { 1713 #if !REMOVE_TILE_DEPENDENCE1714 READ_FLAG ( uiCode, "tile_boundary_independence_flag" );1715 pcSPS->setTileBoundaryIndependenceIdr( uiCode );1716 if(pcSPS->getTileBoundaryIndependenceIdr() == 1)1717 {1718 #endif1719 1414 READ_FLAG ( uiCode, "loop_filter_across_tile_flag" ); 1720 1415 pcSPS->setLFCrossTileBoundaryFlag( (uiCode==1)?true:false); 1721 #if !REMOVE_TILE_DEPENDENCE 1722 } 1723 #endif 1724 } 1725 #if TILES_OR_ENTROPY_SYNC_IDC 1726 } 1727 #endif 1416 } 1417 } 1728 1418 READ_FLAG( uiCode, "sps_extension_flag"); 1729 1419 #if !QC_MVHEVC_B0046 … … 1894 1584 } 1895 1585 1896 #if LCU_SYNTAX_ALF1897 1586 #if MTK_DEPTH_MERGE_TEXTURE_CANDIDATE_C0137 1898 1587 Void TDecCavlc::parseSliceHeader (TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet, bool isDepth) 1899 1588 #else 1900 1589 Void TDecCavlc::parseSliceHeader (TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet) 1901 #endif1902 #else1903 Void TDecCavlc::parseSliceHeader (TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl)1904 1590 #endif 1905 1591 { … … 1988 1674 rpcSlice->setSPS(sps); 1989 1675 rpcSlice->setPPS(pps); 1990 #if H03881991 1676 if( pps->getOutputFlagPresentFlag() ) 1992 1677 { … … 1998 1683 rpcSlice->setPicOutputFlag( true ); 1999 1684 } 2000 #endif2001 1685 #if QC_REM_IDV_B0046 2002 1686 #if !QC_MVHEVC_B0046 … … 2065 1749 { 2066 1750 rps = rpcSlice->getLocalRPS(); 2067 #if RPS_IN_SPS2068 1751 parseShortTermRefPicSet(sps,rps, sps->getRPSList()->getNumberOfReferencePictureSets()); 2069 #else2070 parseShortTermRefPicSet(pps,rps, pps->getRPSList()->getNumberOfReferencePictureSets());2071 #endif2072 1752 rpcSlice->setRPS(rps); 2073 1753 } 2074 1754 else // use reference to short-term reference picture set in PPS 2075 1755 { 2076 #if RPS_IN_SPS2077 1756 READ_UVLC( uiCode, "short_term_ref_pic_set_idx"); rpcSlice->setRPS(sps->getRPSList()->getReferencePictureSet(uiCode)); 2078 #else2079 READ_UVLC( uiCode, "short_term_ref_pic_set_idx"); rpcSlice->setRPS(pps->getRPSList()->getReferencePictureSet(uiCode));2080 #endif2081 1757 rps = rpcSlice->getRPS(); 2082 1758 } 2083 #if RPS_IN_SPS2084 1759 if(sps->getLongTermRefsPresent()) 2085 #else2086 if(pps->getLongTermRefsPresent())2087 #endif2088 1760 { 2089 1761 Int offset = rps->getNumberOfNegativePictures()+rps->getNumberOfPositivePictures(); 2090 1762 READ_UVLC( uiCode, "num_long_term_pics"); rps->setNumberOfLongtermPictures(uiCode); 2091 1763 Int prev = 0; 2092 #if LTRP_MULT2093 1764 Int prevMsb=0; 2094 1765 Int prevDeltaPocLt=0; 2095 #endif2096 1766 for(Int j=rps->getNumberOfLongtermPictures()+offset-1 ; j > offset-1; j--) 2097 1767 { … … 2099 1769 prev += uiCode; 2100 1770 2101 #if LTRP_MULT2102 1771 READ_FLAG(uiCode,"delta_poc_msb_present_flag"); 2103 1772 Int decDeltaPOCMsbPresent=uiCode; … … 2120 1789 else 2121 1790 { 2122 #endif2123 1791 rps->setPOC(j,rpcSlice->getPOC()-prev); 2124 1792 rps->setDeltaPOC(j,-(Int)prev); 2125 #if LTRP_MULT2126 1793 } 2127 1794 prevDeltaPocLt=prev; 2128 #endif2129 1795 READ_FLAG( uiCode, "used_by_curr_pic_lt_flag"); rps->setUsed(j,uiCode); 2130 1796 } … … 2145 1811 if (sps->getUseSAO()) 2146 1812 { 2147 #if SAO_UNIT_INTERLEAVING2148 1813 READ_FLAG(uiCode, "slice_sao_interleaving_flag"); rpcSlice->setSaoInterleavingFlag(uiCode); 2149 #endif2150 1814 READ_FLAG(uiCode, "slice_sample_adaptive_offset_flag"); rpcSlice->setSaoEnabledFlag((Bool)uiCode); 2151 #if SAO_UNIT_INTERLEAVING2152 1815 if (rpcSlice->getSaoEnabledFlag() && rpcSlice->getSaoInterleavingFlag()) 2153 1816 { … … 2160 1823 rpcSlice->setSaoEnabledFlagCr(0); 2161 1824 } 2162 #endif2163 1825 } 2164 1826 READ_UVLC ( uiCode, "aps_id" ); rpcSlice->setAPSId(uiCode); … … 2188 1850 if( !rpcSlice->isIntra() ) 2189 1851 { 2190 #if H0412_REF_PIC_LIST_RESTRICTION2191 1852 #if QC_MVHEVC_B0046 2192 1853 if( !rpcSlice->getViewId() || !rpcSlice->getSPS()->getListsModificationPresentFlag() ) … … 2199 1860 else 2200 1861 { 2201 #endif2202 1862 READ_FLAG( uiCode, "ref_pic_list_modification_flag_l0" ); refPicListModification->setRefPicListModificationFlagL0( uiCode ? 1 : 0 ); 2203 #if H0412_REF_PIC_LIST_RESTRICTION 2204 } 2205 #endif 1863 } 2206 1864 2207 1865 if(refPicListModification->getRefPicListModificationFlagL0()) … … 2209 1867 uiCode = 0; 2210 1868 Int i = 0; 2211 #if H0137_0138_LIST_MODIFICATION2212 1869 Int NumPocTotalCurr = rpcSlice->getNumPocTotalCurrMvc(); 2213 1870 if ( NumPocTotalCurr > 1 ) … … 2232 1889 } 2233 1890 } 2234 #else 2235 Int list_modification_idc = 0; 2236 while(list_modification_idc != 3) 2237 { 2238 READ_UVLC( uiCode, "list_modification_idc" ); refPicListModification->setListIdcL0(i, uiCode ); 2239 list_modification_idc = uiCode; 2240 if(uiCode != 3) 2241 { 2242 READ_UVLC( uiCode, "ref_pic_set_idx" ); refPicListModification->setRefPicSetIdxL0(i, uiCode ); 2243 } 2244 i++; 2245 } 2246 refPicListModification->setNumberOfRefPicListModificationsL0(i-1); 2247 #endif 2248 } 2249 #if !H0137_0138_LIST_MODIFICATION 2250 else 2251 { 2252 refPicListModification->setNumberOfRefPicListModificationsL0(0); 2253 } 2254 #endif 1891 } 2255 1892 } 2256 1893 else 2257 1894 { 2258 1895 refPicListModification->setRefPicListModificationFlagL0(0); 2259 #if !H0137_0138_LIST_MODIFICATION2260 refPicListModification->setNumberOfRefPicListModificationsL0(0);2261 #endif2262 1896 } 2263 1897 if(rpcSlice->isInterB()) 2264 1898 { 2265 #if H0412_REF_PIC_LIST_RESTRICTION2266 1899 #if QC_MVHEVC_B0046 2267 1900 if( !rpcSlice->getViewId() || !rpcSlice->getSPS()->getListsModificationPresentFlag() ) … … 2274 1907 else 2275 1908 { 2276 #endif2277 1909 READ_FLAG( uiCode, "ref_pic_list_modification_flag_l1" ); refPicListModification->setRefPicListModificationFlagL1( uiCode ? 1 : 0 ); 2278 #if H0412_REF_PIC_LIST_RESTRICTION 2279 } 2280 #endif 1910 } 2281 1911 if(refPicListModification->getRefPicListModificationFlagL1()) 2282 1912 { 2283 1913 uiCode = 0; 2284 1914 Int i = 0; 2285 #if H0137_0138_LIST_MODIFICATION2286 1915 Int NumPocTotalCurr = rpcSlice->getNumPocTotalCurrMvc(); 2287 1916 if ( NumPocTotalCurr > 1 ) … … 2306 1935 } 2307 1936 } 2308 #else 2309 Int list_modification_idc = 0; 2310 while(list_modification_idc != 3) 2311 { 2312 READ_UVLC( uiCode, "list_modification_idc" ); refPicListModification->setListIdcL1(i, uiCode ); 2313 list_modification_idc = uiCode; 2314 if(uiCode != 3) 2315 { 2316 READ_UVLC( uiCode, "ref_pic_set_idx" ); refPicListModification->setRefPicSetIdxL1(i, uiCode ); 2317 } 2318 i++; 2319 } 2320 refPicListModification->setNumberOfRefPicListModificationsL1(i-1); 2321 #endif 2322 } 2323 #if !H0137_0138_LIST_MODIFICATION 2324 else 2325 { 2326 refPicListModification->setNumberOfRefPicListModificationsL1(0); 2327 } 2328 #endif 1937 } 2329 1938 } 2330 1939 else 2331 1940 { 2332 1941 refPicListModification->setRefPicListModificationFlagL1(0); 2333 #if !H0137_0138_LIST_MODIFICATION2334 refPicListModification->setNumberOfRefPicListModificationsL1(0);2335 #endif2336 1942 } 2337 1943 } … … 2351 1957 READ_UVLC( uiCode, "num_ref_idx_lc_active_minus1" ); rpcSlice->setNumRefIdx( REF_PIC_LIST_C, uiCode + 1 ); 2352 1958 2353 #if H0412_REF_PIC_LIST_RESTRICTION2354 1959 #if QC_MVHEVC_B0046 2355 1960 if( rpcSlice->getViewId() && rpcSlice->getSPS()->getListsModificationPresentFlag() ) … … 2358 1963 #endif 2359 1964 { 2360 #endif2361 1965 READ_FLAG( uiCode, "ref_pic_list_modification_flag_lc" ); rpcSlice->setRefPicListModificationFlagLC( uiCode ? 1 : 0 ); 2362 1966 if(uiCode) … … 2366 1970 READ_FLAG( uiCode, "pic_from_list_0_flag" ); 2367 1971 rpcSlice->setListIdFromIdxOfLC(i, uiCode); 2368 #if H0137_0138_LIST_MODIFICATION2369 1972 if (((rpcSlice->getListIdFromIdxOfLC(i) == REF_PIC_LIST_0) && (rpcSlice->getNumRefIdx( REF_PIC_LIST_0 ) == 1)) || ((rpcSlice->getListIdFromIdxOfLC(i) == REF_PIC_LIST_1) && (rpcSlice->getNumRefIdx( REF_PIC_LIST_1 ) == 1)) ) 2370 1973 { … … 2375 1978 READ_UVLC( uiCode, "ref_idx_list_curr" ); 2376 1979 } 2377 #else2378 READ_UVLC( uiCode, "ref_idx_list_curr" );2379 #endif2380 1980 rpcSlice->setRefIdxFromIdxOfLC(i, uiCode); 2381 1981 rpcSlice->setRefIdxOfLC((RefPicList)rpcSlice->getListIdFromIdxOfLC(i), rpcSlice->getRefIdxFromIdxOfLC(i), i); 2382 1982 } 2383 1983 } 2384 #if H0412_REF_PIC_LIST_RESTRICTION2385 1984 } 2386 1985 else … … 2388 1987 rpcSlice->setRefPicListModificationFlagLC(false); 2389 1988 } 2390 #endif2391 1989 } 2392 1990 else … … 2401 1999 } 2402 2000 2403 #if H0111_MVD_L1_ZERO2404 2001 if (rpcSlice->isInterB()) 2405 2002 { 2406 2003 READ_FLAG( uiCode, "mvd_l1_zero_flag" ); rpcSlice->setMvdL1ZeroFlag( (uiCode ? true : false) ); 2407 2004 } 2408 #endif2409 2005 2410 2006 #if CABAC_INIT_FLAG … … 2432 2028 rpcSlice->setSliceQp (26 + pps->getPicInitQPMinus26() + iCode); 2433 2029 2434 #if H0736_AVC_STYLE_QP_RANGE2435 2030 assert( rpcSlice->getSliceQp() >= -sps->getQpBDOffsetY() ); 2436 2031 assert( rpcSlice->getSliceQp() <= 51 ); 2437 #endif 2438 2439 #if DBL_CONTROL 2032 2440 2033 if (rpcSlice->getPPS()->getDeblockingFilterControlPresent()) 2441 2034 { … … 2447 2040 rpcSlice->setInheritDblParamFromAPS(0); 2448 2041 } 2449 #else2450 READ_FLAG ( uiCode, "inherit_dbl_param_from_APS_flag" ); rpcSlice->setInheritDblParamFromAPS(uiCode ? 1 : 0);2451 #endif2452 2042 if(!rpcSlice->getInheritDblParamFromAPS()) 2453 2043 { … … 2459 2049 } 2460 2050 } 2461 #if DBL_CONTROL2462 2051 } 2463 #endif2464 2052 if ( rpcSlice->getSliceType() == B_SLICE ) 2465 2053 { … … 2531 2119 2532 2120 Int uiNumCUsInFrame = uiNumLCUsInWidth* uiNumLCUsInHeight; 2533 #if LCU_SYNTAX_ALF2534 2121 if(sps->getUseALFCoefInSlice()) 2535 2122 { … … 2544 2131 if(!sps->getUseALFCoefInSlice()) 2545 2132 { 2546 #endif2547 2133 xParseAlfCuControlParam(alfCUCtrl, uiNumCUsInFrame); 2548 #if LCU_SYNTAX_ALF 2549 } 2550 #endif 2134 } 2551 2135 2552 2136 } … … 2557 2141 if (!bEntropySlice) 2558 2142 { 2559 #if !REMOVE_TILE_DEPENDENCE2560 if (sps->getTileBoundaryIndependenceIdr())2561 {2562 #endif2563 2143 xReadCode(1, uiCode); // read flag indicating if tile markers transmitted 2564 2144 rpcSlice->setTileMarkerFlag( uiCode ); 2565 #if !REMOVE_TILE_DEPENDENCE 2566 } 2567 #endif 2568 } 2569 2570 #if TILES_WPP_ENTRY_POINT_SIGNALLING 2145 } 2146 2571 2147 Int tilesOrEntropyCodingSyncIdc = rpcSlice->getSPS()->getTilesOrEntropyCodingSyncIdc(); 2572 2148 UInt *entryPointOffset = NULL; … … 2629 2205 delete [] entryPointOffset; 2630 2206 } 2631 #else2632 #if WPP_SIMPLIFICATION2633 if (pps->getNumSubstreams() > 1)2634 #else2635 if (pps->getEntropyCodingSynchro())2636 #endif2637 {2638 UInt uiNumSubstreams = pps->getNumSubstreams();2639 rpcSlice->allocSubstreamSizes(uiNumSubstreams);2640 UInt *puiSubstreamSizes = rpcSlice->getSubstreamSizes();2641 2642 for (UInt ui = 0; ui+1 < uiNumSubstreams; ui++)2643 {2644 xReadCode(2, uiCode);2645 2646 switch ( uiCode )2647 {2648 case 0:2649 xReadCode(8, uiCode);2650 break;2651 case 1:2652 xReadCode(16, uiCode);2653 break;2654 case 2:2655 xReadCode(24, uiCode);2656 break;2657 case 3:2658 xReadCode(32, uiCode);2659 break;2660 default:2661 printf("Error in parseSliceHeader\n");2662 exit(-1);2663 break;2664 }2665 puiSubstreamSizes[ui] = uiCode;2666 }2667 }2668 #endif2669 2207 2670 2208 if (!bEntropySlice) 2671 2209 { 2672 2210 // Reading location information 2673 #if !REMOVE_TILE_DEPENDENCE2674 if (sps->getTileBoundaryIndependenceIdr())2675 {2676 #endif2677 #if !TILES_WPP_ENTRY_POINT_SIGNALLING2678 xReadCode(1, uiCode); // read flag indicating if location information signaled in slice header2679 Bool bTileLocationInformationInSliceHeaderFlag = (uiCode)? true : false;2680 2681 if (bTileLocationInformationInSliceHeaderFlag)2682 {2683 // location count2684 xReadCode(5, uiCode); // number of tiles for which location information signaled2685 rpcSlice->setTileLocationCount ( uiCode + 1 );2686 2687 xReadCode(5, uiCode); // number of bits used by diff2688 Int iBitsUsedByDiff = uiCode + 1;2689 2690 // read out tile start location2691 Int iLastSize = 0;2692 for (UInt uiIdx=0; uiIdx<rpcSlice->getTileLocationCount(); uiIdx++)2693 {2694 Int iAbsDiff, iCurSize, iCurDiff;2695 if (uiIdx==0)2696 {2697 xReadCode(iBitsUsedByDiff-1, uiCode); iAbsDiff = uiCode;2698 rpcSlice->setTileLocation( uiIdx, iAbsDiff );2699 iCurDiff = iAbsDiff;2700 iLastSize = iAbsDiff;2701 }2702 else2703 {2704 xReadCode(1, uiCode); // read sign2705 Int iSign = (uiCode) ? -1 : +1;2706 2707 xReadCode(iBitsUsedByDiff-1, uiCode); iAbsDiff = uiCode;2708 iCurDiff = (iSign) * iAbsDiff;2709 iCurSize = iLastSize + iCurDiff;2710 iLastSize = iCurSize;2711 rpcSlice->setTileLocation( uiIdx, rpcSlice->getTileLocation( uiIdx-1 ) + iCurSize ); // calculate byte location2712 }2713 }2714 }2715 #endif2716 2211 2717 2212 // read out trailing bits 2718 2213 m_pcBitstream->readOutTrailingBits(); 2719 #if !REMOVE_TILE_DEPENDENCE2720 }2721 #endif2722 2214 } 2723 2215 return; … … 2814 2306 Void TDecCavlc::parseIPCMInfo( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 2815 2307 { 2816 #if BURST_IPCM2817 2308 assert(0); 2818 #else2819 UInt uiSymbol;2820 2821 xReadFlag( uiSymbol );2822 2823 if ( uiSymbol )2824 {2825 Bool bIpcmFlag = true;2826 2827 xReadPCMAlignZero();2828 2829 pcCU->setPartSizeSubParts ( SIZE_2Nx2N, uiAbsPartIdx, uiDepth );2830 pcCU->setSizeSubParts ( g_uiMaxCUWidth>>uiDepth, g_uiMaxCUHeight>>uiDepth, uiAbsPartIdx, uiDepth );2831 pcCU->setIPCMFlagSubParts ( bIpcmFlag, uiAbsPartIdx, uiDepth );2832 2833 UInt uiMinCoeffSize = pcCU->getPic()->getMinCUWidth()*pcCU->getPic()->getMinCUHeight();2834 UInt uiLumaOffset = uiMinCoeffSize*uiAbsPartIdx;2835 UInt uiChromaOffset = uiLumaOffset>>2;2836 2837 Pel* piPCMSample;2838 UInt uiWidth;2839 UInt uiHeight;2840 UInt uiSampleBits;2841 UInt uiX, uiY;2842 2843 piPCMSample = pcCU->getPCMSampleY() + uiLumaOffset;2844 uiWidth = pcCU->getWidth(uiAbsPartIdx);2845 uiHeight = pcCU->getHeight(uiAbsPartIdx);2846 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthLuma();2847 2848 for(uiY = 0; uiY < uiHeight; uiY++)2849 {2850 for(uiX = 0; uiX < uiWidth; uiX++)2851 {2852 UInt uiSample;2853 xReadCode(uiSampleBits, uiSample);2854 2855 piPCMSample[uiX] = uiSample;2856 }2857 piPCMSample += uiWidth;2858 }2859 2860 piPCMSample = pcCU->getPCMSampleCb() + uiChromaOffset;2861 uiWidth = pcCU->getWidth(uiAbsPartIdx)/2;2862 uiHeight = pcCU->getHeight(uiAbsPartIdx)/2;2863 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthChroma();2864 2865 for(uiY = 0; uiY < uiHeight; uiY++)2866 {2867 for(uiX = 0; uiX < uiWidth; uiX++)2868 {2869 UInt uiSample;2870 xReadCode(uiSampleBits, uiSample);2871 piPCMSample[uiX] = uiSample;2872 }2873 piPCMSample += uiWidth;2874 }2875 2876 piPCMSample = pcCU->getPCMSampleCr() + uiChromaOffset;2877 uiWidth = pcCU->getWidth(uiAbsPartIdx)/2;2878 uiHeight = pcCU->getHeight(uiAbsPartIdx)/2;2879 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthChroma();2880 2881 for(uiY = 0; uiY < uiHeight; uiY++)2882 {2883 for(uiX = 0; uiX < uiWidth; uiX++)2884 {2885 UInt uiSample;2886 xReadCode(uiSampleBits, uiSample);2887 piPCMSample[uiX] = uiSample;2888 }2889 piPCMSample += uiWidth;2890 }2891 }2892 #endif2893 2309 } 2894 2310 … … 2920 2336 Void TDecCavlc::parseDeltaQP( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 2921 2337 { 2922 #if H0736_AVC_STYLE_QP_RANGE2923 2338 Int qp; 2924 #else2925 UInt uiQp;2926 #endif2927 2339 Int iDQp; 2928 2340 2929 2341 xReadSvlc( iDQp ); 2930 2342 2931 #if H0736_AVC_STYLE_QP_RANGE2932 2343 Int qpBdOffsetY = pcCU->getSlice()->getSPS()->getQpBDOffsetY(); 2933 2344 qp = (((Int) pcCU->getRefQP( uiAbsPartIdx ) + iDQp + 52 + 2*qpBdOffsetY )%(52+ qpBdOffsetY)) - qpBdOffsetY; 2934 #else2935 uiQp = pcCU->getRefQP( uiAbsPartIdx ) + iDQp;2936 #endif2937 2345 2938 2346 UInt uiAbsQpCUPartIdx = (uiAbsPartIdx>>(8-(pcCU->getSlice()->getPPS()->getMaxCuDQPDepth()<<1)))<<(8-(pcCU->getSlice()->getPPS()->getMaxCuDQPDepth()<<1)) ; 2939 2347 UInt uiQpCUDepth = min(uiDepth,pcCU->getSlice()->getPPS()->getMaxCuDQPDepth()) ; 2940 2348 2941 #if H0736_AVC_STYLE_QP_RANGE2942 2349 pcCU->setQPSubParts( qp, uiAbsQpCUPartIdx, uiQpCUDepth ); 2943 #else2944 pcCU->setQPSubParts( uiQp, uiAbsQpCUPartIdx, uiQpCUDepth );2945 #endif2946 2350 } 2947 2351 … … 3407 2811 READ_UVLC( code, "scaling_list_pred_matrix_id_delta"); 3408 2812 scalingList->setRefMatrixId (sizeId,listId,(UInt)((Int)(listId)-(code+1))); 3409 #if SCALING_LIST3410 2813 if( sizeId > SCALING_LIST_8x8 ) 3411 2814 { 3412 2815 scalingList->setScalingListDC(sizeId,listId,scalingList->getScalingListDC(sizeId, scalingList->getRefMatrixId (sizeId,listId))); 3413 2816 } 3414 #endif3415 2817 scalingList->processRefMatrix( sizeId, listId, scalingList->getRefMatrixId (sizeId,listId)); 3416 2818 … … 3433 2835 Void TDecCavlc::xDecodeScalingList(TComScalingList *scalingList, UInt sizeId, UInt listId) 3434 2836 { 3435 #if SCALING_LIST3436 2837 Int i,coefNum = min(MAX_MATRIX_COEF_NUM,(Int)g_scalingListSize[sizeId]); 3437 2838 Int data; … … 3473 2874 } 3474 2875 } 3475 #else3476 Int i,coefNum = g_scalingListSize[sizeId];3477 Int data;3478 Int nextCoef = SCALING_LIST_START_VALUE;3479 UInt* scan = g_auiFrameScanXY [ sizeId + 1 ];3480 Int *dst = scalingList->getScalingListAddress(sizeId, listId);3481 3482 for(i = 0; i < coefNum; i++)3483 {3484 READ_SVLC( data, "scaling_list_delta_coef");3485 nextCoef = (nextCoef + data + 256 ) % 256;3486 dst[scan[i]] = nextCoef;3487 }3488 #endif3489 2876 } 3490 2877 -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecCAVLC.h
r292 r294 82 82 UInt xGetBit (); 83 83 84 #if RPS_IN_SPS85 84 void parseShortTermRefPicSet (TComSPS* pcSPS, TComReferencePictureSet* pcRPS, Int idx); 86 #else87 void parseShortTermRefPicSet (TComPPS* pcPPS, TComReferencePictureSet* pcRPS, Int idx);88 #endif89 85 private: 90 86 TComInputBitstream* m_pcBitstream; … … 123 119 Void parseSPS ( TComSPS* pcSPS ); 124 120 #endif 125 #if TILES_OR_ENTROPY_SYNC_IDC126 121 Void parsePPS ( TComPPS* pcPPS, ParameterSetManagerDecoder *parameterSet); 127 #else128 Void parsePPS ( TComPPS* pcPPS);129 #endif130 122 Void parseSEI(SEImessages&); 131 123 Void parseAPS ( TComAPS* pAPS ); 132 #if LCU_SYNTAX_ALF133 124 #if MTK_DEPTH_MERGE_TEXTURE_CANDIDATE_C0137 134 125 Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet, bool isDepth); 135 126 #else 136 127 Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet); 137 #endif138 #else139 Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl );140 128 #endif 141 129 Void parseTerminatingBit ( UInt& ruiBit ); … … 175 163 Void readTileMarker ( UInt& uiTileIdx, UInt uiBitsUsed ); 176 164 Void updateContextTables ( SliceType eSliceType, Int iQp ) { return; } 177 #if OL_FLUSH178 165 Void decodeFlush() {}; 179 #endif180 166 181 167 Void xParsePredWeightTable ( TComSlice* pcSlice ); … … 190 176 #endif 191 177 protected: 192 #if DBL_CONTROL193 178 Void xParseDblParam ( TComAPS* aps ); 194 #endif195 179 Void xParseSaoParam ( SAOParam* pSaoParam ); 196 #if SAO_UNIT_INTERLEAVING197 180 Void xParseSaoOffset (SaoLcuParam* saoLcuParam); 198 181 Void xParseSaoUnit (Int rx, Int ry, Int compIdx, SAOParam* saoParam, Bool& repeatedRow ); 199 #else200 Void xParseSaoSplitParam ( SAOParam* pSaoParam, Int iPartIdx, Int iYCbCr );201 Void xParseSaoOffsetParam ( SAOParam* pSaoParam, Int iPartIdx, Int iYCbCr );202 #endif203 #if LCU_SYNTAX_ALF204 182 Void xParseAlfParam(AlfParamSet* pAlfParamSet, Bool bSentInAPS = true, Int firstLCUAddr = 0, Bool acrossSlice = true, Int numLCUInWidth= -1, Int numLCUInHeight= -1); 205 183 Void parseAlfParamSet(AlfParamSet* pAlfParamSet, Int firstLCUAddr, Bool alfAcrossSlice); 206 184 Void parseAlfFixedLengthRun(UInt& idx, UInt rx, UInt numLCUInWidth); 207 185 Void parseAlfStoredFilterIdx(UInt& idx, UInt numFilterSetsInBuffer); 208 #endif209 186 Void xParseAlfParam ( ALFParam* pAlfParam ); 210 187 Void xParseAlfCuControlParam(AlfCUCtrlInfo& cAlfParam, Int iNumCUsInPic); -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecCu.cpp
r292 r294 148 148 } 149 149 150 #if BURST_IPCM151 150 pcCU->setNumSucIPCM(0); 152 #endif153 151 154 152 // start from the top level CU … … 240 238 if((!bStartInCU) && ( uiRPelX < pcSlice->getSPS()->getPicWidthInLumaSamples() ) && ( uiBPelY < pcSlice->getSPS()->getPicHeightInLumaSamples() ) ) 241 239 { 242 #if BURST_IPCM243 240 if(pcCU->getNumSucIPCM() == 0) 244 241 { … … 252 249 pcCU->setDepthSubParts( uiDepth, uiAbsPartIdx ); 253 250 } 254 #else255 #if HHI_MPI256 if( pcCU->getTextureModeDepth( uiAbsPartIdx ) == -1 || uiDepth < pcCU->getTextureModeDepth( uiAbsPartIdx ) )257 #endif258 m_pcEntropyDecoder->decodeSplitFlag( pcCU, uiAbsPartIdx, uiDepth );259 #endif260 251 } 261 252 else … … 323 314 324 315 // decode CU mode and the partition size 325 #if BURST_IPCM326 316 if( !pcCU->getSlice()->isIntra() && pcCU->getNumSucIPCM() == 0 ) 327 #else328 if( !pcCU->getSlice()->isIntra() )329 #endif330 317 #if HHI_MPI 331 318 if( pcCU->getTextureModeDepth( uiAbsPartIdx ) == -1 ) … … 382 369 { 383 370 #endif 384 #if SIMP_MRG_PRUN385 371 UInt uiMergeIndex = pcCU->getMergeIndex(uiAbsPartIdx); 386 372 #if MERL_VSP_C0152 … … 404 390 m_ppcCU[uiDepth]->getInterMergeCandidates( 0, 0, uiDepth, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex ); 405 391 #endif 406 #else407 m_ppcCU[uiDepth]->getInterMergeCandidates( 0, 0, uiDepth, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );408 UInt uiMergeIndex = pcCU->getMergeIndex(uiAbsPartIdx);409 #endif410 392 pcCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeIndex], uiAbsPartIdx, 0, uiDepth ); 411 393 … … 438 420 { 439 421 #endif 440 #if BURST_IPCM441 422 if( pcCU->getNumSucIPCM() == 0 ) 442 423 { … … 451 432 pcCU->setTrIdxSubParts( 0, uiAbsPartIdx, uiDepth ); 452 433 } 453 #else454 m_pcEntropyDecoder->decodePredMode( pcCU, uiAbsPartIdx, uiDepth );455 m_pcEntropyDecoder->decodePartSize( pcCU, uiAbsPartIdx, uiDepth );456 #endif457 434 458 435 if (pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) … … 592 569 } 593 570 594 #if BURST_IPCM595 571 if( pcCU->getNumSucIPCM() > 0 ) 596 572 { … … 598 574 return; 599 575 } 600 #endif601 576 602 577 ruiIsLast = xDecodeSliceEnd( pcCU, uiAbsPartIdx, uiDepth); … … 820 795 821 796 //===== inverse transform ===== 822 #if H0736_AVC_STYLE_QP_RANGE823 797 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA, pcCU->getSlice()->getSPS()->getQpBDOffsetY(), 0 ); 824 #else825 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA, 0 );826 #endif827 798 828 799 Int scalingListType = (pcCU->isIntra(uiAbsPartIdx) ? 0 : 3) + g_eTTable[(Int)TEXT_LUMA]; … … 940 911 if(eText == TEXT_CHROMA_U) 941 912 { 942 #if H0736_AVC_STYLE_QP_RANGE943 913 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), eText, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset() ); 944 #else945 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), eText, pcCU->getSlice()->getPPS()->getChromaQpOffset() );946 #endif947 914 } 948 915 else 949 916 { 950 #if H0736_AVC_STYLE_QP_RANGE951 917 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), eText, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() ); 952 #else953 m_pcTrQuant->setQPforQuant ( pcCU->getQP(0), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), eText, pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() );954 #endif955 918 } 956 919 … … 1252 1215 pResi = m_ppcYuvResi[uiDepth]->getLumaAddr(); 1253 1216 1254 #if H0736_AVC_STYLE_QP_RANGE1255 1217 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA, pcCU->getSlice()->getSPS()->getQpBDOffsetY(), 0 ); 1256 #else1257 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA, 0 );1258 #endif1259 1218 1260 1219 m_pcTrQuant->invRecurTransformNxN ( pcCU, 0, TEXT_LUMA, pResi, 0, m_ppcYuvResi[uiDepth]->getStride(), uiWidth, uiHeight, uiLumaTrMode, 0, piCoeff ); 1261 1220 1262 1221 // Cb and Cr 1263 #if H0736_AVC_STYLE_QP_RANGE1264 1222 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset() ); 1265 #else1266 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getPPS()->getChromaQpOffset() );1267 #endif1268 1223 1269 1224 uiWidth >>= 1; … … 1272 1227 m_pcTrQuant->invRecurTransformNxN ( pcCU, 0, TEXT_CHROMA_U, pResi, 0, m_ppcYuvResi[uiDepth]->getCStride(), uiWidth, uiHeight, uiChromaTrMode, 0, piCoeff ); 1273 1228 1274 #if H0736_AVC_STYLE_QP_RANGE1275 1229 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() ); 1276 #else1277 m_pcTrQuant->setQPforQuant( pcCU->getQP( uiAbsPartIdx ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() );1278 #endif1279 1230 1280 1231 piCoeff = pcCU->getCoeffCr(); pResi = m_ppcYuvResi[uiDepth]->getCrAddr(); -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecEntropy.cpp
r292 r294 330 330 else 331 331 { 332 #if SIMP_MRG_PRUN333 332 uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx); 334 333 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, uiDepth, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex ); 335 #else336 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, uiDepth, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );337 uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);338 #endif339 334 } 340 335 #else 341 #if SIMP_MRG_PRUN342 336 UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx); 343 337 #if MERL_VSP_C0152 … … 375 369 #else 376 370 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, uiDepth, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex ); 377 #endif378 #else379 pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, uiDepth, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );380 UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);381 371 #endif 382 372 #endif … … 547 537 } 548 538 549 #if UNIFIED_TRANSFORM_TREE550 539 Void TDecEntropy::xDecodeTransform( TComDataCU* pcCU, UInt offsetLuma, UInt offsetChroma, UInt uiAbsPartIdx, UInt absTUPartIdx, UInt uiDepth, UInt width, UInt height, UInt uiTrIdx, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3, Bool& bCodeDQP ) 551 #else552 Void TDecEntropy::xDecodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt absTUPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 )553 #endif554 540 { 555 541 UInt uiSubdiv; 556 542 const UInt uiLog2TrafoSize = g_aucConvertToBit[pcCU->getSlice()->getSPS()->getMaxCUWidth()]+2 - uiDepth; 557 543 558 #if UNIFIED_TRANSFORM_TREE559 544 if(uiTrIdx==0) 560 545 { … … 570 555 } 571 556 } 572 #endif // UNIFIED_TRANSFORM_TREE573 557 if( pcCU->getPredictionMode(uiAbsPartIdx) == MODE_INTRA && pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_NxN && uiDepth == pcCU->getDepth(uiAbsPartIdx) ) 574 558 { 575 559 uiSubdiv = 1; 576 560 } 577 #if G519_TU_AMP_NSQT_HARMONIZATION578 561 else if( (pcCU->getSlice()->getSPS()->getQuadtreeTUMaxDepthInter() == 1) && (pcCU->getPredictionMode(uiAbsPartIdx) == MODE_INTER) && ( pcCU->getPartitionSize(uiAbsPartIdx) != SIZE_2Nx2N ) && (uiDepth == pcCU->getDepth(uiAbsPartIdx)) ) 579 #else580 else if( (pcCU->getSlice()->getSPS()->getQuadtreeTUMaxDepthInter() == 1) && (pcCU->getPredictionMode(uiAbsPartIdx) == MODE_INTER) && ( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2NxN || pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_Nx2N) && (uiDepth == pcCU->getDepth(uiAbsPartIdx)) )581 #endif582 562 { 583 563 uiSubdiv = (uiLog2TrafoSize > pcCU->getQuadtreeTULog2MinSizeInCU(uiAbsPartIdx)); … … 656 636 if( uiSubdiv ) 657 637 { 658 #if UNIFIED_TRANSFORM_TREE659 638 UInt size; 660 639 width >>= 1; … … 662 641 size = width*height; 663 642 uiTrIdx++; 664 #endif665 643 ++uiDepth; 666 644 const UInt uiQPartNum = pcCU->getPic()->getNumPartInCU() >> (uiDepth << 1); … … 678 656 for( Int i = 0; i < 4; i++ ) 679 657 { 680 #if UNIFIED_TRANSFORM_TREE681 658 UInt nsAddr = 0; 682 659 nsAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, absTUPartIdx, i, uiTrDepth+1 ); 683 660 xDecodeTransform( pcCU, offsetLuma, offsetChroma, uiAbsPartIdx, nsAddr, uiDepth, width, height, uiTrIdx, i, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV, bCodeDQP ); 684 #else685 UInt nsAddr = 0;686 nsAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, absTUPartIdx, i, uiTrDepth+1 );687 xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, nsAddr, uiDepth, i, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );688 #endif689 661 uiYCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, uiLumaTrMode ); 690 662 uiUCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiChromaTrMode ); 691 663 uiVCbf |= pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiChromaTrMode ); 692 664 uiAbsPartIdx += uiQPartNum; 693 #if UNIFIED_TRANSFORM_TREE694 665 offsetLuma += size; offsetChroma += (size>>2); 695 #endif696 666 } 697 667 … … 751 721 } 752 722 } 753 #if UNIFIED_TRANSFORM_TREE754 723 // transform_unit begin 755 724 UInt cbfY = pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA , uiTrIdx ); … … 817 786 } 818 787 // transform_unit end 819 #endif // UNIFIED_TRANSFORM_TREE 820 } 821 } 822 823 #if !UNIFIED_TRANSFORM_TREE 824 Void TDecEntropy::decodeTransformIdx( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 825 { 826 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 827 DTRACE_CABAC_T( "\tdecodeTransformIdx()\tCUDepth=" ) 828 DTRACE_CABAC_V( uiDepth ) 829 DTRACE_CABAC_T( "\n" ) 830 UInt temp = 0; 831 UInt temp1 = 0; 832 UInt temp2 = 0; 833 xDecodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 ); 834 } 835 #endif // UNIFIED_TRANSFORM_TREE 836 837 #if UNIFIED_TRANSFORM_TREE 788 } 789 } 790 791 838 792 Void TDecEntropy::decodeQP ( TComDataCU* pcCU, UInt uiAbsPartIdx ) 839 793 { … … 843 797 } 844 798 } 845 #else 846 Void TDecEntropy::decodeQP ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 847 { 848 if ( pcCU->getSlice()->getPPS()->getUseDQP() ) 849 { 850 m_pcEntropyDecoderIf->parseDeltaQP( pcCU, uiAbsPartIdx, uiDepth ); 851 } 852 } 853 #endif 854 855 #if !UNIFIED_TRANSFORM_TREE 856 Void TDecEntropy::xDecodeCoeff( TComDataCU* pcCU, UInt uiLumaOffset, UInt uiChromaOffset, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiTrIdx, UInt uiCurrTrIdx, Bool& bCodeDQP ) 857 { 858 UInt uiLog2TrSize = g_aucConvertToBit[ pcCU->getSlice()->getSPS()->getMaxCUWidth() >> uiDepth ] + 2; 859 UInt uiCbfY = pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, uiTrIdx ); 860 UInt uiCbfU = pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrIdx ); 861 UInt uiCbfV = pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiTrIdx ); 862 if( uiLog2TrSize == 2 ) 863 { 864 UInt uiQPDiv = pcCU->getPic()->getNumPartInCU() >> ( ( uiDepth - 1 ) << 1 ); 865 if( ( uiAbsPartIdx % uiQPDiv ) == 0 ) 866 { 867 m_uiBakAbsPartIdx = uiAbsPartIdx; 868 m_uiBakChromaOffset = uiChromaOffset; 869 } 870 else if( ( uiAbsPartIdx % uiQPDiv ) == (uiQPDiv - 1) ) 871 { 872 uiCbfU = pcCU->getCbf( m_uiBakAbsPartIdx, TEXT_CHROMA_U, uiTrIdx ); 873 uiCbfV = pcCU->getCbf( m_uiBakAbsPartIdx, TEXT_CHROMA_V, uiTrIdx ); 874 } 875 } 876 877 if ( uiCbfY || uiCbfU || uiCbfV ) 878 { 879 // dQP: only for LCU 880 if ( pcCU->getSlice()->getPPS()->getUseDQP() ) 881 { 882 if ( bCodeDQP ) 883 { 884 decodeQP( pcCU, uiAbsPartIdx, uiDepth); 885 bCodeDQP = false; 886 } 887 } 888 UInt uiLumaTrMode, uiChromaTrMode; 889 pcCU->convertTransIdx( uiAbsPartIdx, pcCU->getTransformIdx( uiAbsPartIdx ), uiLumaTrMode, uiChromaTrMode ); 890 const UInt uiStopTrMode = uiLumaTrMode; 891 892 if( uiTrIdx == uiStopTrMode ) 893 { 894 if( pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, uiTrIdx ) ) 895 { 896 Int trWidth = uiWidth; 897 Int trHeight = uiHeight; 898 pcCU->getNSQTSize( uiTrIdx, uiAbsPartIdx, trWidth, trHeight ); 899 m_pcEntropyDecoderIf->parseCoeffNxN( pcCU, (pcCU->getCoeffY()+uiLumaOffset), uiAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_LUMA ); 900 } 901 902 uiWidth >>= 1; 903 uiHeight >>= 1; 904 905 if( uiLog2TrSize == 2 ) 906 { 907 UInt uiQPDiv = pcCU->getPic()->getNumPartInCU() >> ( ( uiDepth - 1 ) << 1 ); 908 if( ( uiAbsPartIdx % uiQPDiv ) == (uiQPDiv - 1) ) 909 { 910 uiWidth <<= 1; 911 uiHeight <<= 1; 912 Int trWidth = uiWidth; 913 Int trHeight = uiHeight; 914 pcCU->getNSQTSize( uiTrIdx-1, uiAbsPartIdx, trWidth, trHeight ); 915 if( pcCU->getCbf( m_uiBakAbsPartIdx, TEXT_CHROMA_U, uiTrIdx ) ) 916 { 917 m_pcEntropyDecoderIf->parseCoeffNxN( pcCU, (pcCU->getCoeffCb()+m_uiBakChromaOffset), m_uiBakAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_CHROMA_U ); 918 } 919 if( pcCU->getCbf( m_uiBakAbsPartIdx, TEXT_CHROMA_V, uiTrIdx ) ) 920 { 921 m_pcEntropyDecoderIf->parseCoeffNxN( pcCU, (pcCU->getCoeffCr()+m_uiBakChromaOffset), m_uiBakAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_CHROMA_V ); 922 } 923 } 924 } 925 else 926 { 927 Int trWidth = uiWidth; 928 Int trHeight = uiHeight; 929 pcCU->getNSQTSize( uiTrIdx, uiAbsPartIdx, trWidth, trHeight ); 930 if( pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrIdx ) ) 931 { 932 m_pcEntropyDecoderIf->parseCoeffNxN( pcCU, (pcCU->getCoeffCb()+uiChromaOffset), uiAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_CHROMA_U ); 933 } 934 if( pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiTrIdx ) ) 935 { 936 m_pcEntropyDecoderIf->parseCoeffNxN( pcCU, (pcCU->getCoeffCr()+uiChromaOffset), uiAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_CHROMA_V ); 937 } 938 } 939 } 940 else 941 { 942 { 943 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 944 DTRACE_CABAC_T( "\tgoing down\tdepth=" ); 945 DTRACE_CABAC_V( uiDepth ); 946 DTRACE_CABAC_T( "\ttridx=" ); 947 DTRACE_CABAC_V( uiTrIdx ); 948 DTRACE_CABAC_T( "\n" ); 949 } 950 if( uiCurrTrIdx <= uiTrIdx ) 951 { 952 assert(1); 953 } 954 UInt uiSize; 955 uiWidth >>= 1; 956 uiHeight >>= 1; 957 uiSize = uiWidth*uiHeight; 958 uiDepth++; 959 uiTrIdx++; 960 961 UInt uiQPartNum = pcCU->getPic()->getNumPartInCU() >> (uiDepth << 1); 962 UInt uiIdx = uiAbsPartIdx; 963 964 xDecodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiIdx, uiDepth, uiWidth, uiHeight, uiTrIdx, uiCurrTrIdx, bCodeDQP ); 965 uiLumaOffset += uiSize; uiChromaOffset += (uiSize>>2); uiIdx += uiQPartNum; 966 967 xDecodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiIdx, uiDepth, uiWidth, uiHeight, uiTrIdx, uiCurrTrIdx, bCodeDQP ); 968 uiLumaOffset += uiSize; uiChromaOffset += (uiSize>>2); uiIdx += uiQPartNum; 969 970 xDecodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiIdx, uiDepth, uiWidth, uiHeight, uiTrIdx, uiCurrTrIdx, bCodeDQP ); 971 uiLumaOffset += uiSize; uiChromaOffset += (uiSize>>2); uiIdx += uiQPartNum; 972 973 xDecodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiIdx, uiDepth, uiWidth, uiHeight, uiTrIdx, uiCurrTrIdx, bCodeDQP ); 974 { 975 DTRACE_CABAC_VL( g_nSymbolCounter++ ); 976 DTRACE_CABAC_T( "\tgoing up\n" ); 977 } 978 } 979 } 980 } 981 #endif // !UNIFIED_TRANSFORM_TREE 799 982 800 983 801 /** decode coefficients … … 994 812 UInt uiLumaOffset = uiMinCoeffSize*uiAbsPartIdx; 995 813 UInt uiChromaOffset = uiLumaOffset>>2; 996 #if UNIFIED_TRANSFORM_TREE997 814 UInt temp = 0; 998 815 UInt temp1 = 0; 999 816 UInt temp2 = 0; 1000 #else1001 UInt uiLumaTrMode, uiChromaTrMode;1002 #endif1003 817 1004 818 #if RWTH_SDC_DLT_B0036 … … 1018 832 if( pcCU->isIntra(uiAbsPartIdx) ) 1019 833 { 1020 #if !UNIFIED_TRANSFORM_TREE1021 decodeTransformIdx( pcCU, uiAbsPartIdx, pcCU->getDepth(uiAbsPartIdx) );1022 1023 pcCU->convertTransIdx( uiAbsPartIdx, pcCU->getTransformIdx(uiAbsPartIdx), uiLumaTrMode, uiChromaTrMode );1024 1025 #endif // !UNIFIED_TRANSFORM_TREE1026 834 } 1027 835 else … … 1045 853 } 1046 854 1047 #if !UNIFIED_TRANSFORM_TREE1048 decodeTransformIdx( pcCU, uiAbsPartIdx, pcCU->getDepth(uiAbsPartIdx) );1049 1050 pcCU->convertTransIdx( uiAbsPartIdx, pcCU->getTransformIdx(uiAbsPartIdx), uiLumaTrMode, uiChromaTrMode );1051 #endif // !UNIFIED_TRANSFORM_TREE1052 855 } 1053 856 … … 1068 871 #endif 1069 872 1070 #if UNIFIED_TRANSFORM_TREE1071 873 xDecodeTransform( pcCU, uiLumaOffset, uiChromaOffset, uiAbsPartIdx, uiAbsPartIdx, uiDepth, uiWidth, uiHeight, 0, 0, temp, temp1, temp2, bCodeDQP ); 1072 #else // UNIFIED_TRANSFORM_TREE1073 xDecodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiAbsPartIdx, uiDepth, uiWidth, uiHeight, 0, uiLumaTrMode, bCodeDQP );1074 #endif // UNIFIED_TRANSFORM_TREE1075 874 1076 875 #if FIX_MPI_B0065 -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecEntropy.h
r292 r294 67 67 virtual Void setBitstream ( TComInputBitstream* p ) = 0; 68 68 69 #if OL_FLUSH70 69 virtual Void decodeFlush() = 0; 71 #endif72 70 73 71 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 … … 79 77 virtual Void parseSPS ( TComSPS* pcSPS ) = 0; 80 78 #endif 81 #if TILES_OR_ENTROPY_SYNC_IDC82 79 virtual Void parsePPS ( TComPPS* pcPPS, ParameterSetManagerDecoder *parameterSet ) = 0; 83 #else84 virtual Void parsePPS ( TComPPS* pcPPS ) = 0;85 #endif86 80 virtual Void parseAPS ( TComAPS* pAPS ) = 0; 87 81 virtual void parseSEI(SEImessages&) = 0; 88 82 89 #if LCU_SYNTAX_ALF90 83 #if MTK_DEPTH_MERGE_TEXTURE_CANDIDATE_C0137 91 84 virtual Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet, bool isDepth) = 0; 92 85 #else 93 86 virtual Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet) = 0; 94 #endif95 #else96 virtual Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl ) = 0;97 87 #endif 98 88 … … 163 153 UInt m_uiBakAbsPartIdx; 164 154 UInt m_uiBakChromaOffset; 165 #if UNIFIED_TRANSFORM_TREE166 155 UInt m_bakAbsPartIdxCU; 167 #endif168 156 169 157 public: … … 188 176 Void decodeSPS ( TComSPS* pcSPS ) { m_pcEntropyDecoderIf->parseSPS(pcSPS); } 189 177 #endif 190 #if TILES_OR_ENTROPY_SYNC_IDC191 178 Void decodePPS ( TComPPS* pcPPS, ParameterSetManagerDecoder *parameterSet ) { m_pcEntropyDecoderIf->parsePPS(pcPPS, parameterSet); } 192 #else193 Void decodePPS ( TComPPS* pcPPS ) { m_pcEntropyDecoderIf->parsePPS(pcPPS); }194 #endif195 179 Void decodeAPS ( TComAPS* pAPS ) { m_pcEntropyDecoderIf->parseAPS(pAPS);} 196 180 void decodeSEI(SEImessages& seis) { m_pcEntropyDecoderIf->parseSEI(seis); } 197 181 198 #if LCU_SYNTAX_ALF199 182 #if MTK_DEPTH_MERGE_TEXTURE_CANDIDATE_C0137 200 183 Void decodeSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet, bool isDepth) { m_pcEntropyDecoderIf->parseSliceHeader(rpcSlice, parameterSetManager, alfCUCtrl, alfParamSet, isDepth); } 201 184 #else 202 185 Void decodeSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet) { m_pcEntropyDecoderIf->parseSliceHeader(rpcSlice, parameterSetManager, alfCUCtrl, alfParamSet); } 203 #endif204 #else205 Void decodeSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl ) { m_pcEntropyDecoderIf->parseSliceHeader(rpcSlice, parameterSetManager, alfCUCtrl); }206 186 #endif 207 187 … … 231 211 Void decodeIntraDirModeChroma( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ); 232 212 233 #if !UNIFIED_TRANSFORM_TREE234 Void decodeTransformIdx ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );235 #endif236 #if UNIFIED_TRANSFORM_TREE237 213 Void decodeQP ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 238 #else239 Void decodeQP ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );240 #endif241 214 242 215 Void readTileMarker ( UInt& uiTileIdx, UInt uiBitsUsed ) { m_pcEntropyDecoderIf->readTileMarker( uiTileIdx, uiBitsUsed ); } … … 245 218 246 219 private: 247 #if UNIFIED_TRANSFORM_TREE248 220 Void xDecodeTransform ( TComDataCU* pcCU, UInt offsetLuma, UInt offsetChroma, UInt uiAbsPartIdx, UInt absTUPartIdx, UInt uiDepth, UInt width, UInt height, UInt uiTrIdx, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3, Bool& bCodeDQP ); 249 #else250 Void xDecodeTransformSubdiv ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt absTUPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 );251 252 Void xDecodeCoeff ( TComDataCU* pcCU, UInt uiLumaOffset, UInt uiChromaOffset, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiTrIdx, UInt uiCurrTrIdx, Bool& bCodeDQP );253 #endif //UNIFIED_TRANSFORM_TREE254 221 255 222 public: … … 261 228 Void setSliceGranularity (Int iSliceGranularity) {m_pcEntropyDecoderIf->setSliceGranularity(iSliceGranularity);} 262 229 263 #if SAO_UNIT_INTERLEAVING264 230 Void decodeSaoParam (SAOParam* saoParam); 265 231 void decodeSaoLcu(Int rx, Int ry, Int compIdx, SAOParam* saoParam, Bool &repeatedRow ); 266 232 Void decodeSaoOneLcu(SaoLcuParam* saoLcuParam); 267 #endif 268 269 #if OL_FLUSH 233 270 234 Void decodeFlush() { m_pcEntropyDecoderIf->decodeFlush(); } 271 #endif272 235 273 236 #if RWTH_SDC_DLT_B0036 -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecGop.cpp
r289 r294 79 79 Void TDecGop::destroy() 80 80 { 81 #if LCU_SYNTAX_ALF82 81 m_alfParamSetPilot.releaseALFParam(); 83 #endif84 82 } 85 83 … … 120 118 // Private member functions 121 119 // ==================================================================================================================== 122 #if LCU_SYNTAX_ALF123 120 Void TDecGop::patchAlfLCUParams(ALFParam*** alfLCUParam, AlfParamSet* alfParamSet, Int firstLCUAddr) 124 121 { … … 195 192 } 196 193 197 #endif198 194 // ==================================================================================================================== 199 195 // Public member functions … … 279 275 if(pcSlice->getAlfEnabledFlag()) 280 276 { 281 #if LCU_SYNTAX_ALF282 277 if(pcSlice->getSPS()->getUseALFCoefInSlice()) 283 278 { … … 289 284 if( !pcSlice->getSPS()->getUseALFCoefInSlice()) 290 285 { 291 #endif292 286 m_vAlfCUCtrlSlices.push_back(m_cAlfCUCtrlOneSlice); 293 #if LCU_SYNTAX_ALF294 287 } 295 #endif296 288 } 297 289 } … … 323 315 m_pcSliceDecoder->decompressSlice( pcBitstream, ppcSubstreams, rpcPic, m_pcSbacDecoder, m_pcSbacDecoders); 324 316 m_pcEntropyDecoder->setBitstream( ppcSubstreams[uiNumSubstreams-1] ); 325 #if WPP_SIMPLIFICATION326 317 if ( uiNumSubstreams > 1 ) 327 #else328 if ( pcSlice->getPPS()->getEntropyCodingSynchro() )329 #endif330 318 { 331 319 // deallocate all created substreams, including internal buffers. … … 356 344 Bool bLFCrossTileBoundary = (pcSlice->getPPS()->getTileBehaviorControlPresentFlag() == 1)? 357 345 (pcSlice->getPPS()->getLFCrossTileBoundaryFlag()):(pcSlice->getPPS()->getSPS()->getLFCrossTileBoundaryFlag()); 358 #if DBL_CONTROL359 346 if (pcSlice->getPPS()->getDeblockingFilterControlPresent()) 360 347 { 361 #endif362 348 if(pcSlice->getSPS()->getUseDF()) 363 349 { … … 372 358 } 373 359 } 374 #if DBL_CONTROL375 360 } 376 361 m_pcLoopFilter->setCfg(pcSlice->getPPS()->getDeblockingFilterControlPresent(), pcSlice->getLoopFilterDisable(), pcSlice->getLoopFilterBetaOffset(), pcSlice->getLoopFilterTcOffset(), bLFCrossTileBoundary); 377 #else378 m_pcLoopFilter->setCfg(pcSlice->getLoopFilterDisable(), pcSlice->getLoopFilterBetaOffset(), pcSlice->getLoopFilterTcOffset(), bLFCrossTileBoundary);379 #endif380 362 m_pcLoopFilter->loopFilterPic( rpcPic ); 381 363 … … 392 374 if(pcSlice->getSaoEnabledFlag()) 393 375 { 394 #if SAO_UNIT_INTERLEAVING395 376 if (pcSlice->getSaoInterleavingFlag()) 396 377 { … … 402 383 } 403 384 m_pcSAO->setSaoInterleavingFlag(pcSlice->getAPS()->getSaoInterleavingFlag()); 404 #endif405 385 m_pcSAO->createPicSaoInfo(rpcPic, m_uiILSliceCount); 406 386 m_pcSAO->SAOProcess(rpcPic, pcSlice->getAPS()->getSaoParam()); … … 413 393 if( pcSlice->getSPS()->getUseALF() ) 414 394 { 415 #if LCU_SYNTAX_ALF416 395 if( (pcSlice->getSPS()->getUseALFCoefInSlice())?(true):(pcSlice->getAlfEnabledFlag())) 417 #else 418 if(pcSlice->getAlfEnabledFlag()) 419 #endif 420 { 421 422 #if LCU_SYNTAX_ALF 396 { 397 423 398 if(!pcSlice->getSPS()->getUseALFCoefInSlice()) 424 399 { … … 427 402 m_pcAdaptiveLoopFilter->createPicAlfInfo(rpcPic, m_uiILSliceCount, pcSlice->getSliceQp()); 428 403 m_pcAdaptiveLoopFilter->ALFProcess(rpcPic, m_vAlfCUCtrlSlices, pcSlice->getSPS()->getUseALFCoefInSlice()); 429 #else430 m_pcAdaptiveLoopFilter->createPicAlfInfo(rpcPic, m_uiILSliceCount);431 m_pcAdaptiveLoopFilter->ALFProcess(rpcPic, pcSlice->getAPS()->getAlfParam(), m_vAlfCUCtrlSlices);432 #endif433 404 m_pcAdaptiveLoopFilter->PCMLFDisableProcess(rpcPic); 434 405 m_pcAdaptiveLoopFilter->destroyPicAlfInfo(); 435 406 } 436 #if LCU_SYNTAX_ALF437 407 m_pcAdaptiveLoopFilter->resetLCUAlfInfo(); //reset all LCU ALFParam->alf_flag = 0 438 #endif439 408 } 440 409 -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecGop.h
r56 r294 101 101 bool m_pictureDigestEnabled; ///< if true, handle picture_digest SEI messages 102 102 AlfCUCtrlInfo m_cAlfCUCtrlOneSlice; 103 #if LCU_SYNTAX_ALF104 103 AlfParamSet m_alfParamSetPilot; 105 #endif106 104 107 105 public: … … 131 129 void setPictureDigestEnabled(bool enabled) { m_pictureDigestEnabled = enabled; } 132 130 AlfCUCtrlInfo& getAlfCuCtrlParam() { return m_cAlfCUCtrlOneSlice; } 133 #if LCU_SYNTAX_ALF134 131 AlfParamSet& getAlfParamSet() {return m_alfParamSetPilot;} 135 #endif136 132 137 133 private: 138 #if LCU_SYNTAX_ALF139 134 Void patchAlfLCUParams(ALFParam*** alfLCUParam, AlfParamSet* alfParamSet, Int firstLCUAddr = 0); 140 #endif141 135 142 136 -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecSbac.cpp
r292 r294 87 87 , m_cALFUvlcSCModel ( 1, 1, NUM_ALF_UVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 88 88 , m_cALFSvlcSCModel ( 1, 1, NUM_ALF_SVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 89 #if AMP_CTX90 89 , m_cCUAMPSCModel ( 1, 1, NUM_CU_AMP_CTX , m_contextModels + m_numContextModels, m_numContextModels) 91 #else92 , m_cCUXPosiSCModel ( 1, 1, NUM_CU_X_POS_CTX , m_contextModels + m_numContextModels, m_numContextModels)93 , m_cCUYPosiSCModel ( 1, 1, NUM_CU_Y_POS_CTX , m_contextModels + m_numContextModels, m_numContextModels)94 #endif95 90 , m_cSaoFlagSCModel ( 1, 1, NUM_SAO_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 96 91 , m_cSaoUvlcSCModel ( 1, 1, NUM_SAO_UVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 97 92 , m_cSaoSvlcSCModel ( 1, 1, NUM_SAO_SVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 98 #if SAO_UNIT_INTERLEAVING99 93 , m_cSaoMergeLeftSCModel ( 1, 1, NUM_SAO_MERGE_LEFT_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 100 94 , m_cSaoMergeUpSCModel ( 1, 1, NUM_SAO_MERGE_UP_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 101 95 , m_cSaoTypeIdxSCModel ( 1, 1, NUM_SAO_TYPE_IDX_CTX , m_contextModels + m_numContextModels, m_numContextModels) 102 #endif103 96 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 104 97 , m_cDmmFlagSCModel ( 1, 1, NUM_DMM_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 171 164 m_cCUAlfCtrlFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_ALF_CTRL_FLAG ); 172 165 m_cCUPartSizeSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_PART_SIZE ); 173 #if AMP_CTX174 166 m_cCUAMPSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_CU_AMP_POS ); 175 #else176 m_cCUXPosiSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_CU_X_POS );177 m_cCUYPosiSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_CU_Y_POS );178 #endif179 167 m_cCUPredModeSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_PRED_MODE ); 180 168 m_cCUIntraPredSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_INTRA_PRED_MODE ); … … 199 187 m_cSaoUvlcSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SAO_UVLC ); 200 188 m_cSaoSvlcSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SAO_SVLC ); 201 #if SAO_UNIT_INTERLEAVING202 189 m_cSaoMergeLeftSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SAO_MERGE_LEFT_FLAG ); 203 190 m_cSaoMergeUpSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SAO_MERGE_UP_FLAG ); 204 191 m_cSaoTypeIdxSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_SAO_TYPE_IDX ); 205 #endif206 192 207 193 m_cCUTransSubdivFlagSCModel.initBuffer ( sliceType, qp, (UChar*)INIT_TRANS_SUBDIV_FLAG ); … … 265 251 m_cCUAlfCtrlFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_ALF_CTRL_FLAG ); 266 252 m_cCUPartSizeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_PART_SIZE ); 267 #if AMP_CTX268 253 m_cCUAMPSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_AMP_POS ); 269 #else270 m_cCUXPosiSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_X_POS );271 m_cCUYPosiSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_Y_POS );272 #endif273 254 m_cCUPredModeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_PRED_MODE ); 274 255 m_cCUIntraPredSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTRA_PRED_MODE ); … … 293 274 m_cSaoUvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_UVLC ); 294 275 m_cSaoSvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_SVLC ); 295 #if SAO_UNIT_INTERLEAVING296 276 m_cSaoMergeLeftSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_LEFT_FLAG ); 297 277 m_cSaoMergeUpSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_UP_FLAG ); 298 278 m_cSaoTypeIdxSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX ); 299 #endif300 279 m_cCUTransSubdivFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_TRANS_SUBDIV_FLAG ); 301 280 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX … … 449 428 } 450 429 451 #if EIGHT_BITS_RICE_CODE452 430 ruiGoRiceParam = g_aauiGoRiceUpdate[ ruiGoRiceParam ][ min<UInt>( ruiSymbol, 23 ) ]; 453 #else454 ruiGoRiceParam = g_aauiGoRiceUpdate[ ruiGoRiceParam ][ min<UInt>( ruiSymbol, 15 ) ];455 #endif456 431 457 432 return; … … 470 445 { 471 446 UInt uiSymbol; 472 #if BURST_IPCM473 447 Int numSubseqIPCM = 0; 474 448 Bool readPCMSampleFlag = false; … … 490 464 } 491 465 } 492 #else 493 m_pcTDecBinIf->decodeBinTrm(uiSymbol); 494 #endif 495 496 #if BURST_IPCM 466 497 467 if (readPCMSampleFlag == true) 498 #else499 if (uiSymbol)500 #endif501 468 { 502 469 Bool bIpcmFlag = true; 503 470 504 #if !BURST_IPCM505 m_pcTDecBinIf->decodePCMAlignBits();506 #endif507 471 508 472 pcCU->setPartSizeSubParts ( SIZE_2Nx2N, uiAbsPartIdx, uiDepth ); … … 568 532 } 569 533 570 #if BURST_IPCM571 534 pcCU->setNumSucIPCM( pcCU->getNumSucIPCM() - 1); 572 535 if(pcCU->getNumSucIPCM() == 0) … … 574 537 m_pcTDecBinIf->resetBac(); 575 538 } 576 #else577 m_pcTDecBinIf->resetBac();578 #endif579 539 } 580 540 } … … 664 624 { 665 625 UInt uiNumCand = MRG_MAX_NUM_CANDS; 666 #if !MRG_IDX_CTX_RED667 UInt auiCtx[4] = { 0, 1, 2, 3 };668 #endif669 626 UInt uiUnaryIdx = 0; 670 627 uiNumCand = pcCU->getSlice()->getMaxNumMergeCand(); … … 678 635 { 679 636 UInt uiSymbol = 0; 680 #if MRG_IDX_CTX_RED681 637 if ( uiUnaryIdx==0 ) 682 638 { … … 687 643 m_pcTDecBinIf->decodeBinEP( uiSymbol ); 688 644 } 689 #else690 m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUMergeIdxExtSCModel.get( 0, 0, auiCtx[uiUnaryIdx] ) );691 #endif692 645 if( uiSymbol == 0 ) 693 646 { … … 879 832 if (eMode == SIZE_2NxN) 880 833 { 881 #if AMP_CTX882 834 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 )); 883 #else884 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 0 ));885 #endif886 835 if (uiSymbol == 0) 887 836 { 888 #if AMP_CTX889 837 m_pcTDecBinIf->decodeBinEP(uiSymbol); 890 #else891 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 1 ));892 #endif893 838 eMode = (uiSymbol == 0? SIZE_2NxnU : SIZE_2NxnD); 894 839 } … … 896 841 else if (eMode == SIZE_Nx2N) 897 842 { 898 #if AMP_CTX899 843 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 )); 900 #else901 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 0 ));902 #endif903 844 if (uiSymbol == 0) 904 845 { 905 #if AMP_CTX906 846 m_pcTDecBinIf->decodeBinEP(uiSymbol); 907 #else908 m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 1 ));909 #endif910 847 eMode = (uiSymbol == 0? SIZE_nLx2N : SIZE_nRx2N); 911 848 } … … 989 926 { 990 927 #endif 991 #if !LOGI_INTRA_NAME_3MPM992 Int iIntraIdx = pcCU->getIntraSizeIdx(uiAbsPartIdx);993 #endif994 928 995 929 #if LGE_EDGE_INTRA_A0070 … … 1003 937 #endif 1004 938 1005 #if LOGI_INTRA_NAME_3MPM1006 939 Int uiPreds[3] = {-1, -1, -1}; 1007 #else1008 Int uiPreds[2] = {-1, -1};1009 #endif1010 940 Int uiPredNum = pcCU->getIntraDirLumaPredictor(uiAbsPartIdx, uiPreds); 1011 941 #if LGE_EDGE_INTRA_A0070 … … 1018 948 { 1019 949 m_pcTDecBinIf->decodeBinEP( uiSymbol ); 1020 #if LOGI_INTRA_NAME_3MPM1021 950 if (uiSymbol) 1022 951 { … … 1024 953 uiSymbol++; 1025 954 } 1026 #endif1027 955 intraPredMode = uiPreds[uiSymbol]; 1028 956 } … … 1031 959 intraPredMode = 0; 1032 960 1033 #if LOGI_INTRA_NAME_3MPM1034 961 1035 962 m_pcTDecBinIf->decodeBinsEP( uiSymbol, 5 ); … … 1060 987 std::swap(uiPreds[1], uiPreds[2]); 1061 988 } 1062 #else1063 m_pcTDecBinIf->decodeBinsEP( uiSymbol, g_aucIntraModeBitsAng[iIntraIdx] - 1 );1064 intraPredMode = uiSymbol;1065 1066 if ( intraPredMode == 31 )1067 {1068 m_pcTDecBinIf->decodeBinEP( uiSymbol );1069 intraPredMode += uiSymbol;1070 }1071 #endif1072 989 #if LGE_EDGE_INTRA_A0070 1073 990 if ( intraPredMode != EDGE_INTRA_IDX) … … 1158 1075 { 1159 1076 UInt uiIPredMode; 1160 #if CHROMA_MODE_CODING1161 1077 m_pcTDecBinIf->decodeBinsEP( uiIPredMode, 2 ); 1162 #else1163 xReadUnaryMaxSymbol( uiIPredMode, m_cCUChromaPredSCModel.get( 0, 0 ) + 1, 0, 3 );1164 #endif1165 1078 UInt uiAllowedChromaDir[ NUM_CHROMA_MODE ]; 1166 1079 pcCU->getAllowedChromaDir( uiAbsPartIdx, uiAllowedChromaDir ); … … 1230 1143 ContextModel *pCtx = m_cCUMvdSCModel.get( 0 ); 1231 1144 1232 #if H0111_MVD_L1_ZERO1233 1145 if(pcCU->getSlice()->getMvdL1ZeroFlag() && eRefList == REF_PIC_LIST_1 && pcCU->getInterDir(uiAbsPartIdx)==3) 1234 1146 { … … 1238 1150 else 1239 1151 { 1240 #endif1241 1152 1242 1153 m_pcTDecBinIf->decodeBin( uiHorAbs, *pCtx ); … … 1281 1192 } 1282 1193 1283 #if H0111_MVD_L1_ZERO 1284 } 1285 #endif 1194 } 1286 1195 1287 1196 const TComMv cMv( uiHorSign ? -Int( uiHorAbs ): uiHorAbs, uiVerSign ? -Int( uiVerAbs ) : uiVerAbs ); … … 1323 1232 Void TDecSbac::parseDeltaQP( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) 1324 1233 { 1325 #if H0736_AVC_STYLE_QP_RANGE1326 1234 Int qp; 1327 #endif1328 1235 UInt uiDQp; 1329 1236 Int iDQp; … … 1333 1240 if ( uiDQp == 0 ) 1334 1241 { 1335 #if H0736_AVC_STYLE_QP_RANGE1336 1242 qp = pcCU->getRefQP(uiAbsPartIdx); 1337 #else1338 uiDQp = pcCU->getRefQP(uiAbsPartIdx);1339 #endif1340 1243 } 1341 1244 else 1342 1245 { 1343 1246 UInt uiSign; 1344 #if H0736_AVC_STYLE_QP_RANGE1345 1247 Int qpBdOffsetY = pcCU->getSlice()->getSPS()->getQpBDOffsetY(); 1346 #else1347 UInt uiQpBdOffsetY = 6*(g_uiBitIncrement + g_uiBitDepth - 8);1348 #endif1349 1248 m_pcTDecBinIf->decodeBinEP(uiSign); 1350 1249 1351 #if H0736_AVC_STYLE_QP_RANGE1352 1250 UInt uiMaxAbsDQpMinus1 = 24 + (qpBdOffsetY/2) + (uiSign); 1353 #else1354 UInt uiMaxAbsDQpMinus1 = 24 + (uiQpBdOffsetY/2) + (uiSign);1355 #endif1356 1251 UInt uiAbsDQpMinus1; 1357 1252 xReadUnaryMaxSymbol (uiAbsDQpMinus1, &m_cCUDeltaQpSCModel.get( 0, 0, 1 ), 1, uiMaxAbsDQpMinus1); … … 1364 1259 } 1365 1260 1366 #if H0736_AVC_STYLE_QP_RANGE1367 1261 qp = (((Int) pcCU->getRefQP( uiAbsPartIdx ) + iDQp + 52 + 2*qpBdOffsetY )%(52+qpBdOffsetY)) - qpBdOffsetY; 1368 #else1369 #if LOSSLESS_CODING1370 uiDQp = (pcCU->getRefQP(uiAbsPartIdx) + iDQp + 52) % 52;1371 #else1372 uiDQp = pcCU->getRefQP(uiAbsPartIdx) + iDQp;1373 #endif1374 #endif1375 1262 } 1376 1263 1377 1264 UInt uiAbsQpCUPartIdx = (uiAbsPartIdx>>(8-(pcCU->getSlice()->getPPS()->getMaxCuDQPDepth()<<1)))<<(8-(pcCU->getSlice()->getPPS()->getMaxCuDQPDepth()<<1)) ; 1378 1265 UInt uiQpCUDepth = min(uiDepth,pcCU->getSlice()->getPPS()->getMaxCuDQPDepth()) ; 1379 #if H0736_AVC_STYLE_QP_RANGE1380 1266 pcCU->setQPSubParts( qp, uiAbsQpCUPartIdx, uiQpCUDepth ); 1381 #else1382 pcCU->setQPSubParts( uiDQp, uiAbsQpCUPartIdx, uiQpCUDepth );1383 #endif1384 1267 } 1385 1268 … … 1422 1305 1423 1306 // posX 1424 #if LAST_CTX_REDUCTION1425 1307 Int widthCtx = eTType ? 4 : width; 1426 1308 const UInt *puiCtxIdxX = g_uiLastCtx + ( g_aucConvertToBit[ widthCtx ] * ( g_aucConvertToBit[ widthCtx ] + 3 ) ); 1427 #else1428 const UInt *puiCtxIdxX = g_uiLastCtx + ( g_aucConvertToBit[ width ] * ( g_aucConvertToBit[ width ] + 3 ) );1429 #endif1430 1309 for( uiPosLastX = 0; uiPosLastX < g_uiGroupIdx[ width - 1 ]; uiPosLastX++ ) 1431 1310 { 1432 #if LAST_CTX_REDUCTION1433 1311 if ( eTType ) 1434 1312 { … … 1437 1315 else 1438 1316 { 1439 #endif1440 1317 m_pcTDecBinIf->decodeBin( uiLast, *( pCtxX + puiCtxIdxX[ uiPosLastX ] ) ); 1441 #if LAST_CTX_REDUCTION 1442 } 1443 #endif 1318 } 1444 1319 if( !uiLast ) 1445 1320 { … … 1449 1324 1450 1325 // posY 1451 #if LAST_CTX_REDUCTION1452 1326 Int heightCtx = eTType? 4 : height; 1453 1327 const UInt *puiCtxIdxY = g_uiLastCtx + ( g_aucConvertToBit[ heightCtx ] * ( g_aucConvertToBit[ heightCtx ] + 3 ) ); 1454 #else1455 const UInt *puiCtxIdxY = g_uiLastCtx + ( g_aucConvertToBit[ height ] * ( g_aucConvertToBit[ height ] + 3 ) );1456 #endif1457 1328 for( uiPosLastY = 0; uiPosLastY < g_uiGroupIdx[ height - 1 ]; uiPosLastY++ ) 1458 1329 { 1459 #if LAST_CTX_REDUCTION1460 1330 if (eTType) 1461 1331 { … … 1464 1334 else 1465 1335 { 1466 #endif1467 1336 m_pcTDecBinIf->decodeBin( uiLast, *( pCtxY + puiCtxIdxY[ uiPosLastY ] ) ); 1468 #if LAST_CTX_REDUCTION 1469 } 1470 #endif 1337 } 1471 1338 if( !uiLast ) 1472 1339 { … … 1588 1455 UInt uiGoRiceParam = 0; 1589 1456 1590 #if MULTIBITS_DATA_HIDING1591 1457 UInt const tsig = pcCU->getSlice()->getPPS()->getTSIG(); 1592 1458 #if LOSSLESS_CODING … … 1604 1470 #endif 1605 1471 UInt absSum = 0; 1606 #endif // MULTIBITS_DATA_HIDING1607 1472 1608 1473 UInt uiSigCoeffGroupFlag[ MLS_GRP_NUM ]; … … 1613 1478 { 1614 1479 scanCG = g_auiSigLastScan[ uiScanIdx ][ uiLog2BlockSize > 3 ? uiLog2BlockSize-2-1 : 0 ]; 1615 #if MULTILEVEL_SIGMAP_EXT1616 1480 if( uiLog2BlockSize == 3 ) 1617 1481 { … … 1622 1486 scanCG = g_sigLastScanCG32x32; 1623 1487 } 1624 #endif1625 1488 } 1626 1489 else … … 1635 1498 Int numNonZero = 0; 1636 1499 1637 #if MULTIBITS_DATA_HIDING1638 1500 Int lastNZPosInCG = -1, firstNZPosInCG = SCAN_SET_SIZE; 1639 #endif1640 1501 1641 1502 Int pos[SCAN_SET_SIZE]; 1642 1503 if( iScanPosSig == (Int) uiScanPosLast ) 1643 1504 { 1644 #if MULTIBITS_DATA_HIDING1645 1505 lastNZPosInCG = iScanPosSig; 1646 1506 firstNZPosInCG = iScanPosSig; 1647 #endif1648 1507 iScanPosSig--; 1649 1508 pos[ numNonZero ] = uiBlkPosLast; … … 1651 1510 } 1652 1511 1653 #if !MULTILEVEL_SIGMAP_EXT1654 if( blockType > 3 )1655 {1656 #endif1657 1512 // decode significant_coeffgroup_flag 1658 1513 Int iCGBlkPos = scanCG[ iSubSet ]; 1659 1514 Int iCGPosY = iCGBlkPos / uiNumBlkSide; 1660 1515 Int iCGPosX = iCGBlkPos - (iCGPosY * uiNumBlkSide); 1661 #if MULTILEVEL_SIGMAP_EXT1662 1516 if( uiWidth == 8 && uiHeight == 8 && (uiScanIdx == SCAN_HOR || uiScanIdx == SCAN_VER) ) 1663 1517 { … … 1665 1519 iCGPosX = (uiScanIdx == SCAN_VER ? iCGBlkPos : 0); 1666 1520 } 1667 #endif1668 #if !REMOVE_INFER_SIGGRP1669 Bool bInferredCGFlag = false;1670 #endif1671 #if REMOVE_INFER_SIGGRP1672 1521 if( iSubSet == iLastScanSet || iSubSet == 0) 1673 #else1674 if( iSubSet == iLastScanSet )1675 #endif1676 1522 { 1677 1523 uiSigCoeffGroupFlag[ iCGBlkPos ] = 1; … … 1679 1525 else 1680 1526 { 1681 #if !REMOVE_INFER_SIGGRP1682 #if MULTILEVEL_SIGMAP_EXT1683 if( !TComTrQuant::bothCGNeighboursOne( uiSigCoeffGroupFlag, iCGPosX, iCGPosY, uiScanIdx, uiWidth, uiHeight) && ( iSubSet ) )1684 #else1685 if( !TComTrQuant::bothCGNeighboursOne( uiSigCoeffGroupFlag, iCGPosX, iCGPosY, uiWidth, uiHeight) && ( iSubSet ) )1686 #endif1687 {1688 #endif1689 1527 UInt uiSigCoeffGroup; 1690 #if MULTILEVEL_SIGMAP_EXT1691 1528 UInt uiCtxSig = TComTrQuant::getSigCoeffGroupCtxInc( uiSigCoeffGroupFlag, iCGPosX, iCGPosY, uiScanIdx, uiWidth, uiHeight ); 1692 #else1693 UInt uiCtxSig = TComTrQuant::getSigCoeffGroupCtxInc( uiSigCoeffGroupFlag, iCGPosX, iCGPosY, uiWidth, uiHeight );1694 #endif1695 1529 m_pcTDecBinIf->decodeBin( uiSigCoeffGroup, baseCoeffGroupCtx[ uiCtxSig ] ); 1696 1530 uiSigCoeffGroupFlag[ iCGBlkPos ] = uiSigCoeffGroup; 1697 #if !REMOVE_INFER_SIGGRP1698 }1699 else1700 {1701 uiSigCoeffGroupFlag[ iCGBlkPos ] = 1;1702 bInferredCGFlag = true;1703 }1704 #endif1705 1531 } 1706 1532 … … 1716 1542 if( uiSigCoeffGroupFlag[ iCGBlkPos ] ) 1717 1543 { 1718 #if REMOVE_INFER_SIGGRP1719 1544 if( iScanPosSig > iSubPos || iSubSet == 0 || numNonZero ) 1720 #else1721 if( iScanPosSig > iSubPos || bInferredCGFlag || numNonZero )1722 #endif1723 1545 { 1724 1546 uiCtxSig = TComTrQuant::getSigCtxInc( pcCoef, uiPosX, uiPosY, blockType, uiWidth, uiHeight, eTType ); … … 1735 1557 pos[ numNonZero ] = uiBlkPos; 1736 1558 numNonZero ++; 1737 #if MULTIBITS_DATA_HIDING1738 1559 if( lastNZPosInCG == -1 ) 1739 1560 { … … 1741 1562 } 1742 1563 firstNZPosInCG = iScanPosSig; 1743 #endif1744 1564 } 1745 1565 } 1746 #if !MULTILEVEL_SIGMAP_EXT1747 }1748 else1749 {1750 for( ; iScanPosSig >= iSubPos; iScanPosSig-- )1751 {1752 UInt uiBlkPos = scan[ iScanPosSig ];1753 UInt uiPosY = uiBlkPos >> uiLog2BlockSize;1754 UInt uiPosX = uiBlkPos - ( uiPosY << uiLog2BlockSize );1755 UInt uiSig = 0;1756 UInt uiCtxSig = TComTrQuant::getSigCtxInc( pcCoef, uiPosX, uiPosY, blockType, uiWidth, uiHeight, eTType );1757 m_pcTDecBinIf->decodeBin( uiSig, baseCtx[ uiCtxSig ] );1758 pcCoef[ uiBlkPos ] = uiSig;1759 if( uiSig )1760 {1761 pos[ numNonZero ] = uiBlkPos;1762 numNonZero ++;1763 #if MULTIBITS_DATA_HIDING1764 if( lastNZPosInCG == -1 )1765 {1766 lastNZPosInCG = iScanPosSig;1767 }1768 firstNZPosInCG = iScanPosSig;1769 #endif1770 }1771 }1772 }1773 #endif1774 1566 1775 1567 1776 1568 if( numNonZero ) 1777 1569 { 1778 #if MULTIBITS_DATA_HIDING1779 1570 Bool signHidden = ( lastNZPosInCG - firstNZPosInCG >= (Int)tsig ); 1780 1571 absSum = 0; 1781 #endif // MULTIBITS_DATA_HIDING1782 1572 1783 1573 UInt c1 = 1; 1784 #if !RESTRICT_GR1GR2FLAG_NUMBER1785 UInt c2 = 0;1786 #endif1787 #if LEVEL_CTX_LUMA_RED1788 1574 UInt uiCtxSet = (iSubSet > 0 && eTType==TEXT_LUMA) ? 2 : 0; 1789 #else1790 UInt uiCtxSet = (iSubSet > 0 && eTType==TEXT_LUMA) ? 3 : 0;1791 #endif1792 1575 UInt uiBin; 1793 1576 … … 1795 1578 { 1796 1579 uiCtxSet++; 1797 #if !LEVEL_CTX_LUMA_RED1798 if(eTType==TEXT_LUMA && uiNumOne > 3)1799 {1800 uiCtxSet++;1801 }1802 #endif1803 1580 } 1804 1581 … … 1807 1584 Int absCoeff[SCAN_SET_SIZE]; 1808 1585 1809 #if RESTRICT_GR1GR2FLAG_NUMBER1810 1586 for ( Int i = 0; i < numNonZero; i++) absCoeff[i] = 1; 1811 1587 Int numC1Flag = min(numNonZero, C1FLAG_NUMBER); … … 1813 1589 1814 1590 for( Int idx = 0; idx < numC1Flag; idx++ ) 1815 #else1816 for( Int idx = 0; idx < numNonZero; idx++ )1817 #endif1818 1591 { 1819 1592 m_pcTDecBinIf->decodeBin( uiBin, baseCtxMod[c1] ); … … 1821 1594 { 1822 1595 c1 = 0; 1823 #if RESTRICT_GR1GR2FLAG_NUMBER1824 1596 if (firstC2FlagIdx == -1) 1825 1597 { 1826 1598 firstC2FlagIdx = idx; 1827 1599 } 1828 #endif1829 1600 } 1830 1601 else if( (c1 < 3) && (c1 > 0) ) … … 1837 1608 if (c1 == 0) 1838 1609 { 1839 #if RESTRICT_GR1GR2FLAG_NUMBER1840 1610 baseCtxMod = ( eTType==TEXT_LUMA ) ? m_cCUAbsSCModel.get( 0, 0 ) + uiCtxSet : m_cCUAbsSCModel.get( 0, 0 ) + NUM_ABS_FLAG_CTX_LUMA + uiCtxSet; 1841 1611 if ( firstC2FlagIdx != -1) … … 1844 1614 absCoeff[ firstC2FlagIdx ] = uiBin + 2; 1845 1615 } 1846 #else 1847 baseCtxMod = ( eTType==TEXT_LUMA ) ? m_cCUAbsSCModel.get( 0, 0 ) + 3 * uiCtxSet : m_cCUAbsSCModel.get( 0, 0 ) + NUM_ABS_FLAG_CTX_LUMA + 3 * uiCtxSet; 1616 } 1617 1618 UInt coeffSigns; 1619 if ( signHidden && beValid ) 1620 { 1621 m_pcTDecBinIf->decodeBinsEP( coeffSigns, numNonZero-1 ); 1622 coeffSigns <<= 32 - (numNonZero-1); 1623 } 1624 else 1625 { 1626 m_pcTDecBinIf->decodeBinsEP( coeffSigns, numNonZero ); 1627 coeffSigns <<= 32 - numNonZero; 1628 } 1629 1630 Int iFirstCoeff2 = 1; 1631 if (c1 == 0 || numNonZero > C1FLAG_NUMBER) 1632 { 1848 1633 for( Int idx = 0; idx < numNonZero; idx++ ) 1849 1634 { 1850 if( absCoeff[ idx ] == 2 )1851 {1852 m_pcTDecBinIf->decodeBin( uiBin, baseCtxMod[c2] );1853 absCoeff[ idx ] = uiBin + 2;1854 c2 += (c2 < 2);1855 uiNumOne++;1856 }1857 }1858 #endif1859 }1860 1861 #if MULTIBITS_DATA_HIDING1862 UInt coeffSigns;1863 if ( signHidden && beValid )1864 {1865 m_pcTDecBinIf->decodeBinsEP( coeffSigns, numNonZero-1 );1866 coeffSigns <<= 32 - (numNonZero-1);1867 }1868 else1869 {1870 m_pcTDecBinIf->decodeBinsEP( coeffSigns, numNonZero );1871 coeffSigns <<= 32 - numNonZero;1872 }1873 #else1874 UInt coeffSigns;1875 m_pcTDecBinIf->decodeBinsEP( coeffSigns, numNonZero );1876 coeffSigns <<= 32 - numNonZero;1877 #endif1878 1879 #if RESTRICT_GR1GR2FLAG_NUMBER1880 Int iFirstCoeff2 = 1;1881 if (c1 == 0 || numNonZero > C1FLAG_NUMBER)1882 #else1883 if (c1 == 0)1884 #endif1885 {1886 for( Int idx = 0; idx < numNonZero; idx++ )1887 {1888 #if RESTRICT_GR1GR2FLAG_NUMBER1889 1635 UInt baseLevel = (idx < C1FLAG_NUMBER)? (2 + iFirstCoeff2) : 1; 1890 1636 … … 1901 1647 uiNumOne++; 1902 1648 } 1903 #else1904 if( absCoeff[ idx ] == 3 )1905 {1906 UInt uiLevel;1907 xReadGoRiceExGolomb( uiLevel, uiGoRiceParam );1908 absCoeff[ idx ] = uiLevel + 3;1909 }1910 #endif1911 1649 } 1912 1650 } … … 1915 1653 { 1916 1654 Int blkPos = pos[ idx ]; 1917 #if MULTIBITS_DATA_HIDING1918 1655 // Signs applied later. 1919 1656 pcCoef[ blkPos ] = absCoeff[ idx ]; … … 1932 1669 coeffSigns <<= 1; 1933 1670 } 1934 #else1935 Int sign = static_cast<Int>( coeffSigns ) >> 31;1936 pcCoef[ blkPos ] = ( absCoeff[ idx ] ^ sign ) - sign;1937 coeffSigns <<= 1;1938 #endif1939 1671 } 1940 1672 } … … 1949 1681 1950 1682 1951 #if SAO_UNIT_INTERLEAVING1952 1683 Void TDecSbac::parseSaoUvlc (UInt& ruiVal) 1953 1684 { … … 2186 1917 } 2187 1918 } 2188 #endif2189 1919 2190 1920 /** … … 2217 1947 } 2218 1948 2219 #if OL_FLUSH2220 1949 Void TDecSbac::decodeFlush ( ) 2221 1950 { … … 2225 1954 2226 1955 } 2227 #endif2228 1956 2229 1957 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX || (LGE_EDGE_INTRA_A0070 && LGE_EDGE_INTRA_DELTA_DC) -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecSbac.h
r292 r294 74 74 Void xCopyFrom ( TDecSbac* pSrc ); 75 75 Void xCopyContextsFrom ( TDecSbac* pSrc ); 76 #if OL_FLUSH77 76 Void decodeFlush(); 78 #endif79 77 80 78 #if CABAC_INIT_FLAG … … 95 93 Void parseSPS ( TComSPS* pcSPS ) {} 96 94 #endif 97 #if TILES_OR_ENTROPY_SYNC_IDC98 95 Void parsePPS ( TComPPS* pcPPS, ParameterSetManagerDecoder *parameterSet ) {} 99 #else100 Void parsePPS ( TComPPS* pcPPS ) {}101 #endif102 96 Void parseAPS ( TComAPS* pAPS ) {} 103 97 void parseSEI(SEImessages&) {} 104 98 105 #if LCU_SYNTAX_ALF106 99 #if MTK_DEPTH_MERGE_TEXTURE_CANDIDATE_C0137 107 100 Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet, bool isDepth) {} 108 101 #else 109 102 Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl, AlfParamSet& alfParamSet) {} 110 #endif111 #else112 Void parseSliceHeader ( TComSlice*& rpcSlice, ParameterSetManagerDecoder *parameterSetManager, AlfCUCtrlInfo &alfCUCtrl ) {}113 103 #endif 114 104 … … 120 110 #endif 121 111 122 #if SAO_UNIT_INTERLEAVING123 112 Void parseSaoUvlc ( UInt& ruiVal ); 124 113 Void parseSaoSvlc ( Int& riVal ); … … 129 118 Void parseSaoOneLcuInterleaving(Int rx, Int ry, SAOParam* pSaoParam, TComDataCU* pcCU, Int iCUAddrInSlice, Int iCUAddrUpInSlice, Bool bLFCrossSliceBoundaryFlag); 130 119 Void parseSaoOffset (SaoLcuParam* psSaoLcuParam); 131 #endif132 120 133 121 #if RWTH_SDC_DLT_B0036 … … 256 244 ContextModel3DBuffer m_cALFUvlcSCModel; 257 245 ContextModel3DBuffer m_cALFSvlcSCModel; 258 #if AMP_CTX259 246 ContextModel3DBuffer m_cCUAMPSCModel; 260 #else261 ContextModel3DBuffer m_cCUXPosiSCModel;262 ContextModel3DBuffer m_cCUYPosiSCModel;263 #endif264 247 ContextModel3DBuffer m_cSaoFlagSCModel; 265 248 ContextModel3DBuffer m_cSaoUvlcSCModel; 266 249 ContextModel3DBuffer m_cSaoSvlcSCModel; 267 #if SAO_UNIT_INTERLEAVING268 250 ContextModel3DBuffer m_cSaoMergeLeftSCModel; 269 251 ContextModel3DBuffer m_cSaoMergeUpSCModel; 270 252 ContextModel3DBuffer m_cSaoTypeIdxSCModel; 271 #endif272 253 273 254 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecSlice.cpp
r210 r294 148 148 UInt uiCol=0, uiLin=0, uiSubStrm=0; 149 149 150 #if !REMOVE_TILE_DEPENDENCE151 Int iBreakDep;152 #endif153 150 UInt uiTileCol; 154 151 UInt uiTileStartLCU; … … 163 160 pcCU = rpcPic->getCU( iCUAddr ); 164 161 pcCU->initCU( rpcPic, iCUAddr ); 165 #if !REMOVE_TILE_DEPENDENCE166 iBreakDep = rpcPic->getPicSym()->getTileBoundaryIndependenceIdr();167 #endif168 162 uiTileCol = rpcPic->getPicSym()->getTileIdxMap(iCUAddr) % (rpcPic->getPicSym()->getNumColumnsMinus1()+1); // what column of tiles are we in? 169 163 uiTileStartLCU = rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(iCUAddr))->getFirstCUAddr(); … … 175 169 uiLin = iCUAddr / uiWidthInLCUs; 176 170 // inherit from TR if necessary, select substream to use. 177 #if WPP_SIMPLIFICATION178 171 if( iSymbolMode && pcSlice->getPPS()->getNumSubstreams() > 1 ) 179 #else 180 if( iSymbolMode && pcSlice->getPPS()->getEntropyCodingSynchro() ) 181 #endif 182 { 183 #if !REMOVE_TILE_DEPENDENCE 184 #if WPP_SIMPLIFICATION 185 if (iBreakDep && pcSlice->getPPS()->getNumSubstreams() > 1) 186 #else 187 if (iBreakDep && pcSlice->getPPS()->getEntropyCodingSynchro()) 188 #endif 189 #else 190 #if WPP_SIMPLIFICATION 172 { 191 173 if (pcSlice->getPPS()->getNumSubstreams() > 1) 192 #else193 if (pcSlice->getPPS()->getEntropyCodingSynchro())194 #endif195 #endif196 174 { 197 175 // independent tiles => substreams are "per tile". iNumSubstreams has already been multiplied. … … 207 185 m_pcEntropyDecoder->setBitstream( ppcSubstreams[uiSubStrm] ); 208 186 // Synchronize cabac probabilities with upper-right LCU if it's available and we're at the start of a line. 209 #if WPP_SIMPLIFICATION210 187 if (pcSlice->getPPS()->getNumSubstreams() > 1 && uiCol == uiTileLCUX) 211 #else212 if (pcSlice->getPPS()->getEntropyCodingSynchro() && uiCol == uiTileLCUX)213 #endif214 188 { 215 189 // We'll sync if the TR is available. … … 217 191 UInt uiWidthInCU = rpcPic->getFrameWidthInCU(); 218 192 TComDataCU *pcCUTR = NULL; 219 #if WPP_SIMPLIFICATION220 193 if ( pcCUUp && ((iCUAddr%uiWidthInCU+1) < uiWidthInCU) ) 221 194 { 222 195 pcCUTR = rpcPic->getCU( iCUAddr - uiWidthInCU + 1 ); 223 196 } 224 #else225 if ( pcCUUp && ((iCUAddr%uiWidthInCU+pcSlice->getPPS()->getEntropyCodingSynchro()) < uiWidthInCU) )226 {227 pcCUTR = rpcPic->getCU( iCUAddr - uiWidthInCU + pcSlice->getPPS()->getEntropyCodingSynchro() );228 }229 #endif230 197 UInt uiMaxParts = 1<<(pcSlice->getSPS()->getMaxCUDepth()<<1); 231 198 … … 233 200 ((pcCUTR==NULL) || (pcCUTR->getSlice()==NULL) || 234 201 ((pcCUTR->getSCUAddr()+uiMaxParts-1) < pcSlice->getSliceCurStartCUAddr()) || 235 #if !REMOVE_TILE_DEPENDENCE236 (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr() && (rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(iCUAddr)))237 #else238 202 ((rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(iCUAddr))) 239 #endif240 203 ))|| 241 204 (true/*bEnforceEntropySliceRestriction*/ && 242 205 ((pcCUTR==NULL) || (pcCUTR->getSlice()==NULL) || 243 206 ((pcCUTR->getSCUAddr()+uiMaxParts-1) < pcSlice->getEntropySliceCurStartCUAddr()) || 244 #if !REMOVE_TILE_DEPENDENCE245 (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr() && (rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(iCUAddr)))246 #else247 207 ((rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(iCUAddr))) 248 #endif249 208 )) 250 209 ) … … 260 219 pcSbacDecoder->load(&pcSbacDecoders[uiSubStrm]); //this load is used to simplify the code (avoid to change all the call to pcSbacDecoders) 261 220 } 262 #if WPP_SIMPLIFICATION263 221 else if ( iSymbolMode && pcSlice->getPPS()->getNumSubstreams() <= 1 ) 264 #else265 else if ( iSymbolMode && !pcSlice->getPPS()->getEntropyCodingSynchro() )266 #endif267 222 { 268 223 // Set variables to appropriate values to avoid later code change. … … 273 228 (iCUAddr!=0) && (iCUAddr!=rpcPic->getPicSym()->getPicSCUAddr(rpcPic->getSlice(rpcPic->getCurrSliceIdx())->getSliceCurStartCUAddr())/rpcPic->getNumPartInCU())) // !1st in frame && !1st in slice 274 229 { 275 #if WPP_SIMPLIFICATION276 230 if (pcSlice->getPPS()->getNumSubstreams() > 1) 277 #else278 if (pcSlice->getPPS()->getEntropyCodingSynchro())279 #endif280 231 { 281 232 // We're crossing into another tile, tiles are independent. … … 330 281 } 331 282 332 #if !REMOVE_TILE_DEPENDENCE333 if ( (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr()==0) && (rpcPic->getPicSym()->getNumColumnsMinus1()!=0) )334 {335 // Synchronize cabac probabilities with LCU among Tiles336 if( (uiTileLCUX != 0) &&337 (iCUAddr == rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(iCUAddr))->getFirstCUAddr()) )338 {339 TComDataCU *pcCULeft = pcCU->getCULeft();340 UInt uiMaxParts = 1<<(pcSlice->getSPS()->getMaxCUDepth()<<1);341 342 if ( (true/*bEnforceSliceRestriction*/ &&343 ((pcCULeft==NULL) || (pcCULeft->getSlice()==NULL) ||344 ((pcCULeft->getSCUAddr()+uiMaxParts-1) < pcSlice->getSliceCurStartCUAddr())345 )346 )||347 (true/*bEnforceEntropySliceRestriction*/ &&348 ((pcCULeft==NULL) || (pcCULeft->getSlice()==NULL) ||349 ((pcCULeft->getSCUAddr()+uiMaxParts-1) < pcSlice->getEntropySliceCurStartCUAddr())350 )351 )352 )353 {354 // Left not available.355 }356 else357 {358 // Left is available, we use it.359 pcSbacDecoders[uiSubStrm].loadContexts( &m_pcBufferLowLatSbacDecoders[uiTileCol-1] );360 pcSbacDecoder->loadContexts(&pcSbacDecoders[uiSubStrm]); //this load is used to simplify the code (avoid to change all the call to pcSbacDecoders)361 }362 }363 }364 #endif365 283 366 284 … … 368 286 g_bJustDoIt = g_bEncDecTraceEnable; 369 287 #endif 370 #if SAO_UNIT_INTERLEAVING371 288 if ( pcSlice->getSPS()->getUseSAO() && pcSlice->getSaoInterleavingFlag() && pcSlice->getSaoEnabledFlag() ) 372 289 { … … 384 301 pcSbacDecoder->parseSaoOneLcuInterleaving(rx, ry, pcSlice->getAPS()->getSaoParam(),pcCU, cuAddrInSlice, cuAddrUpInSlice, pcSlice->getSPS()->getLFCrossSliceBoundaryFlag() ); 385 302 } 386 #endif387 303 388 304 m_pcCuDecoder->decodeCU ( pcCU, uiIsLast ); … … 394 310 if( iSymbolMode ) 395 311 { 396 #if OL_FLUSH397 312 /*If at the end of a LCU line but not at the end of a substream, perform CABAC flush*/ 398 #if WPP_SIMPLIFICATION399 313 if (!uiIsLast && pcSlice->getPPS()->getNumSubstreams() > 1) 400 #else 401 if (!uiIsLast && pcSlice->getPPS()->getCabacIstateReset()) 402 #endif 403 { 404 #if !REMOVE_TILE_DEPENDENCE 405 if ((iBreakDep && (uiCol == uiTileLCUX+uiTileWidth-1) && (uiLin+iNumSubstreamsPerTile < uiTileLCUY+uiTileHeight)) 406 || (!iBreakDep && (uiCol == uiWidthInLCUs-1) && (uiLin+iNumSubstreams < pcCU->getPic()->getFrameHeightInCU()))) 407 #else 314 { 408 315 if ((uiCol == uiTileLCUX+uiTileWidth-1) && (uiLin+iNumSubstreamsPerTile < uiTileLCUY+uiTileHeight)) 409 #endif410 316 { 411 317 m_pcEntropyDecoder->decodeFlush(); 412 318 } 413 319 } 414 #endif415 320 pcSbacDecoders[uiSubStrm].load(pcSbacDecoder); 416 321 417 322 //Store probabilities of second LCU in line into buffer 418 #if WPP_SIMPLIFICATION419 323 if (pcSlice->getPPS()->getNumSubstreams() > 1 && (uiCol == uiTileLCUX+1)) 420 #else421 if (pcSlice->getPPS()->getEntropyCodingSynchro() && (uiCol == uiTileLCUX+pcSlice->getPPS()->getEntropyCodingSynchro()))422 #endif423 324 { 424 325 m_pcBufferSbacDecoders[uiTileCol].loadContexts( &pcSbacDecoders[uiSubStrm] ); … … 426 327 427 328 } 428 #if !REMOVE_TILE_DEPENDENCE429 if ( (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr()==0) && (rpcPic->getPicSym()->getNumColumnsMinus1()!=0) )430 {431 pcSbacDecoders[uiSubStrm].load(pcSbacDecoder);432 //Store probabilties for next tile433 if( (uiLin == (rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(iCUAddr))->getFirstCUAddr() / uiWidthInLCUs )) &&434 (uiCol == rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(iCUAddr))->getRightEdgePosInCU()) )435 {436 m_pcBufferLowLatSbacDecoders[uiTileCol].loadContexts( &pcSbacDecoders[uiSubStrm] );437 }438 }439 #endif440 329 } 441 330 -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecTop.cpp
r280 r294 525 525 xUpdateGopSize(pcSlice); 526 526 527 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER528 527 m_iMaxRefPicNum = pcSlice->getSPS()->getMaxDecPicBuffering(pcSlice->getTLayer())+pcSlice->getSPS()->getNumReorderPics(pcSlice->getTLayer()) + 1; // +1 to have space for the picture currently being decoded 529 #else530 m_iMaxRefPicNum = pcSlice->getSPS()->getMaxNumberOfReferencePictures()+pcSlice->getSPS()->getNumReorderFrames() + 1; // +1 to have space for the picture currently being decoded531 #endif532 528 533 529 #if DEPTH_MAP_GENERATION … … 716 712 } 717 713 718 #if !LCU_SYNTAX_ALF719 // create ALF temporary buffer720 m_cAdaptiveLoopFilter.create( sps->getPicWidthInLumaSamples(), sps->getPicHeightInLumaSamples(), g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth );721 #endif722 714 m_cSAO.create( sps->getPicWidthInLumaSamples(), sps->getPicHeightInLumaSamples(), g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth ); 723 715 m_cLoopFilter. create( g_uiMaxCUDepth ); 724 716 } 725 717 726 #if SKIPFRAME_BUGFIX727 718 Bool TDecTop::xDecodeSlice(InputNALUnit &nalu, Int &iSkipFrame, Int iPOCLastDisplay ) 728 #else729 Bool TDecTop::xDecodeSlice(InputNALUnit &nalu, Int iSkipFrame, Int iPOCLastDisplay )730 #endif731 719 { 732 720 TComPic*& pcPic = m_pcPic; … … 785 773 } 786 774 787 #if NAL_REF_FLAG788 775 m_apcSlicePilot->setReferenced(nalu.m_nalRefFlag); 789 #else790 m_apcSlicePilot->setReferenced(nalu.m_nalRefIDC != NAL_REF_IDC_PRIORITY_LOWEST);791 #endif792 776 m_apcSlicePilot->setTLayerInfo(nalu.m_temporalId); 793 777 794 778 // ALF CU parameters should be part of the slice header -> needs to be fixed 795 #if LCU_SYNTAX_ALF796 779 #if MTK_DEPTH_MERGE_TEXTURE_CANDIDATE_C0137 797 780 m_cEntropyDecoder.decodeSliceHeader (m_apcSlicePilot, &m_parameterSetManagerDecoder, m_cGopDecoder.getAlfCuCtrlParam(), m_cGopDecoder.getAlfParamSet(),m_apcSlicePilot->getVPS()->getDepthFlag(nalu.m_layerId)); … … 799 782 m_cEntropyDecoder.decodeSliceHeader (m_apcSlicePilot, &m_parameterSetManagerDecoder, m_cGopDecoder.getAlfCuCtrlParam(), m_cGopDecoder.getAlfParamSet()); 800 783 #endif 801 #else802 m_cEntropyDecoder.decodeSliceHeader (m_apcSlicePilot, &m_parameterSetManagerDecoder, m_cGopDecoder.getAlfCuCtrlParam() );803 #endif804 784 // byte align 805 785 { … … 816 796 if (m_apcSlicePilot->isNextSlice() && m_apcSlicePilot->getPOC()!=m_prevPOC && !m_bFirstSliceInSequence) 817 797 { 818 #if START_DECODING_AT_CRA819 798 if (m_prevPOC >= m_pocRandomAccess) 820 799 { … … 823 802 } 824 803 m_prevPOC = m_apcSlicePilot->getPOC(); 825 #else826 m_prevPOC = m_apcSlicePilot->getPOC();827 return true;828 #endif829 804 } 830 805 // actual decoding starts here … … 846 821 } 847 822 //detect lost reference picture and insert copy of earlier frame. 848 #if START_DECODING_AT_CRA849 823 while(m_apcSlicePilot->checkThatAllRefPicsAreAvailable(m_cListPic, m_apcSlicePilot->getRPS(), true, m_pocRandomAccess) > 0) 850 #else851 while(m_apcSlicePilot->checkThatAllRefPicsAreAvailable(m_cListPic, m_apcSlicePilot->getRPS(), true) > 0)852 #endif853 824 { 854 825 xCreateLostPicture(m_apcSlicePilot->checkThatAllRefPicsAreAvailable(m_cListPic, m_apcSlicePilot->getRPS(), false)-1); … … 897 868 UInt i, j, p; 898 869 899 #if !REMOVE_TILE_DEPENDENCE900 //set the TileBoundaryIndependenceIdr901 if(pcSlice->getPPS()->getTileBehaviorControlPresentFlag() == 1)902 {903 pcPic->getPicSym()->setTileBoundaryIndependenceIdr( pcSlice->getPPS()->getTileBoundaryIndependenceIdr() );904 }905 else906 {907 pcPic->getPicSym()->setTileBoundaryIndependenceIdr( pcSlice->getPPS()->getSPS()->getTileBoundaryIndependenceIdr() );908 }909 #endif910 870 911 871 if( pcSlice->getPPS()->getColumnRowInfoPresent() == 1 ) … … 1265 1225 { 1266 1226 TComSPS* sps = new TComSPS(); 1267 #if RPS_IN_SPS1268 1227 TComRPSList* rps = new TComRPSList(); 1269 1228 sps->setRPSList(rps); 1270 #endif1271 1229 #if HHI_MPI || OL_QTLIMIT_PREDCODING_B0068 1272 1230 m_cEntropyDecoder.decodeSPS( sps, m_isDepth ); … … 1275 1233 #endif 1276 1234 m_parameterSetManagerDecoder.storePrefetchedSPS(sps); 1277 #if LCU_SYNTAX_ALF1278 1235 m_cAdaptiveLoopFilter.create( sps->getPicWidthInLumaSamples(), sps->getPicHeightInLumaSamples(), g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth ); 1279 #endif1280 1236 } 1281 1237 1282 1238 Void TDecTop::xDecodePPS() 1283 1239 { 1284 #if !RPS_IN_SPS1285 TComRPSList* rps = new TComRPSList();1286 #endif1287 1240 TComPPS* pps = new TComPPS(); 1288 #if !RPS_IN_SPS1289 pps->setRPSList(rps);1290 #endif1291 #if TILES_OR_ENTROPY_SYNC_IDC1292 1241 m_cEntropyDecoder.decodePPS( pps, &m_parameterSetManagerDecoder ); 1293 #else1294 m_cEntropyDecoder.decodePPS( pps );1295 #endif1296 1242 m_parameterSetManagerDecoder.storePrefetchedPPS( pps ); 1297 1243 … … 1346 1292 case NAL_UNIT_CODED_SLICE: 1347 1293 case NAL_UNIT_CODED_SLICE_IDR: 1348 #if H0566_TLA1349 1294 #if !QC_REM_IDV_B0046 1350 1295 case NAL_UNIT_CODED_SLICE_IDV: … … 1352 1297 case NAL_UNIT_CODED_SLICE_CRA: 1353 1298 case NAL_UNIT_CODED_SLICE_TLA: 1354 #else1355 case NAL_UNIT_CODED_SLICE_CDR:1356 #endif1357 1299 return xDecodeSlice(nalu, iSkipFrame, iPOCLastDisplay); 1358 1300 break; … … 1375 1317 sps = pSPSV0; 1376 1318 m_parameterSetManagerDecoder.storePrefetchedSPS(sps); 1377 #if LCU_SYNTAX_ALF1378 1319 m_cAdaptiveLoopFilter.create( sps->getPicWidthInLumaSamples(), sps->getPicHeightInLumaSamples(), g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth ); 1379 #endif1380 1320 } 1381 1321 … … 1412 1352 else if (m_pocRandomAccess == MAX_INT) // start of random access point, m_pocRandomAccess has not been set yet. 1413 1353 { 1414 #if H0566_TLA1415 1354 if( m_apcSlicePilot->getNalUnitTypeBaseViewMvc() == NAL_UNIT_CODED_SLICE_CRA ) 1416 #else1417 if( m_apcSlicePilot->getNalUnitTypeBaseViewMvc() == NAL_UNIT_CODED_SLICE_CDR )1418 #endif1419 1355 { 1420 1356 m_pocRandomAccess = m_apcSlicePilot->getPOC(); // set the POC random access since we need to skip the reordered pictures in CRA. … … 1426 1362 else 1427 1363 { 1428 #if START_DECODING_AT_CRA1429 1364 static bool warningMessage = false; 1430 1365 if(!warningMessage) … … 1434 1369 } 1435 1370 return true; 1436 #else1437 printf("\nUnsafe random access point. Decoder may crash.");1438 m_pocRandomAccess = 0;1439 #endif1440 1371 } 1441 1372 } … … 1458 1389 m_cSAO.allocSaoParam(pAPS->getSaoParam()); 1459 1390 pAPS->createAlfParam(); 1460 #if !LCU_SYNTAX_ALF1461 m_cAdaptiveLoopFilter.allocALFParam(pAPS->getAlfParam());1462 #endif1463 1391 } 1464 1392 -
branches/HTM-5.1-dev0/source/Lib/TLibDecoder/TDecTop.h
r280 r294 282 282 Void decodeAPS( TComAPS* cAPS) { m_cEntropyDecoder.decodeAPS(cAPS); }; 283 283 Void xActivateParameterSets(); 284 #if SKIPFRAME_BUGFIX285 284 Bool xDecodeSlice(InputNALUnit &nalu, Int &iSkipFrame, Int iPOCLastDisplay); 286 #else287 Bool xDecodeSlice(InputNALUnit &nalu, Int iSkipFrame, Int iPOCLastDisplay);288 #endif289 285 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 290 286 Void xDecodeVPS(); -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/NALwrite.cpp
r210 r294 56 56 57 57 bsNALUHeader.write(0,1); // forbidden_zero_flag 58 #if NAL_REF_FLAG59 58 bsNALUHeader.write(nalu.m_nalRefFlag? 1 : 0, 1); // nal_ref_flag 60 59 bsNALUHeader.write(nalu.m_nalUnitType, 6); // nal_unit_type 61 #else62 bsNALUHeader.write(nalu.m_nalRefIDC, 2); // nal_ref_idc63 bsNALUHeader.write(nalu.m_nalUnitType, 5); // nal_unit_type64 #endif65 60 66 61 #if QC_MVHEVC_B0046 … … 72 67 bsNALUHeader.write(nalu.m_layerId + 1, 5); // layer_id_plus1 73 68 #else 74 #if H038875 69 bsNALUHeader.write(nalu.m_temporalId, 3); // temporal_id 76 70 // bsNALUHeader.write(1, 5); // reserved_one_5bits 77 71 bsNALUHeader.write(nalu.m_viewId+1,4); 78 72 bsNALUHeader.write(nalu.m_isDepth,1); 79 #else80 switch (nalu.m_nalUnitType)81 {82 case NAL_UNIT_CODED_SLICE:83 case NAL_UNIT_CODED_SLICE_IDR:84 #if H0566_TLA85 #if !QC_REM_IDV_B004686 case NAL_UNIT_CODED_SLICE_IDV:87 #endif88 case NAL_UNIT_CODED_SLICE_CRA:89 case NAL_UNIT_CODED_SLICE_TLA:90 #else91 case NAL_UNIT_CODED_SLICE_CDR:92 #endif93 bsNALUHeader.write(nalu.m_temporalId, 3); // temporal_id94 bsNALUHeader.write(nalu.m_OutputFlag, 1); // output_flag95 // bsNALUHeader.write(1, 4); // reserved_one_4bits96 bsNALUHeader.write(nalu.m_viewId+1,3);97 bsNALUHeader.write(nalu.m_isDepth,1);98 break;99 default: break;100 }101 #endif102 73 #endif 103 74 #endif … … 209 180 { 210 181 naluDest.m_nalUnitType = naluSrc.m_nalUnitType; 211 #if NAL_REF_FLAG212 182 naluDest.m_nalRefFlag = naluSrc.m_nalRefFlag; 213 #else214 naluDest.m_nalRefIDC = naluSrc.m_nalRefIDC;215 #endif216 183 #if !VIDYO_VPS_INTEGRATION 217 184 naluDest.m_viewId = naluSrc.m_viewId; … … 223 190 #else 224 191 225 #if !H0388226 naluDest.m_OutputFlag = naluSrc.m_OutputFlag;227 #endif228 192 #endif 229 193 naluDest.m_Bitstream = naluSrc.m_Bitstream; -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/NALwrite.h
r210 r294 54 54 * written to the bitstream. 55 55 */ 56 #if H038857 56 OutputNALUnit( 58 57 NalUnitType nalUnitType, 59 #if NAL_REF_FLAG60 58 Bool nalRefFlag, 61 #else62 NalRefIdc nalRefIDC,63 #endif64 59 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 65 60 unsigned layerId, … … 69 64 #endif 70 65 unsigned temporalID = 0) 71 #if NAL_REF_FLAG72 66 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 73 67 : NALUnit(nalUnitType, nalRefFlag, layerId, temporalID) … … 75 69 : NALUnit(nalUnitType, nalRefFlag, viewId, isDepth, temporalID) 76 70 #endif 77 #else78 #if VIDYO_VPS_INTEGRATION79 : NALUnit(nalUnitType, nalRefIDC, layerId, temporalID)80 #else81 : NALUnit(nalUnitType, nalRefIDC, viewId, isDepth, temporalID)82 #endif83 #endif84 71 , m_Bitstream() 85 72 {} 86 #else87 OutputNALUnit(88 NalUnitType nalUnitType,89 NalRefIdc nalRefIDC,90 Int viewId,91 Bool isDepth,92 unsigned temporalID = 0,93 bool outputFlag = true)94 : NALUnit(nalUnitType, nalRefIDC, viewId, isDepth, temporalID, outputFlag)95 , m_Bitstream()96 {}97 #endif98 73 99 74 OutputNALUnit(const NALUnit& src) -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncAdaptiveLoopFilter.cpp
r56 r294 47 47 // Constants 48 48 // ==================================================================================================================== 49 #if LCU_SYNTAX_ALF50 49 #define ALF_NUM_OF_REDESIGN 1 51 #else52 #define ALF_NUM_OF_REDESIGN 353 #endif54 50 // ==================================================================================================================== 55 51 // Tables 56 52 // ==================================================================================================================== 57 #if LCU_SYNTAX_ALF58 53 const Int TEncAdaptiveLoopFilter::m_alfNumPartsInRowTab[5] = 59 54 { … … 82 77 341, //level 4 83 78 }; 84 #endif85 79 // ==================================================================================================================== 86 80 // Constructor / destructor 87 81 // ==================================================================================================================== 88 82 89 #if LCU_SYNTAX_ALF90 83 ///AlfCorrData 91 84 AlfCorrData::AlfCorrData() … … 376 369 return *this; 377 370 } 378 #endif379 371 380 372 381 373 TEncAdaptiveLoopFilter::TEncAdaptiveLoopFilter() 382 374 { 383 #if !LCU_SYNTAX_ALF384 m_ppdAlfCorr = NULL;385 m_ppdAlfCorrCb = NULL;386 m_ppdAlfCorrCr = NULL;387 m_pdDoubleAlfCoeff = NULL;388 #endif389 375 m_pcEntropyCoder = NULL; 390 #if !LCU_SYNTAX_ALF391 m_pcBestAlfParam = NULL;392 m_pcTempAlfParam = NULL;393 #endif394 376 m_pcPicYuvBest = NULL; 395 377 m_pcPicYuvTmp = NULL; 396 #if !LCU_SYNTAX_ALF397 pcAlfParamShape0 = NULL;398 pcAlfParamShape1 = NULL;399 pcPicYuvRecShape0 = NULL;400 pcPicYuvRecShape1 = NULL;401 m_pcSliceYuvTmp = NULL;402 #endif403 378 404 379 m_iALFMaxNumberFilters = NO_FILTERS; … … 411 386 // ==================================================================================================================== 412 387 413 #if LCU_SYNTAX_ALF414 388 /** convert Level Row Col to Idx 415 389 * \param level, row, col … … 799 773 } 800 774 801 #else802 803 /** create ALF global buffers804 * \param iALFEncodePassReduction 0: 16-pass encoding, 1: 1-pass encoding, 2: 2-pass encoding805 * This function is used to create the filter buffers to perform time-delay filtering.806 */807 Void TEncAdaptiveLoopFilter::createAlfGlobalBuffers(Int iALFEncodePassReduction)808 {809 if(iALFEncodePassReduction)810 {811 Int iNumOfBuffer = m_iGOPSize +1;812 813 for(Int i=0; i< NUM_ALF_CLASS_METHOD; i++)814 {815 m_mergeTableSavedMethods[i] = new Int*[iNumOfBuffer];816 m_aiFilterCoeffSavedMethods[i] = new Int**[iNumOfBuffer];817 for(Int j=0; j< iNumOfBuffer; j++)818 {819 m_mergeTableSavedMethods[i][j] = new Int[NO_VAR_BINS];820 m_aiFilterCoeffSavedMethods[i][j] = new Int*[NO_VAR_BINS];821 for(Int k=0; k< NO_VAR_BINS; k++)822 {823 m_aiFilterCoeffSavedMethods[i][j][k] = new Int[ALF_MAX_NUM_COEF];824 }825 }826 m_iPreviousFilterShapeMethods[i] = new Int[iNumOfBuffer];827 }828 829 }830 }831 /** destroy ALF global buffers832 * This function is used to destroy the filter buffers.833 */834 835 Void TEncAdaptiveLoopFilter::destroyAlfGlobalBuffers()836 {837 if(m_iALFEncodePassReduction)838 {839 for(Int i=0; i< NUM_ALF_CLASS_METHOD; i++)840 {841 for(Int j=0; j< m_iGOPSize+1; j++)842 {843 for(Int k=0; k< NO_VAR_BINS; k++)844 {845 delete[] m_aiFilterCoeffSavedMethods[i][j][k];846 }847 delete[] m_aiFilterCoeffSavedMethods[i][j];848 delete[] m_mergeTableSavedMethods[i][j];849 }850 delete[] m_aiFilterCoeffSavedMethods[i];851 delete[] m_iPreviousFilterShapeMethods[i];852 delete[] m_mergeTableSavedMethods[i];853 854 }855 856 }857 858 }859 #endif860 775 /** 861 776 \param pcPic picture (TComPic) pointer … … 865 780 { 866 781 m_pcEntropyCoder = pcEntropyCoder; 867 #if !LCU_SYNTAX_ALF868 xInitParam();869 #endif870 782 xCreateTmpAlfCtrlFlags(); 871 783 … … 876 788 m_pcPicYuvTmp->createLuma(iWidth, iHeight, g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth); 877 789 m_pcPicYuvBest = pcPic->getPicYuvPred(); 878 #if !LCU_SYNTAX_ALF879 m_pcBestAlfParam = new ALFParam;880 m_pcTempAlfParam = new ALFParam;881 allocALFParam(m_pcBestAlfParam);882 allocALFParam(m_pcTempAlfParam);883 pcPicYuvRecShape0 = new TComPicYuv();884 pcPicYuvRecShape0->createLuma(iWidth, iHeight, g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth);885 886 pcPicYuvRecShape1 = new TComPicYuv();887 pcPicYuvRecShape1->createLuma(iWidth, iHeight, g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth);888 889 pcAlfParamShape0 = new ALFParam;890 pcAlfParamShape1 = new ALFParam;891 892 allocALFParam(pcAlfParamShape0);893 allocALFParam(pcAlfParamShape1);894 895 // init qc_filter896 initMatrix4D_double(&m_EGlobalSym, NUM_ALF_FILTER_SHAPE+1, NO_VAR_BINS, MAX_SQR_FILT_LENGTH, MAX_SQR_FILT_LENGTH);897 initMatrix3D_double(&m_yGlobalSym, NUM_ALF_FILTER_SHAPE+1, NO_VAR_BINS, MAX_SQR_FILT_LENGTH);898 #endif899 790 initMatrix_int(&m_filterCoeffSymQuant, NO_VAR_BINS, ALF_MAX_NUM_COEF); 900 #if !LCU_SYNTAX_ALF901 m_pixAcc = (double *) calloc(NO_VAR_BINS, sizeof(double));902 #endif903 791 initMatrix_Pel(&m_maskImg, m_img_height, m_img_width); 904 792 initMatrix_double(&m_E_temp, MAX_SQR_FILT_LENGTH, MAX_SQR_FILT_LENGTH);// … … 913 801 initMatrix_int(&m_FilterCoeffQuantTemp, NO_VAR_BINS, ALF_MAX_NUM_COEF);// 914 802 915 #if LCU_SYNTAX_ALF916 803 m_tempALFp = new ALFParam(ALF_Y); 917 #else918 m_tempALFp = new ALFParam;919 allocALFParam(m_tempALFp);920 if( m_bUseNonCrossALF )921 {922 m_pcSliceYuvTmp = new TComPicYuv();923 m_pcSliceYuvTmp->create(iWidth, iHeight, g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth);924 }925 #endif926 804 } 927 805 928 806 Void TEncAdaptiveLoopFilter::endALFEnc() 929 807 { 930 #if !LCU_SYNTAX_ALF931 xUninitParam();932 #endif933 808 xDestroyTmpAlfCtrlFlags(); 934 809 … … 938 813 m_pcPic = NULL; 939 814 m_pcEntropyCoder = NULL; 940 #if !LCU_SYNTAX_ALF941 freeALFParam(m_pcBestAlfParam);942 freeALFParam(m_pcTempAlfParam);943 delete m_pcBestAlfParam;944 delete m_pcTempAlfParam;945 946 pcPicYuvRecShape0->destroyLuma();947 delete pcPicYuvRecShape0;948 pcPicYuvRecShape0 = NULL;949 950 pcPicYuvRecShape1->destroyLuma();951 delete pcPicYuvRecShape1;952 pcPicYuvRecShape1 = NULL;953 954 freeALFParam(pcAlfParamShape0);955 freeALFParam(pcAlfParamShape1);956 957 delete pcAlfParamShape0;958 delete pcAlfParamShape1;959 960 // delete qc filters961 destroyMatrix4D_double(m_EGlobalSym, NUM_ALF_FILTER_SHAPE+1, NO_VAR_BINS);962 destroyMatrix3D_double(m_yGlobalSym, NUM_ALF_FILTER_SHAPE+1);963 #endif964 815 destroyMatrix_int(m_filterCoeffSymQuant); 965 #if !LCU_SYNTAX_ALF966 free(m_pixAcc);967 #endif968 816 destroyMatrix_Pel(m_maskImg); 969 817 destroyMatrix3D_double(m_E_merged, NO_VAR_BINS); … … 980 828 destroyMatrix_int(m_FilterCoeffQuantTemp); 981 829 982 #if LCU_SYNTAX_ALF983 830 delete m_tempALFp; 984 #else 985 freeALFParam(m_tempALFp); 986 delete m_tempALFp; 987 988 if(m_bUseNonCrossALF) 989 { 990 m_pcSliceYuvTmp->destroy(); 991 delete m_pcSliceYuvTmp; 992 m_pcSliceYuvTmp = NULL; 993 } 994 #endif 995 } 996 997 #if LCU_SYNTAX_ALF 831 } 832 998 833 999 834 /** Assign output ALF parameters … … 2762 2597 #endif 2763 2598 2764 #if ALF_SINGLE_FILTER_SHAPE2765 2599 calcCorrOneCompRegionChma(pPicOrg, pPicSrc, stride, ypos, xpos, height, width, alfCorr->ECorr[0], alfCorr->yCorr[0], isLastBlock); 2766 #endif2767 2600 } 2768 2601 } … … 2822 2655 #endif 2823 2656 2824 #if ALF_SINGLE_FILTER_SHAPE2825 2657 calcCorrOneCompRegionLuma(pPicOrg, pPicSrc, stride, ypos, xpos, height, width, alfCorr->ECorr, alfCorr->yCorr, alfCorr->pixAcc, forceCollection, isLastBlock); 2826 #endif2827 2658 } 2828 2659 } … … 2838 2669 2839 2670 2840 #if ALF_SINGLE_FILTER_SHAPE2841 2671 /** Gather correlations for one region for chroma component 2842 2672 * \param [in] imgOrg picture buffer for original picture … … 3086 2916 3087 2917 } 3088 #endif 3089 3090 #else 3091 3092 3093 #if ALF_CHROMA_LAMBDA 3094 /** 3095 \param pcAlfParam ALF parameter 3096 \param [out] pvAlfCtrlParam ALF CU control parameters container for slices 3097 \param dLambdaLuma luma lambda value for RD cost computation 3098 \param dLambdaChroma chroma lambda value for RD cost computation 3099 \retval ruiDist distortion 3100 \retval ruiBits required bits 3101 \retval ruiMaxAlfCtrlDepth optimal partition depth 3102 */ 3103 #if HHI_INTERVIEW_SKIP 3104 Void TEncAdaptiveLoopFilter::ALFProcess( ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>* pvAlfCtrlParam, Double dLambdaLuma, Double dLambdaChroma, UInt64& ruiDist, UInt64& ruiBits, Bool bInterviewSkip) 3105 #else 3106 Void TEncAdaptiveLoopFilter::ALFProcess( ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>* pvAlfCtrlParam, Double dLambdaLuma, Double dLambdaChroma, UInt64& ruiDist, UInt64& ruiBits) 3107 3108 #endif 3109 #else 3110 /** 3111 \param pcAlfParam ALF parameter 3112 \param dLambda lambda value for RD cost computation 3113 \retval ruiDist distortion 3114 \retval ruiBits required bits 3115 \retval ruiMaxAlfCtrlDepth optimal partition depth 3116 */ 3117 #if HHI_INTERVIEW_SKIP 3118 Void TEncAdaptiveLoopFilter::ALFProcess( ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>* pvAlfCtrlParam, Double dLambda, UInt64& ruiDist, UInt64& ruiBits, Bool bInterviewSkip) 3119 #else 3120 Void TEncAdaptiveLoopFilter::ALFProcess( ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>* pvAlfCtrlParam, Double dLambda, UInt64& ruiDist, UInt64& ruiBits) 3121 3122 #endif 3123 #endif 3124 { 3125 3126 // set lambda 3127 #if ALF_CHROMA_LAMBDA 3128 m_dLambdaLuma = dLambdaLuma; 3129 m_dLambdaChroma = dLambdaChroma; 3130 #else 3131 m_dLambdaLuma = dLambda; 3132 m_dLambdaChroma = dLambda; 3133 #endif 3134 3135 m_lcuHeight = m_pcPic->getSlice(0)->getSPS()->getMaxCUHeight(); 3136 3137 #if ALF_SINGLE_FILTER_SHAPE 3138 m_lineIdxPadBot = m_lcuHeight - 4 - 3; // DFRegion, Vertical Taps 3139 #else 3140 m_lineIdxPadBot = m_lcuHeight - 4 - 4; // DFRegion, Vertical Taps 3141 #endif 3142 m_lineIdxPadTop = m_lcuHeight - 4; // DFRegion 3143 3144 m_lcuHeightChroma = m_lcuHeight>>1; 3145 #if ALF_SINGLE_FILTER_SHAPE 3146 m_lineIdxPadBotChroma = m_lcuHeightChroma - 2 - 3; // DFRegion, Vertical Taps 3147 #else 3148 m_lineIdxPadBotChroma = m_lcuHeightChroma - 2 - 4; // DFRegion, Vertical Taps 3149 #endif 3150 m_lineIdxPadTopChroma = m_lcuHeightChroma - 2 ; // DFRegion 3151 3152 TComPicYuv* pcPicOrg = m_pcPic->getPicYuvOrg(); 3153 3154 // extend image for filtering 3155 TComPicYuv* pcPicYuvRec = m_pcPic->getPicYuvRec(); 3156 TComPicYuv* pcPicYuvExtRec = m_pcTempPicYuv; 3157 #if HHI_INTERVIEW_SKIP 3158 TComPicYuv* pcUsedPelMap = m_pcPic->getUsedPelsMap() ; 3159 if(bInterviewSkip) 3160 assert( pcUsedPelMap ) ; 3161 #endif 3162 3163 pcPicYuvRec->copyToPic(pcPicYuvExtRec); 3164 if(!m_bUseNonCrossALF) 3165 { 3166 pcPicYuvExtRec->setBorderExtension( false ); 3167 pcPicYuvExtRec->extendPicBorder (); 3168 } 3169 3170 // set min cost 3171 UInt64 uiMinRate = MAX_INT; 3172 UInt64 uiMinDist = MAX_INT; 3173 Double dMinCost = MAX_DOUBLE; 3174 3175 UInt64 uiOrigRate; 3176 UInt64 uiOrigDist; 3177 Double dOrigCost; 3178 3179 // calc original cost 3180 #if HHI_INTERVIEW_SKIP 3181 xCalcRDCost( pcPicOrg, pcPicYuvRec, pcUsedPelMap, NULL, uiOrigRate, uiOrigDist, dOrigCost ); 3182 #else 3183 xCalcRDCost( pcPicOrg, pcPicYuvRec, NULL, uiOrigRate, uiOrigDist, dOrigCost ); 3184 #endif 3185 m_pcBestAlfParam->alf_flag = 0; 3186 // initialize temp_alfps 3187 m_pcTempAlfParam->alf_flag = 1; 3188 m_pcTempAlfParam->chroma_idc = 0; 3189 3190 m_bAlfCUCtrlEnabled = (pvAlfCtrlParam != NULL)?true:false; 3191 if(m_bAlfCUCtrlEnabled) 3192 { 3193 m_vBestAlfCUCtrlParam.resize(m_uiNumSlicesInPic); 3194 for(Int s=0; s< m_uiNumSlicesInPic; s++) 3195 { 3196 m_vBestAlfCUCtrlParam[s].cu_control_flag = 0; 3197 } 3198 } 3199 else 3200 { 3201 m_vBestAlfCUCtrlParam.clear(); 3202 } 3203 3204 setALFEncodingParam(m_pcPic); 3205 3206 // adaptive in-loop wiener filtering 3207 #if HHI_INTERVIEW_SKIP 3208 xEncALFLuma( pcPicOrg, pcPicYuvExtRec, pcPicYuvRec, uiMinRate, uiMinDist, dMinCost, bInterviewSkip ); 3209 #else 3210 xEncALFLuma( pcPicOrg, pcPicYuvExtRec, pcPicYuvRec, uiMinRate, uiMinDist, dMinCost ); 3211 #endif 3212 3213 // cu-based filter on/off control 3214 #if HHI_INTERVIEW_SKIP 3215 xCUAdaptiveControl_qc( pcPicOrg, pcPicYuvExtRec, pcPicYuvRec, pcUsedPelMap, uiMinRate, uiMinDist, dMinCost ); 3216 #else 3217 xCUAdaptiveControl_qc( pcPicOrg, pcPicYuvExtRec, pcPicYuvRec, uiMinRate, uiMinDist, dMinCost ); 3218 #endif 3219 3220 // compare RD cost to non-ALF case 3221 if( dMinCost < dOrigCost ) 3222 { 3223 m_pcBestAlfParam->alf_flag = 1; 3224 3225 ruiBits = uiMinRate; 3226 ruiDist = uiMinDist; 3227 } 3228 else 3229 { 3230 m_pcBestAlfParam->alf_flag = 0; 3231 3232 uiMinRate = uiOrigRate; 3233 uiMinDist = uiOrigDist; 3234 3235 m_pcEntropyCoder->setAlfCtrl(false); 3236 if(m_bAlfCUCtrlEnabled) 3237 { 3238 for(Int s=0; s< m_uiNumSlicesInPic; s++) 3239 { 3240 m_vBestAlfCUCtrlParam[s].cu_control_flag = 0; 3241 } 3242 } 3243 pcPicYuvExtRec->copyToPicLuma(pcPicYuvRec); 3244 3245 ruiBits = uiOrigRate; 3246 ruiDist = uiOrigDist; 3247 } 3248 // if ALF works 3249 if( m_pcBestAlfParam->alf_flag ) 3250 { 3251 // do additional ALF process for chroma 3252 xFilterTapDecisionChroma( uiMinRate, pcPicOrg, pcPicYuvExtRec, pcPicYuvRec, ruiDist, ruiBits ); 3253 } 3254 3255 // copy to best storage 3256 copyALFParam(pcAlfParam, m_pcBestAlfParam); 3257 3258 if(m_bAlfCUCtrlEnabled) 3259 { 3260 for(Int s=0; s< m_uiNumSlicesInPic; s++) 3261 { 3262 (*pvAlfCtrlParam)[s]= m_vBestAlfCUCtrlParam[s]; 3263 } 3264 } 3265 } 3266 #endif 2918 3267 2919 3268 2920 /** PCM LF disable process. … … 3284 2936 // Private member functions 3285 2937 // ==================================================================================================================== 3286 #if !LCU_SYNTAX_ALF3287 Void TEncAdaptiveLoopFilter::xInitParam()3288 {3289 Int i, j;3290 3291 if (m_ppdAlfCorr != NULL)3292 {3293 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3294 {3295 for (j = 0; j < ALF_MAX_NUM_COEF+1; j++)3296 {3297 m_ppdAlfCorr[i][j] = 0;3298 }3299 }3300 }3301 else3302 {3303 m_ppdAlfCorr = new Double*[ALF_MAX_NUM_COEF];3304 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3305 {3306 m_ppdAlfCorr[i] = new Double[ALF_MAX_NUM_COEF+1];3307 for (j = 0; j < ALF_MAX_NUM_COEF+1; j++)3308 {3309 m_ppdAlfCorr[i][j] = 0;3310 }3311 }3312 }3313 3314 if (m_pdDoubleAlfCoeff != NULL)3315 {3316 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3317 {3318 m_pdDoubleAlfCoeff[i] = 0;3319 }3320 }3321 else3322 {3323 m_pdDoubleAlfCoeff = new Double[ALF_MAX_NUM_COEF];3324 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3325 {3326 m_pdDoubleAlfCoeff[i] = 0;3327 }3328 }3329 if (m_ppdAlfCorrCb != NULL)3330 {3331 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3332 {3333 for (j = 0; j < ALF_MAX_NUM_COEF+1; j++)3334 {3335 m_ppdAlfCorrCb[i][j] = 0;3336 }3337 }3338 }3339 else3340 {3341 m_ppdAlfCorrCb = new Double*[ALF_MAX_NUM_COEF];3342 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3343 {3344 m_ppdAlfCorrCb[i] = new Double[ALF_MAX_NUM_COEF+1];3345 for (j = 0; j < ALF_MAX_NUM_COEF+1; j++)3346 {3347 m_ppdAlfCorrCb[i][j] = 0;3348 }3349 }3350 }3351 3352 if (m_ppdAlfCorrCr != NULL)3353 {3354 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3355 {3356 for (j = 0; j < ALF_MAX_NUM_COEF+1; j++)3357 {3358 m_ppdAlfCorrCr[i][j] = 0;3359 }3360 }3361 }3362 else3363 {3364 m_ppdAlfCorrCr = new Double*[ALF_MAX_NUM_COEF];3365 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3366 {3367 m_ppdAlfCorrCr[i] = new Double[ALF_MAX_NUM_COEF+1];3368 for (j = 0; j < ALF_MAX_NUM_COEF+1; j++)3369 {3370 m_ppdAlfCorrCr[i][j] = 0;3371 }3372 }3373 }3374 }3375 3376 Void TEncAdaptiveLoopFilter::xUninitParam()3377 {3378 Int i;3379 3380 if (m_ppdAlfCorr != NULL)3381 {3382 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3383 {3384 delete[] m_ppdAlfCorr[i];3385 m_ppdAlfCorr[i] = NULL;3386 }3387 delete[] m_ppdAlfCorr;3388 m_ppdAlfCorr = NULL;3389 }3390 3391 if (m_pdDoubleAlfCoeff != NULL)3392 {3393 delete[] m_pdDoubleAlfCoeff;3394 m_pdDoubleAlfCoeff = NULL;3395 }3396 if (m_ppdAlfCorrCb != NULL)3397 {3398 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3399 {3400 delete[] m_ppdAlfCorrCb[i];3401 m_ppdAlfCorrCb[i] = NULL;3402 }3403 delete[] m_ppdAlfCorrCb;3404 m_ppdAlfCorrCb = NULL;3405 }3406 3407 if (m_ppdAlfCorrCr != NULL)3408 {3409 for (i = 0; i < ALF_MAX_NUM_COEF; i++)3410 {3411 delete[] m_ppdAlfCorrCr[i];3412 m_ppdAlfCorrCr[i] = NULL;3413 }3414 delete[] m_ppdAlfCorrCr;3415 m_ppdAlfCorrCr = NULL;3416 }3417 }3418 #endif3419 2938 Void TEncAdaptiveLoopFilter::xCreateTmpAlfCtrlFlags() 3420 2939 { … … 3512 3031 } 3513 3032 3514 #if !LCU_SYNTAX_ALF3515 3516 Void TEncAdaptiveLoopFilter::xCalcCorrelationFunc(Int ypos, Int xpos, Pel* pImgOrg, Pel* pImgPad, Int filtNo, Int iWidth, Int iHeight, Int iOrgStride, Int iCmpStride, Bool bSymmCopyBlockMatrix)3517 {3518 Int yposEnd = ypos + iHeight -1;3519 Int xposEnd = xpos + iWidth -1;3520 Int N = m_sqrFiltLengthTab[filtNo];3521 3522 Int imgHeightChroma = m_img_height>>1;3523 Int yLineInLCU;3524 Int paddingline ;3525 3526 Int ELocal[ALF_MAX_NUM_COEF];3527 Pel *pImgPad1, *pImgPad2, *pImgPad3, *pImgPad4;3528 Int i, j, k, l;3529 Int yLocal;3530 3531 pImgPad += (ypos*iCmpStride);3532 pImgOrg += (ypos*iOrgStride);3533 3534 switch(filtNo)3535 {3536 #if !ALF_SINGLE_FILTER_SHAPE3537 case ALF_STAR5x5:3538 {3539 for (i= ypos; i<= yposEnd; i++)3540 {3541 yLineInLCU = i % m_lcuHeightChroma;3542 3543 if (yLineInLCU < m_lineIdxPadBotChroma || i-yLineInLCU+m_lcuHeightChroma >= imgHeightChroma )3544 {3545 pImgPad1 = pImgPad + iCmpStride;3546 pImgPad2 = pImgPad - iCmpStride;3547 pImgPad3 = pImgPad + 2*iCmpStride;3548 pImgPad4 = pImgPad - 2*iCmpStride;3549 }3550 else if (yLineInLCU < m_lineIdxPadTopChroma)3551 {3552 paddingline = - yLineInLCU + m_lineIdxPadTopChroma - 1;3553 pImgPad1 = pImgPad + min(paddingline, 1)*iCmpStride;3554 pImgPad2 = pImgPad - iCmpStride;3555 pImgPad3 = pImgPad + min(paddingline, 2)*iCmpStride;3556 pImgPad4 = pImgPad - 2*iCmpStride;3557 }3558 else3559 {3560 paddingline = yLineInLCU - m_lineIdxPadTopChroma ;3561 pImgPad1 = pImgPad + iCmpStride;3562 pImgPad2 = pImgPad - min(paddingline, 1)*iCmpStride;3563 pImgPad3 = pImgPad + 2*iCmpStride;3564 pImgPad4 = pImgPad - min(paddingline, 2)*iCmpStride;3565 }3566 3567 if ( (yLineInLCU == m_lineIdxPadTopChroma || yLineInLCU == m_lineIdxPadTopChroma-1) && i-yLineInLCU+m_lcuHeightChroma < imgHeightChroma )3568 {3569 pImgPad+= iCmpStride;3570 pImgOrg+= iOrgStride;3571 continue;3572 }3573 else3574 {3575 for (j= xpos; j<= xposEnd; j++)3576 {3577 memset(ELocal, 0, N*sizeof(Int));3578 3579 ELocal[0] = (pImgPad3[j+2] + pImgPad4[j-2]);3580 ELocal[1] = (pImgPad3[j ] + pImgPad4[j ]);3581 ELocal[2] = (pImgPad3[j-2] + pImgPad4[j+2]);3582 3583 ELocal[3] = (pImgPad1[j+1] + pImgPad2[j-1]);3584 ELocal[4] = (pImgPad1[j ] + pImgPad2[j ]);3585 ELocal[5] = (pImgPad1[j-1] + pImgPad2[j+1]);3586 3587 ELocal[6] = (pImgPad[j+2] + pImgPad[j-2]);3588 ELocal[7] = (pImgPad[j+1] + pImgPad[j-1]);3589 ELocal[8] = (pImgPad[j ]);3590 3591 yLocal= (Int)pImgOrg[j];3592 3593 for(k=0; k<N; k++)3594 {3595 m_ppdAlfCorr[k][k] += ELocal[k]*ELocal[k];3596 for(l=k+1; l<N; l++)3597 {3598 m_ppdAlfCorr[k][l] += ELocal[k]*ELocal[l];3599 }3600 3601 m_ppdAlfCorr[k][N] += yLocal*ELocal[k];3602 }3603 }3604 pImgPad+= iCmpStride;3605 pImgOrg+= iOrgStride;3606 }3607 3608 }3609 }3610 break;3611 case ALF_CROSS9x9:3612 {3613 Pel *pImgPad5, *pImgPad6, *pImgPad7, *pImgPad8;3614 #else3615 case ALF_CROSS9x7_SQUARE3x3:3616 {3617 Pel *pImgPad5, *pImgPad6;3618 #endif3619 for (i= ypos; i<= yposEnd; i++)3620 {3621 yLineInLCU = i % m_lcuHeightChroma;3622 3623 if (yLineInLCU<2 && i> 2)3624 {3625 paddingline = yLineInLCU + 2 ;3626 pImgPad1 = pImgPad + iCmpStride;3627 pImgPad2 = pImgPad - iCmpStride;3628 pImgPad3 = pImgPad + 2*iCmpStride;3629 pImgPad4 = pImgPad - 2*iCmpStride;3630 pImgPad5 = (paddingline < 3) ? pImgPad : pImgPad + 3*iCmpStride;3631 pImgPad6 = (paddingline < 3) ? pImgPad : pImgPad - min(paddingline, 3)*iCmpStride;;3632 #if !ALF_SINGLE_FILTER_SHAPE3633 pImgPad7 = (paddingline < 4) ? pImgPad : pImgPad + 4*iCmpStride;3634 pImgPad8 = (paddingline < 4) ? pImgPad : pImgPad - min(paddingline, 4)*iCmpStride;;3635 #endif3636 }3637 else if (yLineInLCU < m_lineIdxPadBotChroma || i-yLineInLCU+m_lcuHeightChroma >= imgHeightChroma )3638 {3639 pImgPad1 = pImgPad + iCmpStride;3640 pImgPad2 = pImgPad - iCmpStride;3641 pImgPad3 = pImgPad + 2*iCmpStride;3642 pImgPad4 = pImgPad - 2*iCmpStride;3643 pImgPad5 = pImgPad + 3*iCmpStride;3644 pImgPad6 = pImgPad - 3*iCmpStride;3645 #if !ALF_SINGLE_FILTER_SHAPE3646 pImgPad7 = pImgPad + 4*iCmpStride;3647 pImgPad8 = pImgPad - 4*iCmpStride;3648 #endif3649 }3650 else if (yLineInLCU < m_lineIdxPadTopChroma)3651 {3652 paddingline = - yLineInLCU + m_lineIdxPadTopChroma - 1;3653 pImgPad1 = (paddingline < 1) ? pImgPad : pImgPad + min(paddingline, 1)*iCmpStride;3654 pImgPad2 = (paddingline < 1) ? pImgPad : pImgPad - iCmpStride;3655 pImgPad3 = (paddingline < 2) ? pImgPad : pImgPad + min(paddingline, 2)*iCmpStride;3656 pImgPad4 = (paddingline < 2) ? pImgPad : pImgPad - 2*iCmpStride;3657 pImgPad5 = (paddingline < 3) ? pImgPad : pImgPad + min(paddingline, 3)*iCmpStride;3658 pImgPad6 = (paddingline < 3) ? pImgPad : pImgPad - 3*iCmpStride;3659 #if !ALF_SINGLE_FILTER_SHAPE3660 pImgPad7 = (paddingline < 4) ? pImgPad : pImgPad + min(paddingline, 4)*iCmpStride;3661 pImgPad8 = (paddingline < 4) ? pImgPad : pImgPad - 4*iCmpStride;3662 #endif3663 }3664 else3665 {3666 paddingline = yLineInLCU - m_lineIdxPadTopChroma ;3667 pImgPad1 = (paddingline < 1) ? pImgPad : pImgPad + iCmpStride;3668 pImgPad2 = (paddingline < 1) ? pImgPad : pImgPad - min(paddingline, 1)*iCmpStride;3669 pImgPad3 = (paddingline < 2) ? pImgPad : pImgPad + 2*iCmpStride;3670 pImgPad4 = (paddingline < 2) ? pImgPad : pImgPad - min(paddingline, 2)*iCmpStride;3671 pImgPad5 = (paddingline < 3) ? pImgPad : pImgPad + 3*iCmpStride;3672 pImgPad6 = (paddingline < 3) ? pImgPad : pImgPad - min(paddingline, 3)*iCmpStride;3673 #if !ALF_SINGLE_FILTER_SHAPE3674 pImgPad7 = (paddingline < 4) ? pImgPad : pImgPad + 4*iCmpStride;3675 pImgPad8 = (paddingline < 4) ? pImgPad : pImgPad - min(paddingline, 4)*iCmpStride;3676 #endif3677 }3678 3679 for (j= xpos; j<= xposEnd; j++)3680 {3681 memset(ELocal, 0, N*sizeof(Int));3682 #if ALF_SINGLE_FILTER_SHAPE3683 ELocal[0] = (pImgPad5[j]+pImgPad6[j]);3684 ELocal[1] = (pImgPad3[j]+pImgPad4[j]);3685 ELocal[2] = (pImgPad1[j-1]+pImgPad2[j+1]);3686 ELocal[3] = (pImgPad1[j]+pImgPad2[j]);3687 ELocal[4] = (pImgPad1[j+1]+pImgPad2[j-1]);3688 ELocal[5] = (pImgPad[j+4]+pImgPad[j-4]);3689 ELocal[6] = (pImgPad[j+3]+pImgPad[j-3]);3690 ELocal[7] = (pImgPad[j+2]+pImgPad[j-2]);3691 ELocal[8] = (pImgPad[j+1]+pImgPad[j-1]);3692 ELocal[9] = (pImgPad[j ]);3693 #else3694 ELocal[0] = (pImgPad7[j] + pImgPad8[j]);3695 3696 ELocal[1] = (pImgPad5[j] + pImgPad6[j]);3697 3698 ELocal[2] = (pImgPad3[j] + pImgPad4[j]);3699 3700 ELocal[3] = (pImgPad1[j] + pImgPad2[j]);3701 3702 ELocal[4] = (pImgPad[j+4] + pImgPad[j-4]);3703 ELocal[5] = (pImgPad[j+3] + pImgPad[j-3]);3704 ELocal[6] = (pImgPad[j+2] + pImgPad[j-2]);3705 ELocal[7] = (pImgPad[j+1] + pImgPad[j-1]);3706 ELocal[8] = (pImgPad[j ] );3707 #endif3708 yLocal= (Int)pImgOrg[j];3709 3710 for(k=0; k<N; k++)3711 {3712 m_ppdAlfCorr[k][k] += ELocal[k]*ELocal[k];3713 for(l=k+1; l<N; l++)3714 {3715 m_ppdAlfCorr[k][l] += ELocal[k]*ELocal[l];3716 }3717 3718 m_ppdAlfCorr[k][N] += yLocal*ELocal[k];3719 }3720 }3721 pImgPad+= iCmpStride;3722 pImgOrg+= iOrgStride;3723 }3724 3725 }3726 break;3727 default:3728 {3729 printf("Not a supported filter shape\n");3730 assert(0);3731 exit(1);3732 }3733 }3734 3735 if(bSymmCopyBlockMatrix)3736 {3737 for(j=0; j<N-1; j++)3738 {3739 for(i=j+1; i<N; i++)3740 {3741 m_ppdAlfCorr[i][j] = m_ppdAlfCorr[j][i];3742 }3743 }3744 }3745 }3746 3747 #endif3748 3033 #if IBDI_DISTORTION 3749 3034 #if HHI_INTERVIEW_SKIP … … 3946 3231 Int *nc; 3947 3232 const Int *pFiltMag; 3948 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3233 #if LCUALF_QP_DEPENDENT_BITS 3949 3234 Int alfPrecisionBit = getAlfPrecisionBit( m_alfQP ); 3950 3235 #endif 3951 3236 3952 3237 N = m_sqrFiltLengthTab[tap]; 3953 #if ALF_SINGLE_FILTER_SHAPE3954 3238 pFiltMag = weightsShape1Sym; 3955 #else3956 // star shape3957 if(tap == 0)3958 {3959 pFiltMag = weightsShape0Sym;3960 }3961 // cross shape3962 else3963 {3964 pFiltMag = weightsShape1Sym;3965 }3966 #endif3967 3239 3968 3240 dh = new Double[N]; 3969 3241 nc = new Int[N]; 3970 3242 3971 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3243 #if LCUALF_QP_DEPENDENT_BITS 3972 3244 max_value = (1<<(1+alfPrecisionBit))-1; 3973 3245 min_value = 0-(1<<(1+alfPrecisionBit)); … … 3983 3255 if(h[i]>=0.0) 3984 3256 { 3985 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3257 #if LCUALF_QP_DEPENDENT_BITS 3986 3258 qh[i] = (Int)( h[i]*(1<<alfPrecisionBit)+0.5); 3987 3259 #else … … 3991 3263 else 3992 3264 { 3993 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3265 #if LCUALF_QP_DEPENDENT_BITS 3994 3266 qh[i] = -(Int)(-h[i]*(1<<alfPrecisionBit)+0.5); 3995 3267 #else … … 3998 3270 } 3999 3271 4000 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3272 #if LCUALF_QP_DEPENDENT_BITS 4001 3273 dh[i] = (Double)qh[i]/(Double)(1<<alfPrecisionBit) - h[i]; 4002 3274 #else … … 4010 3282 4011 3283 // modification of quantized filter coefficients 4012 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3284 #if LCUALF_QP_DEPENDENT_BITS 4013 3285 total_gain = (Int)(dbl_total_gain*(1<<alfPrecisionBit)+0.5); 4014 3286 #else … … 4082 3354 nc = NULL; 4083 3355 } 4084 #if !LCU_SYNTAX_ALF4085 Void TEncAdaptiveLoopFilter::xClearFilterCoefInt(Int* qh, Int N)4086 {4087 // clear4088 memset( qh, 0, sizeof( Int ) * N );4089 4090 // center pos4091 qh[N-1] = 1<<ALF_NUM_BIT_SHIFT;4092 }4093 /** Calculate RD cost4094 * \param [in] pAlfParam ALF parameters4095 * \param [out] ruiRate coding bits4096 * \param [in] uiDist distortion4097 * \param [out] rdCost rate-distortion cost4098 * \param [in] pvAlfCUCtrlParam ALF CU control parameters4099 */4100 Void TEncAdaptiveLoopFilter::xCalcRDCost(ALFParam* pAlfParam, UInt64& ruiRate, UInt64 uiDist, Double& rdCost, std::vector<AlfCUCtrlInfo>* pvAlfCUCtrlParam)4101 {4102 if(pAlfParam != NULL)4103 {4104 m_pcEntropyCoder->resetEntropy();4105 m_pcEntropyCoder->resetBits();4106 m_pcEntropyCoder->encodeAlfParam(pAlfParam);4107 4108 ruiRate = m_pcEntropyCoder->getNumberOfWrittenBits();4109 4110 if(pvAlfCUCtrlParam != NULL)4111 {4112 for(UInt s=0; s< m_uiNumSlicesInPic; s++)4113 {4114 if(!m_pcPic->getValidSlice(s))4115 {4116 continue;4117 }4118 m_pcEntropyCoder->resetEntropy();4119 m_pcEntropyCoder->resetBits();4120 m_pcEntropyCoder->encodeAlfCtrlParam( (*pvAlfCUCtrlParam)[s], m_uiNumCUsInFrame);4121 ruiRate += m_pcEntropyCoder->getNumberOfWrittenBits();4122 }4123 }4124 else4125 {4126 ruiRate += m_uiNumSlicesInPic;4127 }4128 }4129 else4130 {4131 ruiRate = 1;4132 }4133 4134 rdCost = (Double)(ruiRate) * m_dLambdaLuma + (Double)(uiDist);4135 }4136 4137 /** Calculate RD cost4138 * \param [in] pcPicOrg original picture buffer4139 * \param [in] pcPicCmp compared picture buffer4140 * \param [in] pAlfParam ALF parameters4141 * \param [out] ruiRate coding bits4142 * \param [out] ruiDist distortion4143 * \param [out] rdCost rate-distortion cost4144 * \param [in] pvAlfCUCtrlParam ALF CU control parameters4145 */4146 #if HHI_INTERVIEW_SKIP4147 Void TEncAdaptiveLoopFilter::xCalcRDCost(TComPicYuv* pcPicOrg, TComPicYuv* pcPicCmp, TComPicYuv* pcUsedPelMap, ALFParam* pAlfParam, UInt64& ruiRate, UInt64& ruiDist, Double& rdCost, std::vector<AlfCUCtrlInfo>* pvAlfCUCtrlParam)4148 #else4149 Void TEncAdaptiveLoopFilter::xCalcRDCost(TComPicYuv* pcPicOrg, TComPicYuv* pcPicCmp, ALFParam* pAlfParam, UInt64& ruiRate, UInt64& ruiDist, Double& rdCost, std::vector<AlfCUCtrlInfo>* pvAlfCUCtrlParam)4150 #endif4151 {4152 if(pAlfParam != NULL)4153 {4154 m_pcEntropyCoder->resetEntropy();4155 m_pcEntropyCoder->resetBits();4156 m_pcEntropyCoder->encodeAlfParam(pAlfParam);4157 4158 ruiRate = m_pcEntropyCoder->getNumberOfWrittenBits();4159 4160 if(pvAlfCUCtrlParam != NULL)4161 {4162 for(UInt s=0; s< m_uiNumSlicesInPic; s++)4163 {4164 if(! m_pcPic->getValidSlice(s))4165 {4166 continue;4167 }4168 m_pcEntropyCoder->resetEntropy();4169 m_pcEntropyCoder->resetBits();4170 m_pcEntropyCoder->encodeAlfCtrlParam( (*pvAlfCUCtrlParam)[s], m_uiNumCUsInFrame);4171 ruiRate += m_pcEntropyCoder->getNumberOfWrittenBits();4172 }4173 4174 }4175 else4176 {4177 ruiRate += m_uiNumSlicesInPic;4178 }4179 }4180 else4181 {4182 ruiRate = 1;4183 }4184 4185 ruiDist = xCalcSSD(pcPicOrg->getLumaAddr(), pcPicCmp->getLumaAddr(), pcPicOrg->getWidth(), pcPicOrg->getHeight(), pcPicOrg->getStride());4186 rdCost = (Double)(ruiRate) * m_dLambdaLuma + (Double)(ruiDist);4187 }4188 /** Calculate RD cost for chroma ALF4189 * \param pcPicOrg original picture buffer4190 * \param pcPicCmp compared picture buffer4191 * \param pAlfParam ALF parameters4192 * \returns ruiRate bitrate4193 * \returns uiDist distortion4194 * \returns rdCost RD cost4195 */4196 Void TEncAdaptiveLoopFilter::xCalcRDCostChroma(TComPicYuv* pcPicOrg, TComPicYuv* pcPicCmp, ALFParam* pAlfParam, UInt64& ruiRate, UInt64& ruiDist, Double& rdCost)4197 {4198 if(pAlfParam->chroma_idc)4199 {4200 ruiRate = xCalcRateChroma(pAlfParam);4201 }4202 ruiDist = 0;4203 ruiDist += xCalcSSD(pcPicOrg->getCbAddr(), pcPicCmp->getCbAddr(), (pcPicOrg->getWidth()>>1), (pcPicOrg->getHeight()>>1), pcPicOrg->getCStride());4204 ruiDist += xCalcSSD(pcPicOrg->getCrAddr(), pcPicCmp->getCrAddr(), (pcPicOrg->getWidth()>>1), (pcPicOrg->getHeight()>>1), pcPicOrg->getCStride());4205 rdCost = (Double)(ruiRate) * m_dLambdaChroma + (Double)(ruiDist);4206 }4207 4208 Void TEncAdaptiveLoopFilter::xFilteringFrameChroma(ALFParam* pcAlfParam, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest)4209 {4210 Int filtNo = pcAlfParam->filter_shape_chroma;4211 Int *coeff = pcAlfParam->coeff_chroma;4212 Int iChromaFormatShift = 1; //4:2:04213 4214 if ((pcAlfParam->chroma_idc>>1)&0x01)4215 {4216 if(!m_bUseNonCrossALF)4217 {4218 Int iStride = pcPicRest->getCStride();4219 Pel* pDec = pcPicDec->getCbAddr();4220 Pel* pRest = pcPicRest->getCbAddr();4221 4222 filterChroma(pRest, pDec, iStride, 0, (Int)(m_img_height>>1) -1, 0, (Int)(m_img_width>>1)-1, filtNo, coeff);4223 }4224 else4225 {4226 xFilterChromaSlices(ALF_Cb, pcPicDec, pcPicRest, coeff, filtNo, iChromaFormatShift);4227 }4228 }4229 if ((pcAlfParam->chroma_idc)&0x01)4230 {4231 if(!m_bUseNonCrossALF)4232 {4233 Int iStride = pcPicRest->getCStride();4234 Pel* pDec = pcPicDec->getCrAddr();4235 Pel* pRest = pcPicRest->getCrAddr();4236 4237 filterChroma(pRest, pDec, iStride, 0, (Int)(m_img_height>>1) -1, 0, (Int)(m_img_width>>1)-1, filtNo, coeff);4238 }4239 else4240 {4241 xFilterChromaSlices(ALF_Cr, pcPicDec, pcPicRest, coeff, filtNo, iChromaFormatShift);4242 }4243 }4244 4245 if(pcAlfParam->chroma_idc<3)4246 {4247 if(pcAlfParam->chroma_idc==1)4248 {4249 pcPicDec->copyToPicCb(pcPicRest);4250 }4251 if(pcAlfParam->chroma_idc==2)4252 {4253 pcPicDec->copyToPicCr(pcPicRest);4254 }4255 }4256 4257 }4258 #endif4259 #if LCU_SYNTAX_ALF4260 3356 /** Restore the not-filtered pixels 4261 3357 * \param [in] imgDec picture buffer before filtering … … 4264 3360 */ 4265 3361 Void TEncAdaptiveLoopFilter::xCopyDecToRestCUs(Pel* imgDec, Pel* imgRest, Int stride) 4266 #else4267 /** Restore the not-filtered pixels4268 * \param pcPicDec picture buffer before filtering4269 * \param pcPicRest picture buffer after filtering4270 */4271 Void TEncAdaptiveLoopFilter::xCopyDecToRestCUs(TComPicYuv* pcPicDec, TComPicYuv* pcPicRest)4272 #endif4273 3362 { 4274 3363 4275 3364 if(m_uiNumSlicesInPic > 1) 4276 3365 { 4277 #if LCU_SYNTAX_ALF4278 3366 Pel* pPicDecLuma = imgDec; 4279 3367 Pel* pPicRestLuma = imgRest; 4280 #else4281 Pel* pPicDecLuma = pcPicDec->getLumaAddr();4282 Pel* pPicRestLuma = pcPicRest->getLumaAddr();4283 Int stride = pcPicDec->getStride();4284 #endif4285 3368 UInt SUWidth = m_pcPic->getMinCUWidth(); 4286 3369 UInt SUHeight = m_pcPic->getMinCUHeight(); … … 4335 3418 { 4336 3419 TComDataCU* pcCU = m_pcPic->getCU( uiCUAddr ); 4337 #if LCU_SYNTAX_ALF4338 3420 xCopyDecToRestCU(pcCU, 0, 0, imgDec, imgRest, stride); 4339 #else 4340 xCopyDecToRestCU(pcCU, 0, 0, pcPicDec, pcPicRest); 4341 #endif 4342 } 4343 } 4344 4345 #if LCU_SYNTAX_ALF 3421 } 3422 } 3423 4346 3424 Void TEncAdaptiveLoopFilter::xCopyDecToRestCU(TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Pel* imgDec, Pel* imgRest, Int stride) 4347 #else4348 Void TEncAdaptiveLoopFilter::xCopyDecToRestCU(TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest)4349 #endif4350 3425 { 4351 3426 Bool bBoundary = false; … … 4369 3444 4370 3445 if( ( uiLPelX < pcCU->getSlice()->getSPS()->getPicWidthInLumaSamples() ) && ( uiTPelY < pcCU->getSlice()->getSPS()->getPicHeightInLumaSamples() ) ) 4371 #if LCU_SYNTAX_ALF4372 3446 xCopyDecToRestCU(pcCU, uiAbsPartIdx, uiDepth+1, imgDec, imgRest, stride); 4373 #else4374 xCopyDecToRestCU(pcCU, uiAbsPartIdx, uiDepth+1, pcPicDec, pcPicRest);4375 #endif4376 3447 } 4377 3448 return; … … 4380 3451 if (!pcCU->getAlfCtrlFlag(uiAbsPartIdx)) 4381 3452 { 4382 #if !LCU_SYNTAX_ALF4383 UInt uiCUAddr = pcCU->getAddr();4384 #endif4385 3453 Int iWidth = pcCU->getWidth(uiAbsPartIdx); 4386 3454 Int iHeight = pcCU->getHeight(uiAbsPartIdx); 4387 #if LCU_SYNTAX_ALF4388 3455 copyPixelsInOneRegion(imgRest, imgDec, stride, (Int)uiTPelY, iHeight, (Int)uiLPelX, iWidth); 4389 #else4390 Pel* pRec = pcPicDec->getLumaAddr(uiCUAddr, uiAbsPartIdx);4391 Pel* pFilt = pcPicRest->getLumaAddr(uiCUAddr, uiAbsPartIdx);4392 4393 Int iRecStride = pcPicDec->getStride();4394 Int iFiltStride = pcPicRest->getStride();4395 4396 for (Int y = 0; y < iHeight; y++)4397 {4398 for (Int x = 0; x < iWidth; x++)4399 {4400 pFilt[x] = pRec[x];4401 }4402 pRec += iRecStride;4403 pFilt += iFiltStride;4404 }4405 #endif4406 3456 } 4407 3457 } … … 4426 3476 Void TEncAdaptiveLoopFilter::predictALFCoeffLumaEnc(ALFParam* pcAlfParam, Int **pfilterCoeffSym, Int filter_shape) 4427 3477 { 4428 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3478 #if LCUALF_QP_DEPENDENT_BITS 4429 3479 Int alfPrecisionBit = getAlfPrecisionBit( m_alfQP ); 4430 3480 #endif … … 4442 3492 if((pcAlfParam->predMethod==0)|(ind==0)) 4443 3493 { 4444 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3494 #if LCUALF_QP_DEPENDENT_BITS 4445 3495 coeffPred = ((1<<alfPrecisionBit)-sum) >> 2; 4446 3496 #else … … 4465 3515 if((pcAlfParam->predMethod==0)|(ind==0)) 4466 3516 { 4467 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS3517 #if LCUALF_QP_DEPENDENT_BITS 4468 3518 coeffPred = (1<<alfPrecisionBit)-sum; 4469 3519 #else … … 4600 3650 *pDepthInt=NULL, kMinTab[MAX_SCAN_VAL], bitsCoeffScan[MAX_SCAN_VAL][MAX_EXP_GOLOMB], 4601 3651 minKStart, minBitsKStart, bitsKStart; 4602 #if ALF_SINGLE_FILTER_SHAPE4603 3652 Int minScanVal = MIN_SCAN_POS_CROSS; 4604 #else4605 int minScanVal = (fl==ALF_STAR5x5) ? 0 : MIN_SCAN_POS_CROSS;4606 #endif4607 3653 pDepthInt = pDepthIntTabShapes[fl]; 4608 3654 … … 4672 3718 // Coding parameters 4673 3719 // len += lengthFilterCodingParams(minKStart, maxScanVal, kMinTab, createBitstream); 4674 #if LCU_SYNTAX_ALF4675 3720 if (filters_per_group == 1) 4676 3721 { … … 4680 3725 else 4681 3726 { 4682 #endif4683 3727 len += (3 + maxScanVal); 4684 3728 … … 4686 3730 len += lengthFilterCoeffs(sqrFiltLength, filters_per_group, pDepthInt, pDiffQFilterCoeffIntPP, 4687 3731 kMinTab, createBitstream); 4688 #if LCU_SYNTAX_ALF 4689 } 4690 #endif 3732 } 4691 3733 4692 3734 return len; … … 4735 3777 { 4736 3778 scanPos = pDepthInt[i] - 1; 4737 #if LCU_SYNTAX_ALF4738 3779 Int k = (filters_per_group == 1) ? kMinTab[i] : kMinTab[scanPos]; 4739 3780 bit_cnt += lengthGolomb(abs(FilterCoeff[ind][i]), k); 4740 #else4741 bit_cnt += lengthGolomb(abs(FilterCoeff[ind][i]), kMinTab[scanPos]);4742 #endif4743 3781 } 4744 3782 } … … 4746 3784 } 4747 3785 4748 #if !LCU_SYNTAX_ALF 4749 4750 Void TEncAdaptiveLoopFilter::xEncALFLuma ( TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiMinRate, UInt64& ruiMinDist, Double& rdMinCost ) 4751 { 4752 //pcPicDec: extended decoded 4753 //pcPicRest: original decoded: filtered signal will be stored 4754 4755 UInt64 uiRate; 4756 UInt64 uiDist; 4757 Double dCost; 4758 Int LumaStride = pcPicOrg->getStride(); 4759 Pel* pOrg = pcPicOrg->getLumaAddr(); 4760 Pel* pRest = pcPicRest->getLumaAddr(); 4761 Pel* pDec = pcPicDec->getLumaAddr(); 4762 4763 Double dMinMethodCost = MAX_DOUBLE; 4764 UInt64 uiMinMethodDist = MAX_UINT; 4765 UInt64 uiMinMethodRate = MAX_UINT; 4766 Int iBestClassMethod = ALF_RA; 4767 Double adExtraCostReduction[NUM_ALF_CLASS_METHOD]; 4768 ALFParam cFrmAlfParam [NUM_ALF_CLASS_METHOD]; 4769 ALFParam* pcAlfParam = NULL; 4770 4771 for(Int i=0; i< NUM_ALF_CLASS_METHOD; i++) 4772 { 4773 pcAlfParam = &(cFrmAlfParam[i]); 4774 allocALFParam(pcAlfParam); 4775 4776 pcAlfParam->alf_flag = 1; 4777 pcAlfParam->chroma_idc = 0; 4778 4779 switch(i) 4780 { 4781 case ALF_RA: 4782 { 4783 adExtraCostReduction[i] = (double)(m_img_height * m_img_width) * m_dLambdaLuma * 2.0 / 4096.0; 4784 } 4785 break; 4786 case ALF_BA: 4787 { 4788 adExtraCostReduction[i] = 0.0; 4789 } 4790 break; 4791 default: 4792 { 4793 printf("Not a support adaptation method\n"); 4794 assert(0); 4795 exit(-1); 4796 } 4797 } 4798 } 4799 4800 4801 for(Int i=0; i< NUM_ALF_CLASS_METHOD; i++) 4802 { 4803 m_uiVarGenMethod = i; 4804 4805 pcAlfParam = &(cFrmAlfParam[m_uiVarGenMethod]); 4806 m_varImg = m_varImgMethods[m_uiVarGenMethod]; 4807 4808 pcAlfParam->alf_pcr_region_flag = m_uiVarGenMethod; 4809 4810 setInitialMask(pcPicOrg, pcPicDec); 4811 4812 if(m_iALFEncodePassReduction == 0) 4813 { 4814 static Int best_filter_shape = 0; 4815 if (m_uiVarGenMethod == 0) 4816 { 4817 UInt64 MinRate_Shape0 = MAX_INT; 4818 UInt64 MinDist_Shape0 = MAX_INT; 4819 Double MinCost_Shape0 = MAX_DOUBLE; 4820 4821 UInt64 MinRate_Shape1 = MAX_INT; 4822 UInt64 MinDist_Shape1 = MAX_INT; 4823 Double MinCost_Shape1 = MAX_DOUBLE; 4824 4825 #if ALF_SINGLE_FILTER_SHAPE 4826 Int filter_shape = 0; 4827 #else 4828 for (Int filter_shape = 0; filter_shape < 2 ;filter_shape ++) 4829 #endif 4830 { 4831 pcAlfParam->filter_shape = filter_shape; 4832 pcAlfParam->num_coeff = m_pcTempAlfParam->num_coeff = m_sqrFiltLengthTab[filter_shape]; 4833 xFirstFilteringFrameLuma(pOrg, pDec, m_pcPicYuvTmp->getLumaAddr(), pcAlfParam, pcAlfParam->filter_shape, LumaStride); 4834 xCalcRDCost(pcPicOrg, m_pcPicYuvTmp, pcAlfParam, uiRate, uiDist, dCost); 4835 if (filter_shape == 0) 4836 { 4837 // copy Shape0 4838 MinRate_Shape0 = uiRate; 4839 MinDist_Shape0 = uiDist; 4840 MinCost_Shape0 = dCost; 4841 m_pcPicYuvTmp->copyToPicLuma(pcPicYuvRecShape0); 4842 copyALFParam(pcAlfParamShape0, pcAlfParam); 4843 } 4844 else //if (filter_shape == 1) 4845 { 4846 // copy Shape1 4847 MinRate_Shape1 = uiRate; 4848 MinDist_Shape1 = uiDist; 4849 MinCost_Shape1 = dCost; 4850 m_pcPicYuvTmp->copyToPicLuma(pcPicYuvRecShape1); 4851 copyALFParam(pcAlfParamShape1, pcAlfParam); 4852 } 4853 } 4854 4855 if (MinCost_Shape0 <= MinCost_Shape1) 4856 { 4857 pcPicYuvRecShape0->copyToPicLuma(m_pcPicYuvTmp); 4858 copyALFParam(pcAlfParam, pcAlfParamShape0); 4859 uiRate = MinRate_Shape0; 4860 uiDist = MinDist_Shape0; 4861 dCost = MinCost_Shape0; 4862 best_filter_shape = 0; 4863 } 4864 else //if (MinCost_Shape1 < MinCost_Shape0) 4865 { 4866 pcPicYuvRecShape1->copyToPicLuma(m_pcPicYuvTmp); 4867 copyALFParam(pcAlfParam, pcAlfParamShape1); 4868 uiRate = MinRate_Shape1; 4869 uiDist = MinDist_Shape1; 4870 dCost = MinCost_Shape1; 4871 best_filter_shape = 1; 4872 } 4873 } 4874 else 4875 { 4876 pcAlfParam->filter_shape = best_filter_shape; 4877 pcAlfParam->num_coeff = m_pcTempAlfParam->num_coeff = m_sqrFiltLengthTab[best_filter_shape]; 4878 xFirstFilteringFrameLuma(pOrg, pDec, m_pcPicYuvTmp->getLumaAddr(), pcAlfParam, best_filter_shape, LumaStride); 4879 xCalcRDCost(pcPicOrg, m_pcPicYuvTmp, pcAlfParam, uiRate, uiDist, dCost); 4880 } 4881 } 4882 else 4883 { 4884 decideFilterShapeLuma(pOrg, pDec, LumaStride, pcAlfParam, uiRate, uiDist, dCost); 4885 } 4886 4887 dCost -= adExtraCostReduction[m_uiVarGenMethod]; 4888 4889 if(dCost < dMinMethodCost) 4890 { 4891 iBestClassMethod = m_uiVarGenMethod; 4892 dMinMethodCost = dCost; 4893 uiMinMethodRate= uiRate; 4894 uiMinMethodDist = uiDist; 4895 4896 if(m_iALFEncodePassReduction == 0) 4897 { 4898 m_pcPicYuvTmp->copyToPicLuma(pcPicRest); 4899 } 4900 } 4901 } 4902 4903 m_uiVarGenMethod = iBestClassMethod; 4904 dMinMethodCost += adExtraCostReduction[m_uiVarGenMethod]; 4905 m_varImg= m_varImgMethods[m_uiVarGenMethod]; 4906 4907 pcAlfParam = &(cFrmAlfParam[m_uiVarGenMethod]); 4908 4909 ALFParam cAlfParamWithBestMethod; 4910 allocALFParam(&cAlfParamWithBestMethod); 4911 4912 4913 if(m_iALFEncodePassReduction ==0) 4914 { 4915 copyALFParam(&cAlfParamWithBestMethod, pcAlfParam); 4916 } 4917 else 4918 { 4919 cAlfParamWithBestMethod.alf_flag = 1; 4920 cAlfParamWithBestMethod.chroma_idc = 0; 4921 cAlfParamWithBestMethod.alf_pcr_region_flag = m_uiVarGenMethod; 4922 cAlfParamWithBestMethod.filter_shape= pcAlfParam->filter_shape; 4923 cAlfParamWithBestMethod.num_coeff = m_sqrFiltLengthTab[cAlfParamWithBestMethod.filter_shape]; 4924 decodeFilterSet(pcAlfParam, m_varIndTab, m_filterCoeffSym); 4925 if(!m_bUseNonCrossALF) 4926 { 4927 filterLuma(pRest, pDec, LumaStride, 0, m_img_height-1, 0, m_img_width-1, pcAlfParam->filter_shape, m_filterCoeffSym, m_varIndTab, m_varImg); 4928 } 4929 else 4930 { 4931 xfilterSlicesEncoder(pDec, pRest, LumaStride, pcAlfParam->filter_shape, m_filterCoeffSym, m_varIndTab, m_varImg); 4932 } 4933 xcodeFiltCoeff(m_filterCoeffSym, pcAlfParam->filter_shape, m_varIndTab, pcAlfParam->filters_per_group,&cAlfParamWithBestMethod); 4934 4935 xCalcRDCost(pcPicOrg, pcPicRest, &cAlfParamWithBestMethod, uiMinMethodRate, uiMinMethodDist, dMinMethodCost); 4936 4937 } 4938 4939 if(dMinMethodCost < rdMinCost ) 4940 { 4941 ruiMinRate = uiMinMethodRate; 4942 ruiMinDist = uiMinMethodDist; 4943 rdMinCost = dMinMethodCost; 4944 copyALFParam(m_pcBestAlfParam, &cAlfParamWithBestMethod); 4945 } 4946 4947 freeALFParam(&cAlfParamWithBestMethod); 4948 for(Int i=0; i< NUM_ALF_CLASS_METHOD; i++) 4949 { 4950 freeALFParam(&cFrmAlfParam[i]); 4951 } 4952 } 4953 4954 4955 4956 Void TEncAdaptiveLoopFilter::xFirstFilteringFrameLuma(Pel* imgOrg, Pel* imgDec, Pel* imgRest, ALFParam* ALFp, Int filtNo, Int stride) 4957 { 4958 if(!m_bUseNonCrossALF) 4959 { 4960 xstoreInBlockMatrix(0, 0, m_img_height, m_img_width, true, true, imgOrg, imgDec, filtNo, stride); 4961 } 4962 else 4963 { 4964 xstoreInBlockMatrixforSlices(imgOrg, imgDec, filtNo, stride); 4965 } 4966 4967 4968 xFilteringFrameLuma(imgOrg, imgDec, imgRest, ALFp, filtNo, stride); 4969 } 4970 4971 Void TEncAdaptiveLoopFilter::xstoreInBlockMatrix(Int ypos, Int xpos, Int iheight, Int iwidth, Bool bResetBlockMatrix, Bool bSymmCopyBlockMatrix, Pel* pImgOrg, Pel* pImgPad, Int filtNo, Int stride) 4972 { 4973 4974 Pel regionOfInterested = (m_iDesignCurrentFilter ==1)?(1):(0); 4975 Int sqrFiltLength = (filtNo == 2)?((Int)(MAX_SQR_FILT_LENGTH)):(m_sqrFiltLengthTab[filtNo]); 4976 Int yposEnd = ypos + iheight -1; 4977 Int xposEnd = xpos + iwidth -1; 4978 Double ***EShape = m_EGlobalSym[filtNo]; 4979 Double **yShape = m_yGlobalSym[filtNo]; 4980 4981 Int ELocal[MAX_SQR_FILT_LENGTH]; 4982 Pel *pImgPad1, *pImgPad2, *pImgPad3, *pImgPad4; 4983 Int i,j,k,l,varInd, yLocal; 4984 double **E,*yy; 4985 4986 static Int numValidPels; 4987 if(bResetBlockMatrix) 4988 { 4989 numValidPels = 0; 4990 memset( m_pixAcc, 0,sizeof(double)*NO_VAR_BINS); 4991 for (varInd=0; varInd<NO_VAR_BINS; varInd++) 4992 { 4993 memset(yShape[varInd],0,sizeof(double)*MAX_SQR_FILT_LENGTH); 4994 for (k=0; k<sqrFiltLength; k++) 4995 { 4996 memset(EShape[varInd][k],0,sizeof(double)*MAX_SQR_FILT_LENGTH); 4997 } 4998 } 4999 for (i = 0; i < m_img_height; i++) 5000 { 5001 for (j = 0; j < m_img_width; j++) 5002 { 5003 if (m_maskImg[i][j] == regionOfInterested) 5004 { 5005 numValidPels++; 5006 } 5007 } 5008 } 5009 } 5010 5011 Int yLineInLCU; 5012 Int paddingLine ; 5013 5014 pImgPad += (ypos* stride); 5015 pImgOrg += (ypos* stride); 5016 5017 switch(filtNo) 5018 { 5019 #if !ALF_SINGLE_FILTER_SHAPE 5020 case ALF_STAR5x5: 5021 { 5022 for (i= ypos; i<= yposEnd; i++) 5023 { 5024 yLineInLCU = i % m_lcuHeight; 5025 5026 if (yLineInLCU < m_lineIdxPadBot || i-yLineInLCU+m_lcuHeight >= m_img_height ) 5027 { 5028 pImgPad1 = pImgPad + stride; 5029 pImgPad2 = pImgPad - stride; 5030 pImgPad3 = pImgPad + 2*stride; 5031 pImgPad4 = pImgPad - 2*stride; 5032 } 5033 else if (yLineInLCU < m_lineIdxPadTop) 5034 { 5035 paddingLine = - yLineInLCU + m_lineIdxPadTop - 1; 5036 pImgPad1 = pImgPad + min(paddingLine, 1)*stride; 5037 pImgPad2 = pImgPad - stride; 5038 pImgPad3 = pImgPad + min(paddingLine, 2)*stride; 5039 pImgPad4 = pImgPad - 2*stride; 5040 } 5041 else 5042 { 5043 paddingLine = yLineInLCU - m_lineIdxPadTop; 5044 pImgPad1 = pImgPad + stride; 5045 pImgPad2 = pImgPad - min(paddingLine, 1)*stride; 5046 pImgPad3 = pImgPad + 2*stride; 5047 pImgPad4 = pImgPad - min(paddingLine, 2)*stride; 5048 } 5049 5050 if ( (yLineInLCU == m_lineIdxPadTop || yLineInLCU == m_lineIdxPadTop-1) && i-yLineInLCU+m_lcuHeight < m_img_height ) 5051 { 5052 pImgPad+= stride; 5053 pImgOrg+= stride; 5054 continue; 5055 } 5056 else 5057 { 5058 for (j= xpos; j<= xposEnd; j++) 5059 { 5060 if ( (m_maskImg[i][j] == regionOfInterested) || (numValidPels == 0) ) 5061 { 5062 varInd = m_varImg[i/VAR_SIZE_H][j/VAR_SIZE_W]; 5063 memset(ELocal, 0, 10*sizeof(Int)); 5064 5065 ELocal[0] = (pImgPad3[j+2] + pImgPad4[j-2]); 5066 ELocal[1] = (pImgPad3[j ] + pImgPad4[j ]); 5067 ELocal[2] = (pImgPad3[j-2] + pImgPad4[j+2]); 5068 5069 ELocal[3] = (pImgPad1[j+1] + pImgPad2[j-1]); 5070 ELocal[4] = (pImgPad1[j ] + pImgPad2[j ]); 5071 ELocal[5] = (pImgPad1[j-1] + pImgPad2[j+1]); 5072 5073 ELocal[6] = (pImgPad[j+2] + pImgPad[j-2]); 5074 ELocal[7] = (pImgPad[j+1] + pImgPad[j-1]); 5075 ELocal[8] = (pImgPad[j ]); 5076 5077 yLocal= pImgOrg[j]; 5078 m_pixAcc[varInd]+=(yLocal*yLocal); 5079 E= EShape[varInd]; 5080 yy= yShape[varInd]; 5081 5082 for (k=0; k<10; k++) 5083 { 5084 for (l=k; l<10; l++) 5085 { 5086 E[k][l]+=(double)(ELocal[k]*ELocal[l]); 5087 } 5088 yy[k]+=(double)(ELocal[k]*yLocal); 5089 } 5090 5091 } 5092 } 5093 pImgPad+= stride; 5094 pImgOrg+= stride; 5095 } 5096 } 5097 } 5098 break; 5099 case ALF_CROSS9x9: 5100 { 5101 Pel *pImgPad5, *pImgPad6, *pImgPad7, *pImgPad8; 5102 #else 5103 case ALF_CROSS9x7_SQUARE3x3: 5104 { 5105 Pel *pImgPad5, *pImgPad6; 5106 #endif 5107 for (i= ypos; i<= yposEnd; i++) 5108 { 5109 yLineInLCU = i % m_lcuHeight; 5110 5111 if (yLineInLCU<m_lineIdxPadBot || i-yLineInLCU+m_lcuHeight >= m_img_height) 5112 { 5113 pImgPad1 = pImgPad + stride; 5114 pImgPad2 = pImgPad - stride; 5115 pImgPad3 = pImgPad + 2*stride; 5116 pImgPad4 = pImgPad - 2*stride; 5117 pImgPad5 = pImgPad + 3*stride; 5118 pImgPad6 = pImgPad - 3*stride; 5119 #if !ALF_SINGLE_FILTER_SHAPE 5120 pImgPad7 = pImgPad + 4*stride; 5121 pImgPad8 = pImgPad - 4*stride; 5122 #endif 5123 } 5124 else if (yLineInLCU<m_lineIdxPadTop) 5125 { 5126 paddingLine = - yLineInLCU + m_lineIdxPadTop - 1; 5127 pImgPad1 = (paddingLine < 1) ? pImgPad : pImgPad + min(paddingLine, 1)*stride; 5128 pImgPad2 = (paddingLine < 1) ? pImgPad : pImgPad - stride; 5129 pImgPad3 = (paddingLine < 2) ? pImgPad : pImgPad + min(paddingLine, 2)*stride; 5130 pImgPad4 = (paddingLine < 2) ? pImgPad : pImgPad - 2*stride; 5131 pImgPad5 = (paddingLine < 3) ? pImgPad : pImgPad + min(paddingLine, 3)*stride; 5132 pImgPad6 = (paddingLine < 3) ? pImgPad : pImgPad - 3*stride; 5133 #if !ALF_SINGLE_FILTER_SHAPE 5134 pImgPad7 = (paddingLine < 4) ? pImgPad : pImgPad + min(paddingLine, 4)*stride; 5135 pImgPad8 = (paddingLine < 4) ? pImgPad : pImgPad - 4*stride; 5136 #endif 5137 } 5138 else 5139 { 5140 paddingLine = yLineInLCU - m_lineIdxPadTop; 5141 pImgPad1 = (paddingLine < 1) ? pImgPad : pImgPad + stride; 5142 pImgPad2 = (paddingLine < 1) ? pImgPad : pImgPad - min(paddingLine, 1)*stride; 5143 pImgPad3 = (paddingLine < 2) ? pImgPad : pImgPad + 2*stride; 5144 pImgPad4 = (paddingLine < 2) ? pImgPad : pImgPad - min(paddingLine, 2)*stride; 5145 pImgPad5 = (paddingLine < 3) ? pImgPad : pImgPad + 3*stride; 5146 pImgPad6 = (paddingLine < 3) ? pImgPad : pImgPad - min(paddingLine, 3)*stride; 5147 #if !ALF_SINGLE_FILTER_SHAPE 5148 pImgPad7 = (paddingLine < 4) ? pImgPad : pImgPad + 4*stride; 5149 pImgPad8 = (paddingLine < 4) ? pImgPad : pImgPad - min(paddingLine, 4)*stride; 5150 #endif 5151 } 5152 5153 for (j= xpos; j<= xposEnd; j++) 5154 { 5155 if ( (m_maskImg[i][j] == regionOfInterested) || (numValidPels == 0) ) 5156 { 5157 varInd = m_varImg[i/VAR_SIZE_H][j/VAR_SIZE_W]; 5158 5159 #if ALF_SINGLE_FILTER_SHAPE 5160 memset(ELocal, 0, (sqrFiltLength+1)*sizeof(Int)); 5161 5162 ELocal[0] = (pImgPad5[j]+pImgPad6[j]); 5163 ELocal[1] = (pImgPad3[j]+pImgPad4[j]); 5164 ELocal[2] = (pImgPad1[j-1]+pImgPad2[j+1]); 5165 ELocal[3] = (pImgPad1[j]+pImgPad2[j]); 5166 ELocal[4] = (pImgPad1[j+1]+pImgPad2[j-1]); 5167 ELocal[5] = (pImgPad[j+4]+pImgPad[j-4]); 5168 ELocal[6] = (pImgPad[j+3]+pImgPad[j-3]); 5169 ELocal[7] = (pImgPad[j+2]+pImgPad[j-2]); 5170 ELocal[8] = (pImgPad[j+1]+pImgPad[j-1]); 5171 ELocal[9] = (pImgPad[j ]); 5172 #else 5173 memset(ELocal, 0, 10*sizeof(Int)); 5174 5175 ELocal[0] = (pImgPad7[j] + pImgPad8[j]); 5176 5177 ELocal[1] = (pImgPad5[j] + pImgPad6[j]); 5178 5179 ELocal[2] = (pImgPad3[j] + pImgPad4[j]); 5180 5181 ELocal[3] = (pImgPad1[j] + pImgPad2[j]); 5182 5183 ELocal[4] = (pImgPad[j+4] + pImgPad[j-4]); 5184 ELocal[5] = (pImgPad[j+3] + pImgPad[j-3]); 5185 ELocal[6] = (pImgPad[j+2] + pImgPad[j-2]); 5186 ELocal[7] = (pImgPad[j+1] + pImgPad[j-1]); 5187 ELocal[8] = (pImgPad[j ] ); 5188 #endif 5189 yLocal= pImgOrg[j]; 5190 m_pixAcc[varInd]+=(yLocal*yLocal); 5191 E= EShape[varInd]; 5192 yy= yShape[varInd]; 5193 5194 #if ALF_SINGLE_FILTER_SHAPE 5195 for (k=0; k<(sqrFiltLength+1); k++) 5196 { 5197 for (l=k; l<(sqrFiltLength+1); l++) 5198 { 5199 E[k][l]+=(double)(ELocal[k]*ELocal[l]); 5200 } 5201 yy[k]+=(double)(ELocal[k]*yLocal); 5202 } 5203 #else 5204 for (k=0; k<10; k++) 5205 { 5206 for (l=k; l<10; l++) 5207 { 5208 E[k][l]+=(double)(ELocal[k]*ELocal[l]); 5209 } 5210 yy[k]+=(double)(ELocal[k]*yLocal); 5211 } 5212 #endif 5213 } 5214 } 5215 pImgPad+= stride; 5216 pImgOrg+= stride; 5217 } 5218 5219 } 5220 break; 5221 default: 5222 { 5223 printf("Not a supported filter shape\n"); 5224 assert(0); 5225 exit(1); 5226 } 5227 } 5228 5229 if(bSymmCopyBlockMatrix) 5230 { 5231 for (varInd=0; varInd<NO_VAR_BINS; varInd++) 5232 { 5233 double **pE = EShape[varInd]; 5234 for (k=1; k<sqrFiltLength; k++) 5235 { 5236 for (l=0; l<k; l++) 5237 { 5238 pE[k][l]=pE[l][k]; 5239 } 5240 } 5241 } 5242 } 5243 } 5244 5245 5246 Void TEncAdaptiveLoopFilter::xFilteringFrameLuma(Pel* imgOrg, Pel* imgPad, Pel* imgFilt, ALFParam* ALFp, Int filtNo, Int stride) 5247 { 5248 static double **ySym, ***ESym; 5249 Int filters_per_fr; 5250 Int lambdaVal = (Int) m_dLambdaLuma; 5251 lambdaVal = lambdaVal * (1<<(2*g_uiBitIncrement)); 5252 5253 ESym=m_EGlobalSym[filtNo]; 5254 ySym=m_yGlobalSym[filtNo]; 5255 5256 xfindBestFilterVarPred(ySym, ESym, m_pixAcc, m_filterCoeffSym, m_filterCoeffSymQuant, filtNo, &filters_per_fr,m_varIndTab, NULL, m_varImg, m_maskImg, NULL, lambdaVal); 5257 5258 if(!m_bUseNonCrossALF) 5259 { 5260 filterLuma(imgFilt, imgPad, stride, 0, m_img_height-1, 0, m_img_width-1, ALFp->filter_shape, m_filterCoeffSym, m_varIndTab, m_varImg); 5261 } 5262 else 5263 { 5264 xfilterSlicesEncoder(imgPad, imgFilt, stride, filtNo, m_filterCoeffSym, m_varIndTab, m_varImg); 5265 } 5266 5267 xcodeFiltCoeff(m_filterCoeffSymQuant, filtNo, m_varIndTab, filters_per_fr,ALFp); 5268 } 5269 #endif 5270 5271 #if LCU_SYNTAX_ALF 3786 5272 3787 Void TEncAdaptiveLoopFilter::xfindBestFilterVarPred(double **ySym, double ***ESym, double *pixAcc, Int **filterCoeffSym, Int **filterCoeffSymQuant, Int filter_shape, Int *filters_per_fr_best, Int varIndTab[], Pel **imgY_rec, Pel **varImg, Pel **maskImg, Pel **imgY_pad, double lambda_val, Int numMaxFilters) 5273 #else5274 Void TEncAdaptiveLoopFilter::xfindBestFilterVarPred(double **ySym, double ***ESym, double *pixAcc, Int **filterCoeffSym, Int **filterCoeffSymQuant, Int filter_shape, Int *filters_per_fr_best, Int varIndTab[], Pel **imgY_rec, Pel **varImg, Pel **maskImg, Pel **imgY_pad, double lambda_val)5275 #endif5276 3788 { 5277 3789 Int filters_per_fr, firstFilt, interval[NO_VAR_BINS][2], intervalBest[NO_VAR_BINS][2]; … … 5305 3817 5306 3818 lagrangian=xfindBestCoeffCodMethod(filterCoeffSymQuant, filter_shape, sqrFiltLength, filters_per_fr, errorForce0CoeffTab, lambda_val); 5307 #if LCU_SYNTAX_ALF5308 3819 if (lagrangian<lagrangianMin || firstFilt==1 || filters_per_fr == numMaxFilters) 5309 #else5310 if (lagrangian<lagrangianMin || firstFilt==1 || filters_per_fr == m_iALFMaxNumberFilters)5311 #endif5312 3820 { 5313 3821 firstFilt=0; … … 5319 3827 filters_per_fr--; 5320 3828 } 5321 #if !ALF_16_BA_GROUPS5322 if ( (m_uiVarGenMethod == ALF_BA) && ((*filters_per_fr_best) > 1) )5323 {5324 Int iLastFilter = (*filters_per_fr_best)-1;5325 if (intervalBest[iLastFilter][0] == NO_VAR_BINS-1)5326 {5327 intervalBest[iLastFilter-1][1] = NO_VAR_BINS-1;5328 (*filters_per_fr_best) = iLastFilter;5329 }5330 }5331 #endif5332 3829 findFilterCoeff(ESym, ySym, pixAcc, filterCoeffSym, filterCoeffSymQuant, intervalBest, 5333 3830 varIndTab, sqrFiltLength, (*filters_per_fr_best), weights, errorForce0CoeffTab); … … 5489 3986 * \param [in,out]vAlfCUCtrlParam ALF CU control parameters 5490 3987 */ 5491 #if LCU_SYNTAX_ALF5492 3988 #if HHI_INTERVIEW_SKIP 5493 3989 Void TEncAdaptiveLoopFilter::setCUAlfCtrlFlags(UInt uiAlfCtrlDepth, Pel* imgOrg, Pel* imgDec, Pel* imgRest, Pel* imgUsed, Int stride, UInt64& ruiDist, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam) … … 5495 3991 Void TEncAdaptiveLoopFilter::setCUAlfCtrlFlags(UInt uiAlfCtrlDepth, Pel* imgOrg, Pel* imgDec, Pel* imgRest, Int stride, UInt64& ruiDist, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam) 5496 3992 #endif 5497 #else5498 #if HHI_INTERVIEW_SKIP5499 Void TEncAdaptiveLoopFilter::xSetCUAlfCtrlFlags_qc(UInt uiAlfCtrlDepth, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, TComPicYuv* pUsedPelMap, UInt64& ruiDist, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam)5500 #else5501 Void TEncAdaptiveLoopFilter::xSetCUAlfCtrlFlags_qc(UInt uiAlfCtrlDepth, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiDist, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam)5502 #endif5503 #endif5504 3993 { 5505 3994 ruiDist = 0; … … 5520 4009 { 5521 4010 TComDataCU* pcCU = m_pcPic->getCU( CUAddr ); 5522 #if LCU_SYNTAX_ALF5523 4011 #if HHI_INTERVIEW_SKIP 5524 4012 setCUAlfCtrlFlag(pcCU, 0, 0, uiAlfCtrlDepth, imgOrg, imgDec, imgRest, imgUsed, stride, ruiDist, vAlfCUCtrlParam[0].alf_cu_flag); 5525 4013 #else 5526 4014 setCUAlfCtrlFlag(pcCU, 0, 0, uiAlfCtrlDepth, imgOrg, imgDec, imgRest, stride, ruiDist, vAlfCUCtrlParam[0].alf_cu_flag); 5527 #endif5528 #else5529 #if HHI_INTERVIEW_SKIP5530 xSetCUAlfCtrlFlag_qc(pcCU, 0, 0, uiAlfCtrlDepth, pcPicOrg, pcPicDec, pcPicRest,imgUsed, ruiDist, vAlfCUCtrlParam[0].alf_cu_flag);5531 #else5532 xSetCUAlfCtrlFlag_qc(pcCU, 0, 0, uiAlfCtrlDepth, pcPicOrg, pcPicDec, pcPicRest, ruiDist, vAlfCUCtrlParam[0].alf_cu_flag);5533 #endif5534 4015 #endif 5535 4016 } … … 5569 4050 } 5570 4051 5571 #if LCU_SYNTAX_ALF5572 4052 #if HHI_INTERVIEW_SKIP 5573 4053 Void TEncAdaptiveLoopFilter::setCUAlfCtrlFlag(TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiAlfCtrlDepth, Pel* imgOrg, Pel* imgDec, Pel* imgRest, Pel* imgUsed, Int stride, UInt64& ruiDist, std::vector<UInt>& vCUCtrlFlag) 5574 4054 #else 5575 4055 Void TEncAdaptiveLoopFilter::setCUAlfCtrlFlag(TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiAlfCtrlDepth, Pel* imgOrg, Pel* imgDec, Pel* imgRest, Int stride, UInt64& ruiDist, std::vector<UInt>& vCUCtrlFlag) 5576 #endif5577 #else5578 #if HHI_INTERVIEW_SKIP5579 Void TEncAdaptiveLoopFilter::xSetCUAlfCtrlFlag_qc(TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiAlfCtrlDepth, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, TComPicYuv* pcUsedPelMap, UInt64& ruiDist, std::vector<UInt>& vCUCtrlFlag)5580 #else5581 Void TEncAdaptiveLoopFilter::xSetCUAlfCtrlFlag_qc(TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiAlfCtrlDepth, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiDist, std::vector<UInt>& vCUCtrlFlag)5582 #endif5583 4056 #endif 5584 4057 { … … 5603 4076 5604 4077 if( ( uiLPelX < pcCU->getSlice()->getSPS()->getPicWidthInLumaSamples() ) && ( uiTPelY < pcCU->getSlice()->getSPS()->getPicHeightInLumaSamples() ) ) 5605 #if LCU_SYNTAX_ALF5606 4078 #if HHI_INTERVIEW_SKIP 5607 4079 setCUAlfCtrlFlag(pcCU, uiAbsPartIdx, uiDepth+1, uiAlfCtrlDepth, imgOrg, imgDec, imgRest, imgUsed, stride, ruiDist, vCUCtrlFlag); … … 5609 4081 setCUAlfCtrlFlag(pcCU, uiAbsPartIdx, uiDepth+1, uiAlfCtrlDepth, imgOrg, imgDec, imgRest, stride, ruiDist, vCUCtrlFlag); 5610 4082 #endif 5611 #else5612 #if HHI_INTERVIEW_SKIP5613 xSetCUAlfCtrlFlag_qc(pcCU, uiAbsPartIdx, uiDepth+1, uiAlfCtrlDepth, pcPicOrg, pcPicDec, pcPicRest, imgUsed, ruiDist, vCUCtrlFlag);5614 #else5615 xSetCUAlfCtrlFlag_qc(pcCU, uiAbsPartIdx, uiDepth+1, uiAlfCtrlDepth, pcPicOrg, pcPicDec, pcPicRest, ruiDist, vCUCtrlFlag);5616 #endif5617 #endif5618 4083 } 5619 4084 return; … … 5624 4089 return; 5625 4090 } 5626 #if !LCU_SYNTAX_ALF5627 UInt uiCUAddr = pcCU->getAddr();5628 #endif5629 4091 UInt64 uiRecSSD = 0; 5630 4092 UInt64 uiFiltSSD = 0; … … 5661 4123 } 5662 4124 5663 #if LCU_SYNTAX_ALF5664 4125 Int offset = uiTPelY*stride + uiLPelX; 5665 4126 Pel* pOrg = imgOrg + offset; … … 5679 4140 uiFiltSSD += xCalcSSD( pOrg, pFilt, iWidth, iHeight, stride ); 5680 4141 #endif 5681 #else5682 Pel* pOrg = pcPicOrg->getLumaAddr(uiCUAddr, uiAbsPartIdx);5683 Pel* pRec = pcPicDec->getLumaAddr(uiCUAddr, uiAbsPartIdx);5684 Pel* pFilt = pcPicRest->getLumaAddr(uiCUAddr, uiAbsPartIdx);5685 5686 #if HHI_INTERVIEW_SKIP5687 Pel* pUsed = pcUsedPelMap->getLumaAddr(uiCUAddr, uiAbsPartIdx);5688 uiRecSSD += xCalcSSD( pOrg, pRec, pUsed, iWidth, iHeight, pcPicOrg->getStride() );5689 uiFiltSSD += xCalcSSD( pOrg, pFilt, pUsed, iWidth, iHeight, pcPicOrg->getStride() );5690 #else5691 uiRecSSD += xCalcSSD( pOrg, pRec, iWidth, iHeight, pcPicOrg->getStride() );5692 uiFiltSSD += xCalcSSD( pOrg, pFilt, iWidth, iHeight, pcPicOrg->getStride() );5693 #endif5694 #endif5695 4142 if (uiFiltSSD < uiRecSSD) 5696 4143 { … … 5699 4146 vCUCtrlFlag.push_back(1); 5700 4147 5701 #if LCU_SYNTAX_ALF5702 4148 for (int i=uiTPelY ;i<=min(uiBPelY,(unsigned int)(m_img_height-1)) ;i++) 5703 4149 { 5704 4150 for (int j=uiLPelX ;j<=min(uiRPelX,(unsigned int)(m_img_width-1)) ;j++) 5705 4151 { 5706 #else5707 for (int i=uiTPelY ;i<=min(uiBPelY,(unsigned int)(pcPicOrg->getHeight()-1)) ;i++)5708 {5709 for (int j=uiLPelX ;j<=min(uiRPelX,(unsigned int)(pcPicOrg->getWidth()-1)) ;j++)5710 {5711 #endif5712 4152 m_maskImg[i][j]=1; 5713 4153 } … … 5719 4159 pcCU->setAlfCtrlFlagSubParts(0, uiAbsPartIdx, uiSetDepth); 5720 4160 vCUCtrlFlag.push_back(0); 5721 #if LCU_SYNTAX_ALF5722 4161 for (int i=uiTPelY ;i<=min(uiBPelY,(unsigned int)(m_img_height-1)) ;i++) 5723 4162 { 5724 4163 for (int j=uiLPelX ;j<=min(uiRPelX,(unsigned int)(m_img_width-1)) ;j++) 5725 4164 { 5726 #else5727 for (int i=uiTPelY ;i<=min(uiBPelY,(unsigned int)(pcPicOrg->getHeight()-1)) ;i++)5728 {5729 for (int j=uiLPelX ;j<=min(uiRPelX,(unsigned int)(pcPicOrg->getWidth()-1)) ;j++)5730 {5731 #endif5732 4165 m_maskImg[i][j]=0; 5733 4166 } … … 5736 4169 } 5737 4170 5738 #if !LCU_SYNTAX_ALF5739 5740 Void TEncAdaptiveLoopFilter::xReDesignFilterCoeff_qc(TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, Bool bReadCorr)5741 {5742 Int tap = m_pcTempAlfParam->filter_shape;5743 Int LumaStride = pcPicOrg->getStride();5744 Pel* pOrg = pcPicOrg->getLumaAddr();5745 Pel* pDec = pcPicDec->getLumaAddr();5746 Pel* pRest = pcPicRest->getLumaAddr();5747 xFirstFilteringFrameLuma(pOrg, pDec, pRest, m_pcTempAlfParam, tap, LumaStride);5748 5749 if (m_iALFEncodePassReduction)5750 {5751 if(!m_iUsePreviousFilter)5752 {5753 saveFilterCoeffToBuffer(m_filterCoeffSym, m_pcTempAlfParam->filters_per_group, m_varIndTab, m_pcTempAlfParam->alf_pcr_region_flag, tap);5754 }5755 }5756 }5757 5758 Void TEncAdaptiveLoopFilter::xCUAdaptiveControl_qc(TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiMinRate, UInt64& ruiMinDist, Double& rdMinCost)5759 {5760 if(!m_bAlfCUCtrlEnabled) return;5761 Bool bChanged = false;5762 std::vector<AlfCUCtrlInfo> vAlfCUCtrlParamTemp(m_vBestAlfCUCtrlParam);5763 5764 Pel** maskImgTemp;5765 5766 if(m_iALFEncodePassReduction == 2)5767 {5768 initMatrix_Pel(&maskImgTemp, m_img_height, m_img_width);5769 }5770 5771 m_pcEntropyCoder->setAlfCtrl(true);5772 5773 UInt uiBestDepth = 0;5774 5775 ALFParam cFrmAlfParam;5776 allocALFParam(&cFrmAlfParam);5777 copyALFParam(&cFrmAlfParam, m_pcBestAlfParam);5778 5779 for (UInt uiDepth = 0; uiDepth < g_uiMaxCUDepth; uiDepth++)5780 {5781 m_pcEntropyCoder->setMaxAlfCtrlDepth(uiDepth);5782 pcPicRest->copyToPicLuma(m_pcPicYuvTmp);5783 copyALFParam(m_pcTempAlfParam, &cFrmAlfParam);5784 5785 for (UInt uiRD = 0; uiRD <= m_iALFNumOfRedesign; uiRD++)5786 {5787 if (uiRD)5788 {5789 // re-design filter coefficients5790 xReDesignFilterCoeff_qc(pcPicOrg, pcPicDec, m_pcPicYuvTmp, true); //use filtering of mine5791 }5792 5793 UInt64 uiRate, uiDist;5794 Double dCost;5795 //m_pcPicYuvTmp: filtered signal, pcPicDec: orig reconst5796 xSetCUAlfCtrlFlags_qc(uiDepth, pcPicOrg, pcPicDec, m_pcPicYuvTmp, uiDist, vAlfCUCtrlParamTemp);5797 xCalcRDCost(m_pcTempAlfParam, uiRate, uiDist, dCost, &vAlfCUCtrlParamTemp);5798 if (dCost < rdMinCost)5799 {5800 bChanged = true;5801 m_vBestAlfCUCtrlParam = vAlfCUCtrlParamTemp;5802 uiBestDepth = uiDepth;5803 rdMinCost = dCost;5804 ruiMinDist = uiDist;5805 ruiMinRate = uiRate;5806 m_pcPicYuvTmp->copyToPicLuma(m_pcPicYuvBest);5807 copyALFParam(m_pcBestAlfParam, m_pcTempAlfParam);5808 //save maskImg5809 xCopyTmpAlfCtrlFlagsFrom();5810 if(m_iALFEncodePassReduction == 2)5811 {5812 ::memcpy(maskImgTemp[0], m_maskImg[0], sizeof(Pel)*m_img_height* m_img_width);5813 }5814 }5815 }5816 }5817 5818 if(bChanged)5819 {5820 if(m_iALFEncodePassReduction == 2)5821 {5822 UInt uiDepth = uiBestDepth;5823 ::memcpy(m_maskImg[0], maskImgTemp[0], sizeof(Pel)*m_img_height* m_img_width);5824 xCopyTmpAlfCtrlFlagsTo();5825 5826 copyALFParam(&cFrmAlfParam, m_pcBestAlfParam);5827 5828 m_pcEntropyCoder->setAlfCtrl(true);5829 m_pcEntropyCoder->setMaxAlfCtrlDepth(uiDepth);5830 copyALFParam(m_pcTempAlfParam, &cFrmAlfParam);5831 5832 xReDesignFilterCoeff_qc(pcPicOrg, pcPicDec, m_pcPicYuvTmp, true); //use filtering of mine5833 5834 UInt64 uiRate, uiDist;5835 Double dCost;5836 xSetCUAlfCtrlFlags_qc(uiDepth, pcPicOrg, pcPicDec, m_pcPicYuvTmp, uiDist, vAlfCUCtrlParamTemp);5837 xCalcRDCost(m_pcTempAlfParam, uiRate, uiDist, dCost, &vAlfCUCtrlParamTemp);5838 if (dCost < rdMinCost)5839 {5840 rdMinCost = dCost;5841 ruiMinDist = uiDist;5842 ruiMinRate = uiRate;5843 m_pcPicYuvTmp->copyToPicLuma(m_pcPicYuvBest);5844 copyALFParam(m_pcBestAlfParam, m_pcTempAlfParam);5845 xCopyTmpAlfCtrlFlagsFrom();5846 m_vBestAlfCUCtrlParam = vAlfCUCtrlParamTemp;5847 }5848 }5849 5850 m_pcEntropyCoder->setAlfCtrl(true);5851 m_pcEntropyCoder->setMaxAlfCtrlDepth(uiBestDepth);5852 xCopyTmpAlfCtrlFlagsTo();5853 5854 m_pcPicYuvBest->copyToPicLuma(pcPicRest);//copy m_pcPicYuvBest to pcPicRest5855 xCopyDecToRestCUs(pcPicDec, pcPicRest); //pcPicRest = pcPicDec5856 }5857 else5858 {5859 m_pcEntropyCoder->setAlfCtrl(false);5860 m_pcEntropyCoder->setMaxAlfCtrlDepth(0);5861 }5862 freeALFParam(&cFrmAlfParam);5863 5864 if(m_iALFEncodePassReduction == 2)5865 {5866 destroyMatrix_Pel(maskImgTemp);5867 }5868 }5869 5870 #endif5871 4171 5872 4172 #define ROUND(a) (((a) < 0)? (int)((a) - 0.5) : (int)((a) + 0.5)) … … 6242 4542 { 6243 4543 double error; 6244 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS4544 #if LCUALF_QP_DEPENDENT_BITS 6245 4545 Int factor = (1<<(getAlfPrecisionBit(m_alfQP))); 6246 4546 #else … … 6384 4684 } 6385 4685 6386 #if !LCU_SYNTAX_ALF6387 6388 /** Save redesigned filter set to buffer6389 * \param filterCoeffPrevSelected filter set buffer6390 */6391 Void TEncAdaptiveLoopFilter::saveFilterCoeffToBuffer(Int **filterSet, Int numFilter, Int* mergeTable, Int mode, Int filtNo)6392 {6393 Int iBufferIndex = m_iCurrentPOC % m_iGOPSize;6394 6395 static Bool bFirst = true;6396 static Bool* pbFirstAccess;6397 if(bFirst)6398 {6399 pbFirstAccess = new Bool[NUM_ALF_CLASS_METHOD];6400 for(Int i=0; i< NUM_ALF_CLASS_METHOD; i++)6401 {6402 pbFirstAccess[i]= true;6403 }6404 bFirst = false;6405 }6406 6407 if(iBufferIndex == 0)6408 {6409 if(pbFirstAccess[mode])6410 {6411 //store merge table6412 ::memcpy(m_mergeTableSavedMethods[mode][m_iGOPSize], mergeTable, sizeof(Int)*NO_VAR_BINS);6413 //store coefficients6414 for(Int varInd=0; varInd< numFilter; varInd++)6415 {6416 ::memcpy(m_aiFilterCoeffSavedMethods[mode][m_iGOPSize][varInd],filterSet[varInd], sizeof(Int)*ALF_MAX_NUM_COEF );6417 }6418 //store filter shape6419 m_iPreviousFilterShapeMethods[mode][m_iGOPSize]= filtNo;6420 6421 pbFirstAccess[mode] = false;6422 }6423 6424 6425 //store merge table6426 ::memcpy(m_mergeTableSavedMethods[mode][0 ], m_mergeTableSavedMethods[mode][m_iGOPSize], sizeof(Int)*NO_VAR_BINS);6427 ::memcpy(m_mergeTableSavedMethods[mode][m_iGOPSize], mergeTable, sizeof(Int)*NO_VAR_BINS);6428 6429 //store coefficients6430 for(Int varInd=0; varInd< NO_VAR_BINS; varInd++)6431 {6432 ::memcpy(m_aiFilterCoeffSavedMethods[mode][0][varInd],m_aiFilterCoeffSavedMethods[mode][m_iGOPSize][varInd], sizeof(Int)*ALF_MAX_NUM_COEF );6433 }6434 6435 for(Int varInd=0; varInd< numFilter; varInd++)6436 {6437 ::memcpy(m_aiFilterCoeffSavedMethods[mode][m_iGOPSize][varInd],filterSet[varInd], sizeof(Int)*ALF_MAX_NUM_COEF );6438 }6439 6440 //store filter shape6441 m_iPreviousFilterShapeMethods[mode][0]= m_iPreviousFilterShapeMethods[mode][m_iGOPSize];6442 m_iPreviousFilterShapeMethods[mode][m_iGOPSize]= filtNo;6443 }6444 else6445 {6446 6447 //store merge table6448 ::memcpy(m_mergeTableSavedMethods[mode][iBufferIndex], mergeTable, sizeof(Int)*NO_VAR_BINS);6449 6450 //store coefficients6451 for(Int varInd=0; varInd< numFilter; varInd++)6452 {6453 ::memcpy(m_aiFilterCoeffSavedMethods[mode][iBufferIndex][varInd],filterSet[varInd], sizeof(Int)*ALF_MAX_NUM_COEF );6454 }6455 //store filter_shape6456 m_iPreviousFilterShapeMethods[mode][iBufferIndex]= filtNo;6457 6458 }6459 }6460 6461 6462 /** set initial m_maskImg with previous (time-delayed) filters6463 * \param pcPicOrg original picture6464 * \param pcPicDec reconstructed picture after deblocking6465 */6466 Void TEncAdaptiveLoopFilter::setMaskWithTimeDelayedResults(TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec)6467 {6468 6469 static Pel** bestImgMask;6470 static Bool bFirst = true;6471 if(bFirst)6472 {6473 initMatrix_Pel(&bestImgMask, m_img_height, m_img_width);6474 bFirst = false;6475 }6476 6477 Pel* pDec = pcPicDec->getLumaAddr();6478 Pel* pOrg = pcPicOrg->getLumaAddr();6479 Pel* pRest = m_pcPicYuvTmp->getLumaAddr();6480 Int LumaStride = pcPicOrg->getStride();6481 Int*** pppCoeffSaved = m_aiFilterCoeffSavedMethods [m_uiVarGenMethod];6482 Int** ppMergeTableSaved = m_mergeTableSavedMethods [m_uiVarGenMethod];6483 Int* pFilterShapeSaved = m_iPreviousFilterShapeMethods[m_uiVarGenMethod];6484 Int iBufIdx;6485 6486 UInt64 uiRate, uiDist;6487 Double dCost, dMinCost = MAX_DOUBLE;6488 ALFParam cAlfParam;6489 allocALFParam(&cAlfParam);6490 cAlfParam.alf_flag = 0;6491 cAlfParam.chroma_idc = 0;6492 6493 //filter frame with the previous time-delayed filters6494 Int filtNo;6495 Int maxDepth = (pcPicOrg->getWidth() < 1000) ?(2):(g_uiMaxCUDepth);6496 m_pcEntropyCoder->setAlfCtrl(true);6497 m_pcTempAlfParam->alf_flag = 1;6498 m_pcTempAlfParam->alf_pcr_region_flag = m_uiVarGenMethod;6499 6500 for (Int index=0; index<2; index++)6501 {6502 iBufIdx = setFilterIdx(index);6503 filtNo = m_pcTempAlfParam->filter_shape = pFilterShapeSaved[iBufIdx];6504 #if ALF_SINGLE_FILTER_SHAPE6505 assert(filtNo == ALF_CROSS9x7_SQUARE3x3);6506 #else6507 assert(filtNo == ALF_STAR5x5 || filtNo == ALF_CROSS9x9);6508 #endif6509 m_pcTempAlfParam->num_coeff = m_sqrFiltLengthTab[filtNo];6510 if(!m_bUseNonCrossALF)6511 {6512 filterLuma(pRest, pDec, LumaStride, 0, m_img_height-1, 0, m_img_width-1, filtNo, pppCoeffSaved[iBufIdx], ppMergeTableSaved[iBufIdx], m_varImg);6513 }6514 else6515 {6516 xfilterSlicesEncoder(pDec, pRest, LumaStride, filtNo, pppCoeffSaved[iBufIdx], ppMergeTableSaved[iBufIdx], m_varImg);6517 }6518 6519 for (UInt uiDepth = 0; uiDepth < maxDepth; uiDepth++)6520 {6521 m_pcEntropyCoder->setMaxAlfCtrlDepth(uiDepth);6522 std::vector<AlfCUCtrlInfo> vAlfCUCtrlParamTemp(m_uiNumSlicesInPic);6523 xSetCUAlfCtrlFlags_qc(uiDepth, pcPicOrg, pcPicDec, m_pcPicYuvTmp, uiDist, vAlfCUCtrlParamTemp);6524 m_pcEntropyCoder->resetEntropy();6525 m_pcEntropyCoder->resetBits();6526 xEncodeCUAlfCtrlFlags(vAlfCUCtrlParamTemp);6527 uiRate = m_pcEntropyCoder->getNumberOfWrittenBits();6528 dCost = (Double)(uiRate) * m_dLambdaLuma + (Double)(uiDist);6529 6530 if (dCost < dMinCost)6531 {6532 dMinCost = dCost;6533 copyALFParam(&cAlfParam, m_pcTempAlfParam);6534 ::memcpy(bestImgMask[0], m_maskImg[0], sizeof(Pel)*m_img_height* m_img_width);6535 }6536 }6537 }6538 filtNo = cAlfParam.filter_shape;6539 6540 6541 ::memcpy(m_maskImg[0], bestImgMask[0], sizeof(Pel)*m_img_height* m_img_width);6542 6543 m_pcEntropyCoder->setAlfCtrl(false);6544 m_pcEntropyCoder->setMaxAlfCtrlDepth(0);6545 6546 // generate filters for future reference6547 m_iDesignCurrentFilter = 0;6548 6549 int filters_per_fr;6550 int lambda_val = (Int)m_dLambdaLuma;6551 6552 lambda_val = lambda_val * (1<<(2*g_uiBitIncrement));6553 6554 if(!m_bUseNonCrossALF)6555 {6556 xstoreInBlockMatrix(0, 0, m_img_height, m_img_width, true, true, pOrg, pDec, cAlfParam.filter_shape, LumaStride);6557 }6558 else6559 {6560 xstoreInBlockMatrixforSlices(pOrg, pDec, cAlfParam.filter_shape, LumaStride);6561 }6562 xfindBestFilterVarPred(m_yGlobalSym[filtNo], m_EGlobalSym[filtNo], m_pixAcc,6563 m_filterCoeffSym, m_filterCoeffSymQuant,6564 filtNo, &filters_per_fr,6565 m_varIndTab, NULL, m_varImg, m_maskImg, NULL, lambda_val);6566 6567 saveFilterCoeffToBuffer(m_filterCoeffSym, filters_per_fr, m_varIndTab, cAlfParam.alf_pcr_region_flag, filtNo);6568 m_iDesignCurrentFilter = 1;6569 6570 freeALFParam(&cAlfParam);6571 6572 }6573 6574 6575 /** set ALF encoding parameters6576 * \param pcPic picture pointer6577 */6578 Void TEncAdaptiveLoopFilter::setALFEncodingParam(TComPic *pcPic)6579 {6580 if(m_iALFEncodePassReduction)6581 {6582 m_iALFNumOfRedesign = 0;6583 m_iCurrentPOC = m_pcPic->getPOC();6584 if((pcPic->getSlice(0)->getSliceType() == I_SLICE) || (m_iGOPSize==8 && (m_iCurrentPOC % 4 == 0)))6585 {6586 m_iUsePreviousFilter = 0;6587 }6588 else6589 {6590 m_iUsePreviousFilter = 1;6591 }6592 }6593 else6594 {6595 m_iALFNumOfRedesign = ALF_NUM_OF_REDESIGN;6596 }6597 m_iDesignCurrentFilter = 1;6598 6599 }6600 6601 /** set filter buffer index6602 * \param index the processing order of time-delayed filtering6603 */6604 Int TEncAdaptiveLoopFilter::setFilterIdx(Int index)6605 {6606 Int iBufIdx;6607 6608 if (m_iGOPSize == 8)6609 {6610 switch(m_iCurrentPOC % m_iGOPSize)6611 {6612 case 0:6613 {6614 iBufIdx = (index == 0)?0:m_iGOPSize;6615 }6616 break;6617 case 1:6618 {6619 iBufIdx = (index == 0)?0:2;6620 }6621 break;6622 case 2:6623 {6624 iBufIdx = (index == 0)?0:4;6625 }6626 break;6627 case 3:6628 {6629 iBufIdx = (index == 0)?2:4;6630 }6631 break;6632 case 4:6633 {6634 iBufIdx = (index == 0)?0:m_iGOPSize;6635 }6636 break;6637 case 5:6638 {6639 iBufIdx = (index == 0)?4:6;6640 }6641 break;6642 case 6:6643 {6644 iBufIdx = (index == 0)?4:m_iGOPSize;6645 }6646 break;6647 case 7:6648 {6649 iBufIdx = (index == 0)?6:m_iGOPSize;6650 }6651 break;6652 default:6653 {6654 printf("error\n");6655 assert(0);6656 }6657 }6658 }6659 else6660 {6661 iBufIdx = (index == 0)?0:m_iGOPSize;6662 }6663 6664 return iBufIdx;6665 }6666 6667 6668 /** set initial m_maskImg6669 * \param pcPicOrg original picture pointer6670 * \param pcPicDec reconstructed picture pointer6671 */6672 Void TEncAdaptiveLoopFilter::setInitialMask(TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec)6673 {6674 Int Height = pcPicOrg->getHeight();6675 Int Width = pcPicOrg->getWidth();6676 Int LumaStride = pcPicOrg->getStride();6677 Pel* pDec = pcPicDec->getLumaAddr();6678 6679 calcVar(m_varImg, pDec, LumaStride, m_uiVarGenMethod);6680 6681 if(!m_iALFEncodePassReduction || !m_iUsePreviousFilter)6682 {6683 for(Int y=0; y<Height; y++)6684 {6685 for(Int x=0; x<Width; x++)6686 {6687 m_maskImg[y][x] = 1;6688 }6689 }6690 }6691 else6692 {6693 setMaskWithTimeDelayedResults(pcPicOrg, pcPicDec);6694 }6695 }6696 6697 6698 6699 /** Estimate RD cost of all filter size & store the best one6700 * \param ImgOrg original picture6701 * \param ImgDec reconstructed picture after deblocking6702 * \param Sride line buffer size of picture buffer6703 * \param pcAlfSaved the best Alf parameters6704 * \returns ruiDist estimated distortion6705 * \returns ruiRate required bits6706 * \returns rdCost estimated R-D cost6707 */6708 6709 Void TEncAdaptiveLoopFilter::decideFilterShapeLuma(Pel* ImgOrg, Pel* ImgDec, Int Stride, ALFParam* pcAlfSaved, UInt64& ruiRate, UInt64& ruiDist, Double& rdCost)6710 {6711 static Double **ySym, ***ESym;6712 Int lambda_val = ((Int) m_dLambdaLuma) * (1<<(2*g_uiBitIncrement));6713 Int filtNo, filters_per_fr;6714 Int64 iEstimatedDist;6715 UInt64 uiRate;6716 Double dEstimatedCost, dEstimatedMinCost = MAX_DOUBLE;;6717 6718 UInt uiBitShift = (g_uiBitIncrement<<1);6719 Int64 iEstimateDistBeforeFilter;6720 Int* coeffNoFilter[NUM_ALF_FILTER_SHAPE][NO_VAR_BINS];6721 for(Int filter_shape = 0; filter_shape < NUM_ALF_FILTER_SHAPE; filter_shape++)6722 {6723 for(Int i=0; i< NO_VAR_BINS; i++)6724 {6725 coeffNoFilter[filter_shape][i]= new Int[ALF_MAX_NUM_COEF];6726 ::memset(coeffNoFilter[filter_shape][i], 0, sizeof(Int)*ALF_MAX_NUM_COEF);6727 coeffNoFilter[filter_shape][i][ m_sqrFiltLengthTab[filter_shape]-1 ] = (1 << ((Int)ALF_NUM_BIT_SHIFT));6728 }6729 }6730 6731 m_pcTempAlfParam->alf_flag = 1;6732 m_pcTempAlfParam->chroma_idc = 0;6733 m_pcTempAlfParam->alf_pcr_region_flag = m_uiVarGenMethod;6734 6735 for (int filter_shape = 0; filter_shape < NUM_ALF_FILTER_SHAPE ;filter_shape ++)6736 {6737 m_pcTempAlfParam->filter_shape = filtNo = filter_shape;6738 m_pcTempAlfParam->num_coeff = m_sqrFiltLengthTab[filtNo] ;6739 6740 ESym = m_EGlobalSym [filtNo];6741 ySym = m_yGlobalSym [filtNo];6742 6743 if(!m_bUseNonCrossALF)6744 {6745 xstoreInBlockMatrix(0, 0, m_img_height, m_img_width, true, true, ImgOrg, ImgDec, filter_shape, Stride);6746 }6747 else6748 {6749 xstoreInBlockMatrixforSlices(ImgOrg, ImgDec, filter_shape, Stride);6750 }6751 xfindBestFilterVarPred(ySym, ESym, m_pixAcc, m_filterCoeffSym, m_filterCoeffSymQuant, filtNo, &filters_per_fr, m_varIndTab, NULL, m_varImg, m_maskImg, NULL, lambda_val);6752 6753 //estimate R-D cost6754 uiRate = xcodeFiltCoeff(m_filterCoeffSymQuant, filtNo, m_varIndTab, filters_per_fr, m_pcTempAlfParam);6755 iEstimatedDist = xEstimateFiltDist(filters_per_fr, m_varIndTab, ESym, ySym, m_filterCoeffSym, m_pcTempAlfParam->num_coeff);6756 iEstimateDistBeforeFilter = xEstimateFiltDist(filters_per_fr, m_varIndTab, ESym, ySym, coeffNoFilter[filter_shape], m_pcTempAlfParam->num_coeff);6757 iEstimatedDist -= iEstimateDistBeforeFilter;6758 dEstimatedCost = (Double)(uiRate) * m_dLambdaLuma + (Double)(iEstimatedDist);6759 6760 if(dEstimatedCost < dEstimatedMinCost)6761 {6762 dEstimatedMinCost = dEstimatedCost;6763 copyALFParam(pcAlfSaved, m_pcTempAlfParam);6764 iEstimatedDist += iEstimateDistBeforeFilter;6765 6766 for(Int i=0; i< filters_per_fr; i++ )6767 {6768 iEstimatedDist += (((Int64)m_pixAcc_merged[i]) >> uiBitShift);6769 }6770 ruiDist = (iEstimatedDist > 0)?((UInt64)iEstimatedDist):(0);6771 rdCost = dEstimatedMinCost + (Double)(ruiDist);6772 ruiRate = uiRate;6773 }6774 }6775 6776 if (!m_iUsePreviousFilter)6777 {6778 decodeFilterSet(pcAlfSaved, m_varIndTab, m_filterCoeffSym);6779 saveFilterCoeffToBuffer(m_filterCoeffSym, pcAlfSaved->filters_per_group, m_varIndTab, pcAlfSaved->alf_pcr_region_flag, pcAlfSaved->filter_shape);6780 }6781 6782 if( m_iUsePreviousFilter )6783 {6784 UInt64 uiOffRegionDistortion = 0;6785 Int iPelDiff;6786 Pel* pOrgTemp = (Pel*)ImgOrg;6787 Pel* pDecTemp = (Pel*)ImgDec;6788 for(Int y=0; y< m_img_height; y++)6789 {6790 for(Int x=0; x< m_img_width; x++)6791 {6792 if(m_maskImg[y][x] == 0)6793 {6794 iPelDiff = pOrgTemp[x] - pDecTemp[x];6795 uiOffRegionDistortion += (UInt64)( (iPelDiff*iPelDiff) >> uiBitShift );6796 }6797 }6798 pOrgTemp += Stride;6799 pDecTemp += Stride;6800 6801 ruiDist += uiOffRegionDistortion;6802 rdCost += (Double)uiOffRegionDistortion;6803 }6804 }6805 6806 #if !ALF_SINGLE_FILTER_SHAPE6807 // if ALF_STAR5x5 is selected, the distortion of 2 skipped lines per LCU should be added.6808 if(pcAlfSaved->filter_shape == ALF_STAR5x5)6809 {6810 Int iPelDiff;6811 UInt64 uiSkipPelsDistortion = 0;6812 Pel *pOrgTemp, *pDecTemp;6813 for(Int y= m_lineIdxPadTop-1; y< m_img_height - m_lcuHeight ; y += m_lcuHeight)6814 {6815 pOrgTemp = ImgOrg + y*Stride;6816 pDecTemp = ImgDec + y*Stride;6817 for(Int x=0; x< m_img_width; x++)6818 {6819 if(m_maskImg[y][x] == 1)6820 {6821 iPelDiff = pOrgTemp[x] - pDecTemp[x];6822 uiSkipPelsDistortion += (UInt64)( (iPelDiff*iPelDiff) >> uiBitShift );6823 }6824 }6825 6826 pOrgTemp += Stride;6827 pDecTemp += Stride;6828 for(Int x=0; x< m_img_width; x++)6829 {6830 if(m_maskImg[y+1][x] == 1)6831 {6832 iPelDiff = pOrgTemp[x] - pDecTemp[x];6833 uiSkipPelsDistortion += (UInt64)( (iPelDiff*iPelDiff) >> uiBitShift );6834 }6835 }6836 }6837 ruiDist += uiSkipPelsDistortion;6838 rdCost += (Double)uiSkipPelsDistortion;6839 }6840 #endif6841 6842 for(Int filter_shape = 0; filter_shape < NUM_ALF_FILTER_SHAPE; filter_shape++)6843 {6844 for(Int i=0; i< NO_VAR_BINS; i++)6845 {6846 delete[] coeffNoFilter[filter_shape][i];6847 }6848 }6849 }6850 6851 6852 #endif6853 4686 6854 4687 /** Estimate filtering distortion by correlation values and filter coefficients … … 6867 4700 Int64 iDist; 6868 4701 Double dDist, dsum; 6869 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS4702 #if LCUALF_QP_DEPENDENT_BITS 6870 4703 Int alfPrecisionBit = getAlfPrecisionBit( m_alfQP ); 6871 4704 #endif … … 6873 4706 for(i=0; i< iFiltLength; i++) 6874 4707 { 6875 #if LCU _SYNTAX_ALF && LCUALF_QP_DEPENDENT_BITS4708 #if LCUALF_QP_DEPENDENT_BITS 6876 4709 pdcoeff[i]= (Double)piCoeff[i] / (Double)(1<<alfPrecisionBit); 6877 4710 #else … … 6908 4741 6909 4742 6910 #if !LCU_SYNTAX_ALF6911 6912 /** Estimate total filtering cost of all groups6913 * \param filters_per_fr number of filters for the slice6914 * \param VarIndTab merge index of all groups6915 * \param pppdE auto-correlation matrix pointer for all groups6916 * \param ppdy cross-correlation array pointer for all groups6917 * \returns estimated distortion6918 */6919 Int64 TEncAdaptiveLoopFilter::xEstimateFiltDist(Int filters_per_fr, Int* VarIndTab,6920 Double*** pppdE, Double** ppdy,6921 Int** ppiCoeffSet, Int iFiltLength)6922 6923 {6924 Int64 iDist;6925 Double** ppdDstE;6926 Double** ppdSrcE;6927 Double* pdDsty;6928 Double* pdSrcy;6929 Int f, j, i, varInd;6930 Int* piCoeff;6931 6932 //clean m_E_merged & m_y_merged6933 for(f=0; f< filters_per_fr; f++)6934 {6935 for(j =0; j < iFiltLength; j++)6936 {6937 //clean m_E_merged one line6938 for(i=0; i < iFiltLength; i++)6939 {6940 m_E_merged[f][j][i] = 0;6941 }6942 6943 //clean m_y_merged6944 m_y_merged[f][j] = 0;6945 }6946 m_pixAcc_merged[f] = 0;6947 }6948 6949 6950 //merge correlation values6951 for (varInd=0; varInd< NO_VAR_BINS; varInd++)6952 {6953 ppdSrcE = pppdE[varInd];6954 ppdDstE = m_E_merged[ VarIndTab[varInd] ];6955 6956 pdSrcy = ppdy[varInd];6957 pdDsty = m_y_merged[ VarIndTab[varInd] ];6958 6959 for(j=0; j< iFiltLength; j++)6960 {6961 for(i=0; i< iFiltLength; i++)6962 {6963 ppdDstE[j][i] += ppdSrcE[j][i];6964 }6965 6966 pdDsty[j] += pdSrcy[j];6967 }6968 m_pixAcc_merged[ VarIndTab[varInd] ] += m_pixAcc[varInd];6969 6970 }6971 6972 //estimate distortion reduction by using FFDE (JCTVC-C143)6973 iDist = 0;6974 for(f=0; f< filters_per_fr; f++)6975 {6976 piCoeff = ppiCoeffSet[f];6977 ppdDstE = m_E_merged [f];6978 pdDsty = m_y_merged [f];6979 6980 iDist += xFastFiltDistEstimation(ppdDstE, pdDsty, piCoeff, iFiltLength);6981 }6982 6983 6984 return iDist;6985 6986 }6987 6988 /** Calculate ALF grouping indices for ALF slices6989 * \param varmap grouping indices buffer6990 * \param imgY_Dec picture buffer6991 * \param pad_size (max. filter tap)/26992 * \param fl VAR_SIZE6993 * \param img_stride picture buffer stride6994 */6995 Void TEncAdaptiveLoopFilter::xfilterSlicesEncoder(Pel* ImgDec, Pel* ImgRest, Int iStride, Int filtNo, Int** filterCoeff, Int* mergeTable, Pel** varImg)6996 {6997 Pel* pPicSrc = (Pel *)ImgDec;6998 Pel* pPicSlice = m_pcSliceYuvTmp->getLumaAddr();6999 7000 for(UInt s=0; s< m_uiNumSlicesInPic; s++)7001 {7002 if(!m_pcPic->getValidSlice(s))7003 {7004 continue;7005 }7006 std::vector< std::vector<AlfLCUInfo*> > & vpSliceTileAlfLCU = m_pvpSliceTileAlfLCU[s];7007 7008 for(Int t=0; t< (Int)vpSliceTileAlfLCU.size(); t++)7009 {7010 std::vector<AlfLCUInfo*> & vpAlfLCU = vpSliceTileAlfLCU[t];7011 copyRegion(vpAlfLCU, pPicSlice, pPicSrc, iStride);7012 extendRegionBorder(vpAlfLCU, pPicSlice, iStride);7013 filterLumaRegion(vpAlfLCU, pPicSlice, ImgRest, iStride, filtNo, filterCoeff, mergeTable, varImg);7014 }7015 }7016 }7017 7018 /** Calculate block autocorrelations and crosscorrelations for ALF slices7019 * \param ImgOrg original picture7020 * \param ImgDec picture before filtering7021 * \param tap filter tap size7022 * \param iStride picture buffer stride7023 */7024 Void TEncAdaptiveLoopFilter::xstoreInBlockMatrixforSlices(Pel* ImgOrg, Pel* ImgDec, Int tap, Int iStride)7025 {7026 Pel* pPicSrc = (Pel *)ImgDec;7027 Pel* pPicSlice = m_pcSliceYuvTmp->getLumaAddr();7028 7029 UInt iLastValidSliceID =0;7030 for(UInt s=0; s< m_uiNumSlicesInPic; s++)7031 {7032 if(m_pcPic->getValidSlice(s))7033 {7034 iLastValidSliceID = s;7035 }7036 }7037 7038 for(UInt s=0; s<= iLastValidSliceID; s++)7039 {7040 if(!m_pcPic->getValidSlice(s))7041 {7042 continue;7043 }7044 std::vector< std::vector<AlfLCUInfo*> > & vpSliceTileAlfLCU = m_pvpSliceTileAlfLCU[s];7045 Int numValidTilesInSlice = (Int)vpSliceTileAlfLCU.size();7046 for(Int t=0; t< numValidTilesInSlice; t++)7047 {7048 std::vector<AlfLCUInfo*> & vpAlfLCU = vpSliceTileAlfLCU[t];7049 copyRegion(vpAlfLCU, pPicSlice, pPicSrc, iStride);7050 extendRegionBorder(vpAlfLCU, pPicSlice, iStride);7051 xstoreInBlockMatrixforRegion(vpAlfLCU, ImgOrg, pPicSlice, tap, iStride, (s==0)&&(t==0), (s== iLastValidSliceID)&&(t==numValidTilesInSlice-1));7052 }7053 }7054 }7055 7056 /** Calculate block autocorrelations and crosscorrelations for one ALF region7057 * \param vpAlfLCU ALF LCU data container7058 * \param ImgOrg original picture7059 * \param ImgDec picture before filtering7060 * \param tap filter tap size7061 * \param iStride picture buffer stride7062 * \param bFirstSlice true for the first processing slice of the picture7063 * \param bLastSlice true for the last processing slice of the picture7064 */7065 Void TEncAdaptiveLoopFilter::xstoreInBlockMatrixforRegion(std::vector< AlfLCUInfo* > &vpAlfLCU,7066 Pel* ImgOrg, Pel* ImgDec,7067 Int tap, Int iStride,7068 Bool bFirstSlice,7069 Bool bLastSlice7070 )7071 {7072 7073 UInt uiNumLCUs = (UInt)vpAlfLCU.size();7074 Int iHeight, iWidth;7075 Int ypos, xpos;7076 Bool bFirstLCU, bLastLCU;7077 Bool bFirstSGU, bLastSGU;7078 UInt numSGUs;7079 7080 for(UInt i=0; i< uiNumLCUs; i++)7081 {7082 bFirstLCU = (i==0);7083 bLastLCU = (i== uiNumLCUs -1);7084 AlfLCUInfo& cAlfLCU = *(vpAlfLCU[i]);7085 numSGUs = cAlfLCU.numSGU;7086 for(UInt j=0; j< numSGUs; j++)7087 {7088 bFirstSGU= (j ==0);7089 bLastSGU = (j == numSGUs -1);7090 7091 ypos = (Int)(cAlfLCU[j].posY );7092 xpos = (Int)(cAlfLCU[j].posX );7093 iHeight = (Int)(cAlfLCU[j].height);7094 iWidth = (Int)(cAlfLCU[j].width );7095 7096 xstoreInBlockMatrix(ypos, xpos, iHeight, iWidth,7097 (bFirstSlice && bFirstLCU && bFirstSGU),(bLastSlice && bLastLCU && bLastSGU),7098 ImgOrg, ImgDec,tap, iStride);7099 }7100 }7101 }7102 7103 7104 /** Calculate autocorrelations and crosscorrelations for chroma slices7105 * \param ComponentID Cb or Cr7106 * \param pOrg original picture7107 * \param pCmp picture before filtering7108 * \param iTap filter tap size7109 * \param iOrgStride picture buffer stride for pOrg7110 * \param iCmpStride picture buffer stride for pCmp7111 */7112 Void TEncAdaptiveLoopFilter::xCalcCorrelationFuncforChromaSlices(Int ComponentID, Pel* pOrg, Pel* pCmp, Int iTap, Int iOrgStride, Int iCmpStride)7113 {7114 7115 assert(iOrgStride == iCmpStride);7116 7117 Pel* pPicSrc = pCmp;7118 Pel* pPicSlice = (ComponentID == ALF_Cb)?(m_pcSliceYuvTmp->getCbAddr()):(m_pcSliceYuvTmp->getCrAddr());7119 Int chromaFormatShift = 1;7120 7121 UInt iLastValidSliceID =0;7122 for(UInt s=0; s< m_uiNumSlicesInPic; s++)7123 {7124 if(m_pcPic->getValidSlice(s))7125 {7126 iLastValidSliceID = s;7127 }7128 }7129 7130 for(UInt s=0; s<= iLastValidSliceID; s++)7131 {7132 if(!m_pcPic->getValidSlice(s))7133 {7134 continue;7135 }7136 std::vector< std::vector<AlfLCUInfo*> > & vpSliceTileAlfLCU = m_pvpSliceTileAlfLCU[s];7137 Int numValidTilesInSlice = (Int)vpSliceTileAlfLCU.size();7138 for(Int t=0; t< numValidTilesInSlice; t++)7139 {7140 std::vector<AlfLCUInfo*> & vpAlfLCU = vpSliceTileAlfLCU[t];7141 copyRegion(vpAlfLCU, pPicSlice, pPicSrc, iCmpStride, chromaFormatShift);7142 extendRegionBorder(vpAlfLCU, pPicSlice, iCmpStride, chromaFormatShift);7143 xCalcCorrelationFuncforChromaRegion(vpAlfLCU, pOrg, pPicSlice, iTap, iCmpStride,(s== iLastValidSliceID)&&(t== numValidTilesInSlice-1), chromaFormatShift);7144 }7145 }7146 }7147 7148 /** Calculate autocorrelations and crosscorrelations for one chroma slice7149 * \param vpAlfLCU ALF LCU data container7150 * \param pOrg original picture7151 * \param pCmp picture before filtering7152 * \param iTap filter tap size7153 * \param iStride picture buffer stride7154 * \param bLastSlice the last processing slice of picture7155 */7156 Void TEncAdaptiveLoopFilter::xCalcCorrelationFuncforChromaRegion(std::vector< AlfLCUInfo* > &vpAlfLCU, Pel* pOrg, Pel* pCmp, Int filtNo, Int iStride, Bool bLastSlice, Int iFormatShift)7157 {7158 UInt uiNumLCUs = (UInt)vpAlfLCU.size();7159 7160 Int iHeight, iWidth;7161 Int ypos, xpos;7162 Bool bLastLCU;7163 Bool bLastSGU;7164 UInt numSGUs;7165 7166 for(UInt i=0; i< uiNumLCUs; i++)7167 {7168 bLastLCU = (i== uiNumLCUs -1);7169 7170 AlfLCUInfo& cAlfLCU = *(vpAlfLCU[i]);7171 numSGUs = cAlfLCU.numSGU;7172 for(UInt j=0; j< numSGUs; j++)7173 {7174 bLastSGU = (j == numSGUs -1);7175 ypos = (Int)(cAlfLCU[j].posY >> iFormatShift);7176 xpos = (Int)(cAlfLCU[j].posX >> iFormatShift);7177 iHeight = (Int)(cAlfLCU[j].height >> iFormatShift);7178 iWidth = (Int)(cAlfLCU[j].width >> iFormatShift);7179 xCalcCorrelationFunc(ypos, xpos, pOrg, pCmp, filtNo, iWidth, iHeight, iStride, iStride, (bLastSlice && bLastLCU && bLastSGU) );7180 }7181 }7182 }7183 7184 // ====================================================================================================================7185 // Protected member functions7186 // ====================================================================================================================7187 7188 Void TEncAdaptiveLoopFilter::xFilterTapDecisionChroma( UInt64 uiLumaRate, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiDist, UInt64& ruiBits )7189 {7190 Int iShape, num_coeff;7191 Int64 iOrgDistCb, iOrgDistCr, iFiltDistCb, iFiltDistCr, iDist;7192 Bool bChanged = false;7193 Int* qh = m_pcTempAlfParam->coeff_chroma;7194 7195 UInt64 uiMinRate = uiLumaRate;7196 UInt64 uiMinDist = MAX_INT;7197 Double dMinCost = MAX_DOUBLE;7198 Double dLocalMinCost = MAX_DOUBLE;7199 7200 copyALFParam(m_pcTempAlfParam, m_pcBestAlfParam);7201 xCalcRDCostChroma(pcPicOrg, pcPicRest, m_pcTempAlfParam, uiMinRate, uiMinDist, dMinCost);7202 7203 #if ALF_SINGLE_FILTER_SHAPE7204 iShape = 0;7205 #else7206 for(iShape = 0; iShape < 2; iShape++)7207 #endif7208 {7209 // set global variables7210 num_coeff = m_sqrFiltLengthTab[iShape];7211 m_pcTempAlfParam->chroma_idc = 3;7212 m_pcTempAlfParam->filter_shape_chroma = iShape;7213 m_pcTempAlfParam->num_coeff_chroma = num_coeff;7214 7215 // keep original corr pointer7216 Double **ppdTmpCorr = m_ppdAlfCorr;7217 7218 // calc Cb matrix7219 m_pcTempAlfParam->chroma_idc = 2;7220 m_ppdAlfCorr = m_ppdAlfCorrCb;7221 for(Int i=0; i<ALF_MAX_NUM_COEF; i++)7222 {7223 ::memset(m_ppdAlfCorr[i], 0, sizeof(Double) * (ALF_MAX_NUM_COEF + 1));7224 }7225 Pel *pOrg = pcPicOrg->getCbAddr();7226 Pel *pCmp = pcPicDec->getCbAddr();7227 if(!m_bUseNonCrossALF)7228 {7229 xCalcCorrelationFunc(0, 0, pOrg, pCmp, iShape, (pcPicOrg->getWidth()>>1), (pcPicOrg->getHeight()>>1), pcPicOrg->getCStride(), pcPicDec->getCStride(), true);7230 }7231 else7232 {7233 xCalcCorrelationFuncforChromaSlices(ALF_Cb, pOrg, pCmp, iShape, pcPicOrg->getCStride(), pcPicDec->getCStride());7234 }7235 7236 // calc Cr matrix7237 m_pcTempAlfParam->chroma_idc = 1;7238 m_ppdAlfCorr = m_ppdAlfCorrCr;7239 for(Int i=0; i<ALF_MAX_NUM_COEF; i++)7240 {7241 ::memset(m_ppdAlfCorr[i], 0, sizeof(Double) * (ALF_MAX_NUM_COEF + 1));7242 }7243 pOrg = pcPicOrg->getCrAddr();7244 pCmp = pcPicDec->getCrAddr();7245 if(!m_bUseNonCrossALF)7246 {7247 xCalcCorrelationFunc(0, 0, pOrg, pCmp, iShape, (pcPicOrg->getWidth()>>1), (pcPicOrg->getHeight()>>1), pcPicOrg->getCStride(), pcPicDec->getCStride(), true);7248 }7249 else7250 {7251 xCalcCorrelationFuncforChromaSlices(ALF_Cr, pOrg, pCmp, iShape, pcPicOrg->getCStride(), pcPicDec->getCStride());7252 }7253 7254 // restore original corr pointer7255 m_ppdAlfCorr = ppdTmpCorr;7256 7257 // calc original dist7258 memset(qh, 0, sizeof(Int)*num_coeff);7259 qh[num_coeff-1] = 1<<((Int)ALF_NUM_BIT_SHIFT);7260 iOrgDistCb = xFastFiltDistEstimationChroma(m_ppdAlfCorrCb, qh, num_coeff);7261 iOrgDistCr = xFastFiltDistEstimationChroma(m_ppdAlfCorrCr, qh, num_coeff);7262 7263 for(Int iCmp=1; iCmp<=3; iCmp++)7264 {7265 m_pcTempAlfParam->chroma_idc = iCmp;7266 xCalcALFCoeffChroma(iCmp, iShape, qh);7267 iFiltDistCb = ((iCmp>>1)&0x1) ? xFastFiltDistEstimationChroma(m_ppdAlfCorrCb, qh, num_coeff) : iOrgDistCb;7268 iFiltDistCr = ((iCmp) &0x1) ? xFastFiltDistEstimationChroma(m_ppdAlfCorrCr, qh, num_coeff) : iOrgDistCr;7269 iDist = iFiltDistCb + iFiltDistCr;7270 UInt64 uiRate = xCalcRateChroma(m_pcTempAlfParam);7271 Double dCost = (Double)iDist + m_dLambdaChroma * (Double)uiRate;7272 if(dCost < dLocalMinCost)7273 {7274 dLocalMinCost = dCost;7275 copyALFParam(m_pcBestAlfParam, m_pcTempAlfParam);7276 bChanged = true;7277 }7278 }7279 }7280 copyALFParam(m_pcTempAlfParam, m_pcBestAlfParam);7281 if(!bChanged)7282 {7283 m_pcBestAlfParam->chroma_idc = 0;7284 return;7285 }7286 7287 // Adaptive in-loop wiener filtering for chroma7288 xFilteringFrameChroma(m_pcTempAlfParam, pcPicOrg, pcPicDec, pcPicRest);7289 7290 // filter on/off decision for chroma7291 Int iCWidth = (pcPicOrg->getWidth()>>1);7292 Int iCHeight = (pcPicOrg->getHeight()>>1);7293 Int iCStride = pcPicOrg->getCStride();7294 UInt64 uiFiltDistCb = xCalcSSD(pcPicOrg->getCbAddr(), pcPicRest->getCbAddr(), iCWidth, iCHeight, iCStride);7295 UInt64 uiFiltDistCr = xCalcSSD(pcPicOrg->getCrAddr(), pcPicRest->getCrAddr(), iCWidth, iCHeight, iCStride);7296 UInt64 uiOrgDistCb = xCalcSSD(pcPicOrg->getCbAddr(), pcPicDec->getCbAddr(), iCWidth, iCHeight, iCStride);7297 UInt64 uiOrgDistCr = xCalcSSD(pcPicOrg->getCrAddr(), pcPicDec->getCrAddr(), iCWidth, iCHeight, iCStride);7298 if(((m_pcTempAlfParam->chroma_idc)>>1 & 0x1) && (uiOrgDistCb<=uiFiltDistCb))7299 {7300 m_pcTempAlfParam->chroma_idc -= 2;7301 pcPicDec->copyToPicCb(pcPicRest);7302 }7303 if(((m_pcTempAlfParam->chroma_idc) & 0x1) && (uiOrgDistCr<=uiFiltDistCr))7304 {7305 m_pcTempAlfParam->chroma_idc -= 1;7306 pcPicDec->copyToPicCr(pcPicRest);7307 }7308 7309 if(m_pcTempAlfParam->chroma_idc)7310 {7311 UInt64 uiRate, uiDist;7312 Double dCost;7313 xCalcRDCostChroma(pcPicOrg, pcPicRest, m_pcTempAlfParam, uiRate, uiDist, dCost);7314 7315 if( dCost < dMinCost )7316 {7317 copyALFParam(m_pcBestAlfParam, m_pcTempAlfParam);7318 predictALFCoeffChroma(m_pcBestAlfParam);7319 7320 ruiBits += uiRate;7321 ruiDist += uiDist;7322 }7323 else7324 {7325 m_pcBestAlfParam->chroma_idc = 0;7326 7327 if((m_pcTempAlfParam->chroma_idc>>1)&0x01)7328 {7329 pcPicDec->copyToPicCb(pcPicRest);7330 }7331 if(m_pcTempAlfParam->chroma_idc&0x01)7332 {7333 pcPicDec->copyToPicCr(pcPicRest);7334 }7335 7336 ruiBits += uiMinRate;7337 ruiDist += uiMinDist;7338 }7339 }7340 else7341 {7342 m_pcBestAlfParam->chroma_idc = 0;7343 7344 ruiBits += uiMinRate;7345 ruiDist += uiMinDist;7346 7347 pcPicDec->copyToPicCb(pcPicRest);7348 pcPicDec->copyToPicCr(pcPicRest);7349 }7350 }7351 7352 Int64 TEncAdaptiveLoopFilter::xFastFiltDistEstimationChroma(Double** ppdCorr, Int* piCoeff, Int iSqrFiltLength)7353 {7354 Double pdcoeff[ALF_MAX_NUM_COEF];7355 Int i,j;7356 Int64 iDist;7357 Double dDist, dsum;7358 for(i=0; i< iSqrFiltLength; i++)7359 {7360 pdcoeff[i]= (Double)piCoeff[i] / (Double)(1<< ((Int)ALF_NUM_BIT_SHIFT) );7361 }7362 7363 dDist =0;7364 for(i=0; i< iSqrFiltLength; i++)7365 {7366 dsum= ((Double)ppdCorr[i][i]) * pdcoeff[i];7367 for(j=i+1; j< iSqrFiltLength; j++)7368 {7369 dsum += (Double)(2*ppdCorr[i][j])* pdcoeff[j];7370 }7371 7372 dDist += ((dsum - 2.0 * ppdCorr[i][iSqrFiltLength])* pdcoeff[i] );7373 }7374 7375 UInt uiShift = g_uiBitIncrement<<1;7376 if(dDist < 0)7377 {7378 iDist = -(((Int64)(-dDist + 0.5)) >> uiShift);7379 }7380 else //dDist >=07381 {7382 iDist= ((Int64)(dDist+0.5)) >> uiShift;7383 }7384 7385 return iDist;7386 }7387 7388 Void TEncAdaptiveLoopFilter::xCalcALFCoeffChroma(Int iChromaIdc, Int iShape, Int* piCoeff)7389 {7390 Int iSqrFiltLength = m_sqrFiltLengthTab[iShape];7391 7392 for(Int i=0; i<iSqrFiltLength; i++)7393 {7394 memset(m_ppdAlfCorr[i], 0, sizeof(Double)*(iSqrFiltLength + 1));7395 }7396 7397 // retrive7398 if((iChromaIdc>>1) & 0x1)7399 {7400 for(Int i=0; i<iSqrFiltLength; i++)7401 {7402 for(Int j=i; j<iSqrFiltLength+1; j++)7403 {7404 m_ppdAlfCorr[i][j] += m_ppdAlfCorrCb[i][j];7405 }7406 }7407 }7408 if(iChromaIdc & 0x1)7409 {7410 for(Int i=0; i<iSqrFiltLength; i++)7411 {7412 for(Int j=i; j<iSqrFiltLength+1; j++)7413 {7414 m_ppdAlfCorr[i][j] += m_ppdAlfCorrCr[i][j];7415 }7416 }7417 }7418 7419 // copy7420 for(Int i=1; i<iSqrFiltLength; i++)7421 {7422 for(Int j=0; j<i; j++)7423 {7424 m_ppdAlfCorr[i][j] = m_ppdAlfCorr[j][i];7425 }7426 }7427 7428 Double *corr = new Double[iSqrFiltLength];7429 for(Int i=0; i<iSqrFiltLength; i++)7430 {7431 corr[i] = m_ppdAlfCorr[i][iSqrFiltLength];7432 }7433 7434 // calc coeff7435 gnsSolveByChol(m_ppdAlfCorr, corr, m_pdDoubleAlfCoeff, iSqrFiltLength);7436 xQuantFilterCoef(m_pdDoubleAlfCoeff, piCoeff, iShape, g_uiBitDepth + g_uiBitIncrement);7437 delete [] corr;7438 }7439 7440 UInt64 TEncAdaptiveLoopFilter::xCalcRateChroma(ALFParam* pAlfParam)7441 {7442 UInt64 uiRate;7443 Int* piTmpCoef;7444 piTmpCoef = new Int[ALF_MAX_NUM_COEF];7445 memcpy(piTmpCoef, pAlfParam->coeff_chroma, sizeof(Int)*pAlfParam->num_coeff_chroma);7446 7447 predictALFCoeffChroma(pAlfParam);7448 7449 m_pcEntropyCoder->resetEntropy();7450 m_pcEntropyCoder->resetBits();7451 m_pcEntropyCoder->encodeAlfParam(pAlfParam);7452 uiRate = m_pcEntropyCoder->getNumberOfWrittenBits();7453 if (m_vBestAlfCUCtrlParam.size() != 0)7454 {7455 for(UInt s=0; s< m_uiNumSlicesInPic; s++)7456 {7457 if(!m_pcPic->getValidSlice(s))7458 {7459 continue;7460 }7461 m_pcEntropyCoder->resetEntropy();7462 m_pcEntropyCoder->resetBits();7463 m_pcEntropyCoder->encodeAlfCtrlParam( m_vBestAlfCUCtrlParam[s], m_uiNumCUsInFrame);7464 uiRate += m_pcEntropyCoder->getNumberOfWrittenBits();7465 }7466 }7467 else7468 {7469 uiRate += m_uiNumSlicesInPic;7470 }7471 memcpy(pAlfParam->coeff_chroma, piTmpCoef, sizeof(int)*pAlfParam->num_coeff_chroma);7472 delete[] piTmpCoef;7473 piTmpCoef = NULL;7474 7475 return uiRate;7476 }7477 #endif7478 4743 7479 4744 //! \} -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncAdaptiveLoopFilter.h
r56 r294 49 49 //! \{ 50 50 51 #if LCU_SYNTAX_ALF52 51 #define LCUALF_FILTER_BUDGET_CONTROL_ENC 1 //!< filter budget control 53 52 #define LCUALF_AVOID_USING_BOTTOM_LINES_ENCODER 1 //!< avoid using LCU bottom lines when lcu-based encoder RDO is used 54 #endif55 53 56 54 // ==================================================================================================================== … … 58 56 // ==================================================================================================================== 59 57 60 #if LCU_SYNTAX_ALF61 58 /// correlation info 62 59 struct AlfCorrData … … 110 107 }; 111 108 112 #endif113 109 114 110 … … 120 116 /// variables for correlation calculation 121 117 /// 122 #if !LCU_SYNTAX_ALF123 Double** m_ppdAlfCorr;124 Double* m_pdDoubleAlfCoeff;125 Double** m_ppdAlfCorrCb;126 Double** m_ppdAlfCorrCr;127 double ***m_yGlobalSym;128 double ****m_EGlobalSym;129 double *m_pixAcc;130 #endif131 118 double **m_y_merged; 132 119 double ***m_E_merged; … … 134 121 double *m_y_temp; 135 122 double **m_E_temp; 136 #if LCU_SYNTAX_ALF137 123 static const Int m_alfNumPartsInRowTab[5]; 138 124 static const Int m_alfNumPartsLevelTab[5]; … … 154 140 Int m_alfUsedFilterNum; 155 141 #endif 156 #endif157 142 158 143 /// 159 144 /// ALF parameters 160 145 /// 161 #if !LCU_SYNTAX_ALF162 ALFParam* m_pcBestAlfParam;163 ALFParam* m_pcTempAlfParam;164 ALFParam* pcAlfParamShape0;165 ALFParam* pcAlfParamShape1;166 #endif167 146 ALFParam *m_tempALFp; 168 147 … … 172 151 TComPicYuv* m_pcPicYuvBest; 173 152 TComPicYuv* m_pcPicYuvTmp; 174 #if !LCU_SYNTAX_ALF175 TComPicYuv* pcPicYuvRecShape0;176 TComPicYuv* pcPicYuvRecShape1;177 #endif178 153 179 154 /// … … 186 161 Int **m_diffFilterCoeffQuant; 187 162 Int **m_FilterCoeffQuantTemp; 188 #if !LCU_SYNTAX_ALF189 Int** m_mergeTableSavedMethods[NUM_ALF_CLASS_METHOD];190 Int*** m_aiFilterCoeffSavedMethods[NUM_ALF_CLASS_METHOD]; //!< time-delayed filter set buffer191 Int* m_iPreviousFilterShapeMethods[NUM_ALF_CLASS_METHOD];192 #endif193 163 /// 194 164 /// coding control parameters … … 196 166 Double m_dLambdaLuma; 197 167 Double m_dLambdaChroma; 198 #if !LCU_SYNTAX_ALF199 Int m_iUsePreviousFilter; //!< for N-pass encoding- 1: time-delayed filtering is allowed. 0: not allowed.200 Int m_iDesignCurrentFilter; //!< for N-pass encoding- 1: design filters for current slice. 0: design filters for future slice reference201 Int m_iGOPSize; //!< GOP size202 Int m_iCurrentPOC; //!< POC203 #endif204 168 Int m_iALFEncodePassReduction; //!< 0: 16-pass encoding, 1: 1-pass encoding, 2: 2-pass encoding 205 169 … … 221 185 private: 222 186 223 #if LCU_SYNTAX_ALF224 187 Void disableComponentAlfParam(Int compIdx, AlfParamSet* alfParamSet, AlfUnitParam* alfUnitPic); 225 188 Void copyAlfParamSet(AlfParamSet* dst, AlfParamSet* src); … … 252 215 Void xCopyDecToRestCUs( Pel* imgDec, Pel* imgRest, Int stride ); 253 216 Void xCopyDecToRestCU( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Pel* imgDec, Pel* imgRest, Int stride ); 254 #if ALF_SINGLE_FILTER_SHAPE255 217 Void calcCorrOneCompRegionChma(Pel* imgOrg, Pel* imgPad, Int stride, Int yPos, Int xPos, Int height, Int width, Double **eCorr, Double *yCorr, Bool isSymmCopyBlockMatrix); //!< Calculate correlations for chroma 256 218 Void calcCorrOneCompRegionLuma(Pel* imgOrg, Pel* imgPad, Int stride, Int yPos, Int xPos, Int height, Int width, Double ***eCorr, Double **yCorr, Double *pixAcc, Bool isforceCollection, Bool isSymmCopyBlockMatrix); 257 #endif258 219 259 220 //LCU-based mode decision … … 291 252 Void transferToAlfParamSet(Int compIdx, AlfUnitParam* alfUnitPic, AlfParamSet* & alfParamSet); 292 253 Int calculateAlfParamSetRateRDO(Int compIdx, AlfParamSet* alfParamSet, std::vector<AlfCUCtrlInfo>* alfCUCtrlParam); 293 #endif294 #if !LCU_SYNTAX_ALF295 // init / uninit internal variables296 Void xInitParam ();297 Void xUninitParam ();298 #endif299 254 // ALF on/off control related functions 300 255 Void xCreateTmpAlfCtrlFlags (); … … 305 260 Void xEncodeCUAlfCtrlFlags (std::vector<AlfCUCtrlInfo> &vAlfCUCtrlParam); 306 261 Void xEncodeCUAlfCtrlFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth); 307 #if !LCU_SYNTAX_ALF308 Void xCUAdaptiveControl_qc ( TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiMinRate, UInt64& ruiMinDist, Double& rdMinCost );309 Void xSetCUAlfCtrlFlags_qc (UInt uiAlfCtrlDepth, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiDist, std::vector<AlfCUCtrlInfo>& vAlfCUCtrlParam);310 Void xSetCUAlfCtrlFlag_qc (TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiAlfCtrlDepth, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiDist, std::vector<UInt>& vCUCtrlFlag);311 312 // functions related to correlation computation313 Void xstoreInBlockMatrix(Int ypos, Int xpos, Int iheight, Int iwidth, Bool bResetBlockMatrix, Bool bSymmCopyBlockMatrix, Pel* pImgOrg, Pel* pImgPad, Int filtNo, Int stride); //!< Calculate correlations for luma314 Void xstoreInBlockMatrixforRegion(std::vector< AlfLCUInfo* > &vpAlfLCU, Pel* ImgOrg, Pel* ImgDec, Int tap, Int iStride, Bool bFirstSlice, Bool bLastSlice); //!< Calculate block autocorrelations and crosscorrelations for one ALF slice315 Void xstoreInBlockMatrixforSlices (Pel* ImgOrg, Pel* ImgDec, Int tap, Int iStride); //!< Calculate block autocorrelations and crosscorrelations for ALF slices316 Void xCalcCorrelationFunc(Int ypos, Int xpos, Pel* pImgOrg, Pel* pImgPad, Int filtNo, Int iWidth, Int iHeight, Int iOrgStride, Int iCmpStride, Bool bSymmCopyBlockMatrix); //!< Calculate correlations for chroma317 Void xCalcCorrelationFuncforChromaRegion(std::vector< AlfLCUInfo* > &vpAlfLCU, Pel* pOrg, Pel* pCmp, Int filtNo, Int iStride, Bool bLastSlice, Int iFormatShift); //!< Calculate autocorrelations and crosscorrelations for one chroma slice318 Void xCalcCorrelationFuncforChromaSlices (Int ComponentID, Pel* pOrg, Pel* pCmp, Int iTap, Int iOrgStride, Int iCmpStride); //!< Calculate autocorrelations and crosscorrelations for chroma slices319 #endif320 262 // functions related to filtering 321 263 Void xFilterCoefQuickSort ( Double *coef_data, Int *coef_num, Int upper, Int lower ); 322 264 Void xQuantFilterCoef ( Double* h, Int* qh, Int tap, int bit_depth ); 323 #if !LCU_SYNTAX_ALF324 Void xClearFilterCoefInt ( Int* qh, Int N );325 Void xCopyDecToRestCUs ( TComPicYuv* pcPicDec, TComPicYuv* pcPicRest );326 Void xCopyDecToRestCU ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest );327 Void xFilteringFrameChroma (ALFParam* pcAlfParam, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest);328 Int setFilterIdx(Int index); //!< set filter buffer index329 Void setInitialMask(TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec); //!< set initial m_maskImg330 Void saveFilterCoeffToBuffer(Int **filterSet, Int numFilter, Int* mergeTable, Int mode, Int filtNo); //!< save filter coefficients to buffer331 Void setMaskWithTimeDelayedResults(TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec); //!< set initial m_maskImg with previous (time-delayed) filters332 Void decideFilterShapeLuma(Pel* ImgOrg, Pel* ImgDec, Int Stride, ALFParam* pcAlfSaved, UInt64& ruiRate, UInt64& ruiDist,Double& rdCost); //!< Estimate RD cost of all filter size & store the best one333 Void xFilterTapDecisionChroma (UInt64 uiLumaRate, TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiDist, UInt64& ruiBits);334 Int64 xFastFiltDistEstimationChroma (Double** ppdCorr, Int* piCoeff, Int iSqrFiltLength);335 Void xfilterSlicesEncoder(Pel* ImgDec, Pel* ImgRest, Int iStride, Int filtNo, Int** filterCoeff, Int* mergeTable, Pel** varImg); //!< Calculate ALF grouping indices for ALF slices336 Void setALFEncodingParam(TComPic *pcPic); //!< set ALF encoding parameters337 Void xReDesignFilterCoeff_qc (TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, Bool bReadCorr);338 Void xFirstFilteringFrameLuma (Pel* imgOrg, Pel* imgDec, Pel* imgRest, ALFParam* ALFp, Int filtNo, Int stride);339 Void xFilteringFrameLuma(Pel* imgOrg, Pel* imgPad, Pel* imgFilt, ALFParam* ALFp, Int filtNo, Int stride);340 Void xEncALFLuma ( TComPicYuv* pcPicOrg, TComPicYuv* pcPicDec, TComPicYuv* pcPicRest, UInt64& ruiMinRate, UInt64& ruiMinDist, Double& rdMinCost ); //!< estimate adaptation mode and filter shape341 #endif342 265 // distortion / misc functions 343 266 #if HHI_INTERVIEW_SKIP … … 346 269 UInt64 xCalcSSD ( Pel* pOrg, Pel* pCmp, Int iWidth, Int iHeight, Int iStride ); 347 270 #endif 348 #if !LCU_SYNTAX_ALF349 #if HHI_INTERVIEW_SKIP350 Void xCalcRDCost ( TComPicYuv* pcPicOrg, TComPicYuv* pcPicCmp, ALFParam* pAlfParam, UInt64& ruiRate, UInt64& ruiDist, Double& rdCost, std::vector<AlfCUCtrlInfo>* pvAlfCUCtrlParam = NULL);351 Void xCalcRDCost ( ALFParam* pAlfParam, UInt64& ruiRate, UInt64 uiDist, Double& rdCost, std::vector<AlfCUCtrlInfo>* pvAlfCUCtrlParam = NULL);352 Void xCalcRDCostChroma ( TComPicYuv* pcPicOrg, TComPicYuv* pcPicCmp, ALFParam* pAlfParam, UInt64& ruiRate, UInt64& ruiDist, Double& rdCost );353 #else354 Void xCalcRDCost ( TComPicYuv* pcPicOrg, TComPicYuv* pcPicCmp, ALFParam* pAlfParam, UInt64& ruiRate, UInt64& ruiDist, Double& rdCost, std::vector<AlfCUCtrlInfo>* pvAlfCUCtrlParam = NULL);355 Void xCalcRDCost ( ALFParam* pAlfParam, UInt64& ruiRate, UInt64 uiDist, Double& rdCost, std::vector<AlfCUCtrlInfo>* pvAlfCUCtrlParam = NULL);356 Void xCalcRDCostChroma ( TComPicYuv* pcPicOrg, TComPicYuv* pcPicCmp, ALFParam* pAlfParam, UInt64& ruiRate, UInt64& ruiDist, Double& rdCost );357 #endif358 #endif359 271 Int64 xFastFiltDistEstimation(Double** ppdE, Double* pdy, Int* piCoeff, Int iFiltLength); //!< Estimate filtering distortion by correlation values and filter coefficients 360 #if !LCU_SYNTAX_ALF361 Int64 xEstimateFiltDist (Int filters_per_fr, Int* VarIndTab, Double*** pppdE, Double** ppdy, Int** ppiCoeffSet, Int iFiltLength); //!< Estimate total filtering cost of all groups362 UInt64 xCalcRateChroma (ALFParam* pAlfParam);363 Void xCalcALFCoeffChroma (Int iChromaIdc, Int iShape, Int* piCoeff);364 #endif365 272 366 273 /// code filter coefficients 367 274 UInt xcodeFiltCoeff(Int **filterCoeffSymQuant, Int filter_shape, Int varIndTab[], Int filters_per_fr_best, ALFParam* ALFp); 368 #if LCU_SYNTAX_ALF369 275 Void xfindBestFilterVarPred(double **ySym, double ***ESym, double *pixAcc, Int **filterCoeffSym, Int **filterCoeffSymQuant,Int filter_shape, Int *filters_per_fr_best, Int varIndTab[], Pel **imgY_rec, Pel **varImg, Pel **maskImg, Pel **imgY_pad, double lambda_val, Int numMaxFilters = NO_FILTERS); 370 #else371 Void xfindBestFilterVarPred(double **ySym, double ***ESym, double *pixAcc, Int **filterCoeffSym, Int **filterCoeffSymQuant,Int filter_shape, Int *filters_per_fr_best, Int varIndTab[], Pel **imgY_rec, Pel **varImg, Pel **maskImg, Pel **imgY_pad, double lambda_val);372 #endif373 276 double xfindBestCoeffCodMethod(int **filterCoeffSymQuant, int filter_shape, int sqrFiltLength, int filters_per_fr, double errorForce0CoeffTab[NO_VAR_BINS][2], double lambda); 374 277 Int xsendAllFiltersPPPred(int **FilterCoeffQuant, int filter_shape, int sqrFiltLength, int filters_per_group, int createBistream, ALFParam* ALFp); … … 400 303 Void startALFEnc(TComPic* pcPic, TEncEntropy* pcEntropyCoder); //!< allocate temporal memory 401 304 Void endALFEnc(); //!< destroy temporal memory 402 #if LCU_SYNTAX_ALF403 305 #if ALF_CHROMA_LAMBDA 404 306 #if HHI_INTERVIEW_SKIP … … 418 320 Void resetPicAlfUnit(); 419 321 Void setAlfCoefInSlice(Bool b) {m_alfCoefInSlice = b;} 420 #else421 #if ALF_CHROMA_LAMBDA422 #if HHI_INTERVIEW_SKIP423 Void ALFProcess(ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>* pvAlfCtrlParam, Double dLambdaLuma, Double dLambdaChroma, UInt64& ruiDist, UInt64& ruiBits, Bool bInterviewSkip); //!< estimate ALF parameters424 #else425 Void ALFProcess(ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>* pvAlfCtrlParam, Double dLambdaLuma, Double dLambdaChroma, UInt64& ruiDist, UInt64& ruiBits); //!< estimate ALF parameters426 #endif427 #else428 #if HHI_INTERVIEW_SKIP429 Void ALFProcess(ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>* pvAlfCtrlParam, Double dLambda, UInt64& ruiDist, UInt64& ruiBits, Bool bInterviewSkip); //!< estimate ALF parameters430 #else431 Void ALFProcess(ALFParam* pcAlfParam, std::vector<AlfCUCtrlInfo>* pvAlfCtrlParam, Double dLambda, UInt64& ruiDist, UInt64& ruiBits); //!< estimate ALF parameters432 #endif433 #endif434 435 Void setGOPSize(Int val) { m_iGOPSize = val; } //!< set GOP size436 #endif437 322 Void setALFEncodePassReduction (Int iVal) {m_iALFEncodePassReduction = iVal;} //!< set N-pass encoding. 0: 16(14)-pass encoding, 1: 1-pass encoding, 2: 2-pass encoding 438 323 439 324 Void setALFMaxNumberFilters (Int iVal) {m_iALFMaxNumberFilters = iVal;} //!< set ALF Max Number of Filters 440 325 441 #if LCU_SYNTAX_ALF442 326 Void createAlfGlobalBuffers(); //!< create ALF global buffers 443 327 Void initPicQuadTreePartition(Bool isPicBasedEncode); 444 #else445 Void createAlfGlobalBuffers(Int iALFEncodePassReduction); //!< create ALF global buffers446 #endif447 328 Void destroyAlfGlobalBuffers(); //!< destroy ALF global buffers 448 329 Void PCMLFDisableProcess (TComPic* pcPic); -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncBinCoder.h
r56 r294 56 56 virtual Void finish () = 0; 57 57 virtual Void copyState ( TEncBinIf* pcTEncBinIf ) = 0; 58 #if OL_FLUSH59 58 virtual Void flush () = 0; 60 #endif61 59 62 60 virtual Void encodeFlush (Bool bEnd) = 0; 63 61 64 62 virtual Void resetBac () = 0; 65 #if BURST_IPCM66 63 virtual Void encodeNumSubseqIPCM( Int numSubseqIPCM ) = 0; 67 #endif68 64 virtual Void encodePCMAlignBits() = 0; 69 65 virtual Void xWritePCMCode ( UInt uiCode, UInt uiLength ) = 0; -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncBinCoderCABAC.cpp
r56 r294 105 105 } 106 106 107 #if OL_FLUSH108 107 Void TEncBinCABAC::flush() 109 108 { … … 117 116 start(); 118 117 } 119 #endif120 118 121 119 /** Reset BAC register and counter values. … … 127 125 } 128 126 129 #if BURST_IPCM130 127 /** Encode # of subsequent IPCM blocks. 131 128 * \param numSubseqIPCM … … 153 150 } 154 151 } 155 #endif156 152 157 153 /** Encode PCM alignment zero bits. … … 160 156 Void TEncBinCABAC::encodePCMAlignBits() 161 157 { 162 #if !BURST_IPCM163 finish();164 m_pcTComBitIf->write( 1, 1 ); // stop bit165 #endif166 158 m_pcTComBitIf->writeAlignZero(); // pcm align zero 167 159 } -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncBinCoderCABAC.h
r56 r294 57 57 Void finish (); 58 58 Void copyState ( TEncBinIf* pcTEncBinIf ); 59 #if OL_FLUSH60 59 Void flush (); 61 #endif62 60 63 61 Void resetBac (); 64 #if BURST_IPCM65 62 Void encodeNumSubseqIPCM( Int numSubseqIPCM ); 66 #endif67 63 Void encodePCMAlignBits(); 68 64 Void xWritePCMCode ( UInt uiCode, UInt uiLength ); -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncCavlc.cpp
r292 r294 161 161 //DF flag 162 162 WRITE_FLAG(pcAPS->getLoopFilterOffsetInAPS()?1:0, "aps_deblocking_filter_flag"); 163 #if !SAO_UNIT_INTERLEAVING 164 //SAO flag 165 WRITE_FLAG( pcAPS->getSaoEnabled()?1:0, "aps_sample_adaptive_offset_flag"); 166 #endif 167 #if !LCU_SYNTAX_ALF 168 //ALF flag 169 WRITE_FLAG( pcAPS->getAlfEnabled()?1:0, "aps_adaptive_loop_filter_flag"); 170 #endif 171 } 172 #if LCU_SYNTAX_ALF 163 } 173 164 Void TEncCavlc::codeAPSAlflag(UInt uiCode) 174 165 { 175 166 WRITE_FLAG(uiCode, "aps_adaptive_loop_filter_flag"); 176 167 } 177 #endif178 168 179 169 Void TEncCavlc::codeDFFlag(UInt uiCode, const Char *pSymbolName) … … 186 176 } 187 177 188 #if RPS_IN_SPS189 178 Void TEncCavlc::codeShortTermRefPicSet( TComSPS* pcSPS, TComReferencePictureSet* rps ) 190 #else191 Void TEncCavlc::codeShortTermRefPicSet( TComPPS* pcPPS, TComReferencePictureSet* rps )192 #endif193 179 { 194 180 #if PRINT_RPS_INFO … … 245 231 xTracePPSHeader (pcPPS); 246 232 #endif 247 #if !RPS_IN_SPS248 TComRPSList* rpsList = pcPPS->getRPSList();249 #endif250 233 251 234 WRITE_UVLC( pcPPS->getPPSId(), "pic_parameter_set_id" ); 252 235 WRITE_UVLC( pcPPS->getSPSId(), "seq_parameter_set_id" ); 253 236 254 #if MULTIBITS_DATA_HIDING255 237 WRITE_FLAG( pcPPS->getSignHideFlag(), "sign_data_hiding_flag" ); 256 238 if( pcPPS->getSignHideFlag() ) … … 258 240 WRITE_CODE(pcPPS->getTSIG(), 4, "sign_hiding_threshold"); 259 241 } 260 #endif261 242 #if CABAC_INIT_FLAG 262 243 WRITE_FLAG( pcPPS->getCabacInitPresentFlag() ? 1 : 0, "cabac_init_present_flag" ); 263 #endif264 #if !RPS_IN_SPS265 // RPS is put before entropy_coding_mode_flag266 // since entropy_coding_mode_flag will probably be removed from the WD267 TComReferencePictureSet* rps;268 269 WRITE_UVLC(rpsList->getNumberOfReferencePictureSets(), "num_short_term_ref_pic_sets" );270 for(UInt i=0; i < rpsList->getNumberOfReferencePictureSets(); i++)271 {272 rps = rpsList->getReferencePictureSet(i);273 codeShortTermRefPicSet(pcPPS,rps);274 }275 WRITE_FLAG( pcPPS->getLongTermRefsPresent() ? 1 : 0, "long_term_ref_pics_present_flag" );276 244 #endif 277 245 // entropy_coding_mode_flag … … 280 248 if (pcPPS->getEntropyCodingMode()) 281 249 { 282 #if !WPP_SIMPLIFICATION 283 WRITE_UVLC( pcPPS->getEntropyCodingSynchro(), "entropy_coding_synchro" ); 284 WRITE_FLAG( pcPPS->getCabacIstateReset() ? 1 : 0, "cabac_istate_reset" ); 285 #endif 286 #if !TILES_OR_ENTROPY_SYNC_IDC 287 #if !WPP_SIMPLIFICATION 288 if ( pcPPS->getEntropyCodingSynchro() ) 289 #endif 290 { 291 WRITE_UVLC( pcPPS->getNumSubstreams()-1, "num_substreams_minus1" ); 292 } 293 #endif 294 } 295 #if !H0566_TLA 296 WRITE_UVLC( pcPPS->getNumTLayerSwitchingFlags(), "num_temporal_layer_switching_point_flags" ); 297 for( UInt i = 0; i < pcPPS->getNumTLayerSwitchingFlags(); i++ ) 298 { 299 WRITE_FLAG( pcPPS->getTLayerSwitchingFlag( i ) ? 1 : 0 , "temporal_layer_switching_point_flag" ); 300 } 301 #endif 250 } 302 251 // num_ref_idx_l0_default_active_minus1 303 252 // num_ref_idx_l1_default_active_minus1 … … 313 262 WRITE_FLAG( pcPPS->getUseWP() ? 1 : 0, "weighted_pred_flag" ); // Use of Weighting Prediction (P_SLICE) 314 263 WRITE_CODE( pcPPS->getWPBiPredIdc(), 2, "weighted_bipred_idc" ); // Use of Weighting Bi-Prediction (B_SLICE) 315 #if H0388316 264 WRITE_FLAG( pcPPS->getOutputFlagPresentFlag() ? 1 : 0, "output_flag_present_flag" ); 317 #endif318 #if TILES_OR_ENTROPY_SYNC_IDC319 265 if(pcPPS->getSPS()->getTilesOrEntropyCodingSyncIdc()==1) 320 266 { 321 #endif322 267 WRITE_FLAG( pcPPS->getColumnRowInfoPresent(), "tile_info_present_flag" ); 323 268 WRITE_FLAG( pcPPS->getTileBehaviorControlPresentFlag(), "tile_control_present_flag"); … … 347 292 if(iNumColTilesMinus1 !=0 || iNumRowTilesMinus1 !=0) 348 293 { 349 #if !REMOVE_TILE_DEPENDENCE350 WRITE_FLAG( pcPPS->getTileBoundaryIndependenceIdr(), "tile_boundary_independence_flag" );351 if(pcPPS->getTileBoundaryIndependenceIdr() == 1)352 {353 #endif354 294 WRITE_FLAG( pcPPS->getLFCrossTileBoundaryFlag()?1 : 0, "loop_filter_across_tile_flag"); 355 #if !REMOVE_TILE_DEPENDENCE 356 } 357 #endif 358 } 359 } 360 #if TILES_OR_ENTROPY_SYNC_IDC 295 } 296 } 361 297 } 362 298 else if(pcPPS->getSPS()->getTilesOrEntropyCodingSyncIdc()==2) … … 364 300 WRITE_UVLC( pcPPS->getNumSubstreams()-1, "num_substreams_minus1" ); 365 301 } 366 #endif 367 368 #if DBL_CONTROL 302 369 303 WRITE_FLAG( pcPPS->getDeblockingFilterControlPresent()?1 : 0, "deblocking_filter_control_present_flag"); 370 #endif371 #if PARALLEL_MERGE372 304 WRITE_UVLC( pcPPS->getLog2ParallelMergeLevelMinus2(), "log2_parallel_merge_level_minus2"); 373 #endif374 305 WRITE_FLAG( 0, "pps_extension_flag" ); 375 306 } … … 531 462 WRITE_UVLC( pcSPS->getPicWidthInLumaSamples (), "pic_width_in_luma_samples" ); 532 463 WRITE_UVLC( pcSPS->getPicHeightInLumaSamples(), "pic_height_in_luma_samples" ); 533 #if PIC_CROPPING534 464 WRITE_FLAG( pcSPS->getPicCroppingFlag(), "pic_cropping_flag" ); 535 465 if (pcSPS->getPicCroppingFlag()) … … 540 470 WRITE_UVLC( pcSPS->getPicCropBottomOffset(), "pic_crop_bottom_offset" ); 541 471 } 542 #endif543 472 544 473 #if FULL_NBIT … … 566 495 567 496 WRITE_UVLC( pcSPS->getBitsForPOC()-4, "log2_max_pic_order_cnt_lsb_minus4" ); 568 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER569 497 for(UInt i=0; i <= pcSPS->getMaxTLayers()-1; i++) 570 498 { … … 573 501 WRITE_UVLC( pcSPS->getMaxLatencyIncrease(i), "max_latency_increase[i]" ); 574 502 } 575 #else576 WRITE_UVLC( pcSPS->getMaxNumberOfReferencePictures(), "max_num_ref_pics" );577 WRITE_UVLC( pcSPS->getNumReorderFrames(), "num_reorder_frames" );578 WRITE_UVLC(pcSPS->getMaxDecFrameBuffering(), "max_dec_frame_buffering" );579 WRITE_UVLC(pcSPS->getMaxLatencyIncrease(), "max_latency_increase" );580 #endif581 503 assert( pcSPS->getMaxCUWidth() == pcSPS->getMaxCUHeight() ); 582 504 … … 589 511 } 590 512 591 #if H0412_REF_PIC_LIST_RESTRICTION592 513 WRITE_FLAG( pcSPS->getRestrictedRefPicListsFlag(), "restricted_ref_pic_lists_flag" ); 593 514 if( pcSPS->getRestrictedRefPicListsFlag() ) … … 595 516 WRITE_FLAG( pcSPS->getListsModificationPresentFlag(), "lists_modification_present_flag" ); 596 517 } 597 #endif598 518 WRITE_UVLC( log2MinCUSize - 3, "log2_min_coding_block_size_minus3" ); 599 519 WRITE_UVLC( pcSPS->getMaxCUDepth()-g_uiAddCUDepth, "log2_diff_max_min_coding_block_size" ); … … 621 541 WRITE_FLAG( pcSPS->getUseSAO() ? 1 : 0, "sample_adaptive_offset_enabled_flag"); 622 542 WRITE_FLAG( pcSPS->getUseALF () ? 1 : 0, "adaptive_loop_filter_enabled_flag"); 623 #if LCU_SYNTAX_ALF624 543 if(pcSPS->getUseALF()) 625 544 { 626 545 WRITE_FLAG( (pcSPS->getUseALFCoefInSlice()) ? 1 : 0, "alf_coef_in_slice_flag"); 627 546 } 628 #endif629 547 630 548 if( pcSPS->getUsePCM() ) … … 637 555 WRITE_FLAG( pcSPS->getTemporalIdNestingFlag() ? 1 : 0, "temporal_id_nesting_flag" ); 638 556 639 #if RPS_IN_SPS640 557 TComRPSList* rpsList = pcSPS->getRPSList(); 641 558 TComReferencePictureSet* rps; … … 648 565 } 649 566 WRITE_FLAG( pcSPS->getLongTermRefsPresent() ? 1 : 0, "long_term_ref_pics_present_flag" ); 650 #endif651 #if !PIC_CROPPING652 //!!!KS: Syntax not in WD !!!653 654 xWriteUvlc ( pcSPS->getPad (0) );655 xWriteUvlc ( pcSPS->getPad (1) );656 #endif657 567 // AMVP mode for each depth 658 568 for (Int i = 0; i < pcSPS->getMaxCUDepth(); i++) … … 661 571 } 662 572 663 #if TILES_WPP_ENTRY_POINT_SIGNALLING664 573 Int tilesOrEntropyCodingSyncIdc = 0; 665 574 if ( pcSPS->getNumColumnsMinus1() > 0 || pcSPS->getNumRowsMinus1() > 0) … … 673 582 pcSPS->setTilesOrEntropyCodingSyncIdc( tilesOrEntropyCodingSyncIdc ); 674 583 WRITE_CODE(tilesOrEntropyCodingSyncIdc, 2, "tiles_or_entropy_coding_sync_idc"); 675 #endif 676 677 #if TILES_OR_ENTROPY_SYNC_IDC 584 678 585 if(tilesOrEntropyCodingSyncIdc == 1) 679 586 { 680 #endif681 587 WRITE_UVLC( pcSPS->getNumColumnsMinus1(), "num_tile_columns_minus1" ); 682 588 WRITE_UVLC( pcSPS->getNumRowsMinus1(), "num_tile_rows_minus1" ); … … 697 603 if( pcSPS->getNumColumnsMinus1() !=0 || pcSPS->getNumRowsMinus1() != 0) 698 604 { 699 #if !REMOVE_TILE_DEPENDENCE700 WRITE_FLAG( pcSPS->getTileBoundaryIndependenceIdr(), "tile_boundary_independence_flag" );701 if(pcSPS->getTileBoundaryIndependenceIdr() == 1)702 {703 #endif704 605 WRITE_FLAG( pcSPS->getLFCrossTileBoundaryFlag()?1 : 0, "loop_filter_across_tile_flag"); 705 #if !REMOVE_TILE_DEPENDENCE 706 } 707 #endif 708 } 709 #if TILES_OR_ENTROPY_SYNC_IDC 710 } 711 #endif 606 } 607 } 712 608 WRITE_FLAG( 1, "sps_extension_flag" ); 713 609 #if !QC_MVHEVC_B0046 … … 896 792 WRITE_UVLC( pcSlice->getPPS()->getPPSId(), "pic_parameter_set_id" ); 897 793 #endif 898 #if H0388899 794 if( pcSlice->getPPS()->getOutputFlagPresentFlag() ) 900 795 { 901 796 WRITE_FLAG( pcSlice->getPicOutputFlag() ? 1 : 0, "pic_output_flag" ); 902 797 } 903 #endif904 798 #if QC_REM_IDV_B0046 905 799 if(pcSlice->getNalUnitType()==NAL_UNIT_CODED_SLICE_IDR && pcSlice->getViewId() == 0) … … 924 818 { 925 819 WRITE_FLAG( 0, "short_term_ref_pic_set_sps_flag"); 926 #if RPS_IN_SPS927 820 codeShortTermRefPicSet(pcSlice->getSPS(), rps); 928 #else929 codeShortTermRefPicSet(pcSlice->getPPS(), rps);930 #endif931 821 } 932 822 else … … 935 825 WRITE_UVLC( pcSlice->getRPSidx(), "short_term_ref_pic_set_idx" ); 936 826 } 937 #if RPS_IN_SPS938 827 if(pcSlice->getSPS()->getLongTermRefsPresent()) 939 #else940 if(pcSlice->getPPS()->getLongTermRefsPresent())941 #endif942 828 { 943 829 WRITE_UVLC( rps->getNumberOfLongtermPictures(), "num_long_term_pics"); 944 830 Int maxPocLsb = 1<<pcSlice->getSPS()->getBitsForPOC(); 945 831 Int prev = 0; 946 #if LTRP_MULT947 832 Int prevDeltaPocLt=0; 948 833 Int currDeltaPocLt=0; 949 #endif950 834 for(Int i=rps->getNumberOfPictures()-1 ; i > rps->getNumberOfPictures()-rps->getNumberOfLongtermPictures()-1; i--) 951 835 { 952 836 WRITE_UVLC((maxPocLsb-rps->getDeltaPOC(i)+prev)%maxPocLsb, "delta_poc_lsb_lt"); 953 837 954 #if LTRP_MULT955 838 currDeltaPocLt=((maxPocLsb-rps->getDeltaPOC(i)+prev)%maxPocLsb)+prevDeltaPocLt; 956 839 … … 983 866 } 984 867 prevDeltaPocLt=currDeltaPocLt; 985 #endif986 868 prev = rps->getDeltaPOC(i); 987 869 WRITE_FLAG( rps->getUsed(i), "used_by_curr_pic_lt_flag"); … … 995 877 { 996 878 WRITE_FLAG( 0, "short_term_ref_pic_set_sps_flag"); 997 #if RPS_IN_SPS998 879 codeShortTermRefPicSet(pcSlice->getSPS(), rps); 999 #else1000 codeShortTermRefPicSet(pcSlice->getPPS(), rps);1001 #endif1002 880 } 1003 881 else … … 1006 884 WRITE_UVLC( pcSlice->getRPSidx(), "short_term_ref_pic_set_idx" ); 1007 885 } 1008 #if RPS_IN_SPS1009 886 if(pcSlice->getSPS()->getLongTermRefsPresent()) 1010 #else1011 if(pcSlice->getPPS()->getLongTermRefsPresent())1012 #endif1013 887 { 1014 888 WRITE_UVLC( rps->getNumberOfLongtermPictures(), "num_long_term_pics"); 1015 889 Int maxPocLsb = 1<<pcSlice->getSPS()->getBitsForPOC(); 1016 890 Int prev = 0; 1017 #if LTRP_MULT1018 891 Int prevDeltaPocLt=0; 1019 892 Int currDeltaPocLt=0; 1020 #endif1021 893 for(Int i=rps->getNumberOfPictures()-1 ; i > rps->getNumberOfPictures()-rps->getNumberOfLongtermPictures()-1; i--) 1022 894 { 1023 895 WRITE_UVLC((maxPocLsb-rps->getDeltaPOC(i)+prev)%maxPocLsb, "delta_poc_lsb_lt"); 1024 896 1025 #if LTRP_MULT1026 897 currDeltaPocLt=((maxPocLsb-rps->getDeltaPOC(i)+prev)%maxPocLsb)+prevDeltaPocLt; 1027 898 … … 1054 925 } 1055 926 prevDeltaPocLt=currDeltaPocLt; 1056 #endif1057 927 prev = rps->getDeltaPOC(i); 1058 928 WRITE_FLAG( rps->getUsed(i), "used_by_curr_pic_lt_flag"); … … 1066 936 if (pcSlice->getSPS()->getUseALF()) 1067 937 { 1068 #if !LCU_SYNTAX_ALF1069 if (pcSlice->getAlfEnabledFlag())1070 {1071 assert (pcSlice->getAPS()->getAlfEnabled());1072 }1073 #endif1074 938 WRITE_FLAG( pcSlice->getAlfEnabledFlag(), "ALF on/off flag in slice header" ); 1075 939 } 1076 940 if (pcSlice->getSPS()->getUseSAO()) 1077 941 { 1078 #if SAO_UNIT_INTERLEAVING1079 942 WRITE_FLAG( pcSlice->getSaoInterleavingFlag(), "SAO interleaving flag" ); 1080 #endif1081 943 assert (pcSlice->getSaoEnabledFlag() == pcSlice->getAPS()->getSaoEnabled()); 1082 944 WRITE_FLAG( pcSlice->getSaoEnabledFlag(), "SAO on/off flag in slice header" ); 1083 #if SAO_UNIT_INTERLEAVING1084 945 if (pcSlice->getSaoInterleavingFlag()&&pcSlice->getSaoEnabledFlag() ) 1085 946 { … … 1087 948 WRITE_FLAG( pcSlice->getAPS()->getSaoParam()->bSaoFlag[2], "SAO on/off flag for Cr in slice header" ); 1088 949 } 1089 #endif1090 950 } 1091 951 WRITE_UVLC( pcSlice->getAPS()->getAPSID(), "aps_id"); … … 1110 970 pcSlice->setNumRefIdx(REF_PIC_LIST_1, 0); 1111 971 } 1112 #if H0412_REF_PIC_LIST_RESTRICTION1113 972 if( pcSlice->getSPS()->getListsModificationPresentFlag() ) 1114 973 { 1115 #endif1116 974 TComRefPicListModification* refPicListModification = pcSlice->getRefPicListModification(); 1117 #if H0137_0138_LIST_MODIFICATION1118 975 if( !pcSlice->isIntra() ) 1119 976 { … … 1158 1015 } 1159 1016 } 1160 #else 1161 if(!pcSlice->isIntra()) 1162 { 1163 WRITE_FLAG(pcSlice->getRefPicListModification()->getRefPicListModificationFlagL0() ? 1 : 0, "ref_pic_list_modification_flag" ); 1164 for(Int i = 0; i < refPicListModification->getNumberOfRefPicListModificationsL0(); i++) 1165 { 1166 WRITE_UVLC( refPicListModification->getListIdcL0(i), "ref_pic_list_modification_idc"); 1167 WRITE_UVLC( refPicListModification->getRefPicSetIdxL0(i), "ref_pic_set_idx"); 1168 } 1169 if(pcSlice->getRefPicListModification()->getRefPicListModificationFlagL0()) 1170 WRITE_UVLC( 3, "ref_pic_list_modification_idc"); 1171 } 1172 if(pcSlice->isInterB()) 1173 { 1174 WRITE_FLAG(pcSlice->getRefPicListModification()->getRefPicListModificationFlagL1() ? 1 : 0, "ref_pic_list_modification_flag" ); 1175 for(Int i = 0; i < refPicListModification->getNumberOfRefPicListModificationsL1(); i++) 1176 { 1177 WRITE_UVLC( refPicListModification->getListIdcL1(i), "ref_pic_list_modification_idc"); 1178 WRITE_UVLC( refPicListModification->getRefPicSetIdxL1(i), "ref_pic_set_idx"); 1179 } 1180 if(pcSlice->getRefPicListModification()->getRefPicListModificationFlagL1()) 1181 WRITE_UVLC( 3, "ref_pic_list_modification_idc"); 1182 } 1183 #endif 1184 } 1185 #if H0412_REF_PIC_LIST_RESTRICTION 1186 } 1187 #endif 1017 } 1018 } 1188 1019 // ref_pic_list_combination( ) 1189 1020 // maybe move to own function? … … 1195 1026 WRITE_UVLC( pcSlice->getNumRefIdx(REF_PIC_LIST_C) - 1, "num_ref_idx lc_active_minus1"); 1196 1027 1197 #if H0412_REF_PIC_LIST_RESTRICTION1198 1028 if( pcSlice->getSPS()->getListsModificationPresentFlag() ) 1199 1029 { 1200 #endif1201 1030 WRITE_FLAG( pcSlice->getRefPicListModificationFlagLC() ? 1 : 0, "ref_pic_list_modification_flag_lc" ); 1202 1031 if(pcSlice->getRefPicListModificationFlagLC()) … … 1205 1034 { 1206 1035 WRITE_FLAG( pcSlice->getListIdFromIdxOfLC(i), "pic_from_list_0_flag" ); 1207 #if H0137_0138_LIST_MODIFICATION1208 1036 if (((pcSlice->getListIdFromIdxOfLC(i)==REF_PIC_LIST_0) && pcSlice->getNumRefIdx( REF_PIC_LIST_0 )>1 ) || ((pcSlice->getListIdFromIdxOfLC(i)==REF_PIC_LIST_1) && pcSlice->getNumRefIdx( REF_PIC_LIST_1 )>1 ) ) 1209 1037 { 1210 1038 WRITE_UVLC( pcSlice->getRefIdxFromIdxOfLC(i), "ref_idx_list_curr" ); 1211 1039 } 1212 #else1213 WRITE_UVLC( pcSlice->getRefIdxFromIdxOfLC(i), "ref_idx_list_curr" );1214 #endif1215 1040 } 1216 1041 } 1217 #if H0412_REF_PIC_LIST_RESTRICTION 1218 } 1219 #endif 1042 } 1220 1043 } 1221 1044 } 1222 1045 1223 #if H0111_MVD_L1_ZERO1224 1046 if (pcSlice->isInterB()) 1225 1047 { 1226 1048 WRITE_FLAG( pcSlice->getMvdL1ZeroFlag() ? 1 : 0, "mvd_l1_zero_flag"); 1227 1049 } 1228 #endif1229 1050 1230 1051 if(pcSlice->getPPS()->getEntropyCodingMode() && !pcSlice->isIntra()) … … 1249 1070 Int iCode = pcSlice->getSliceQp() - ( pcSlice->getPPS()->getPicInitQPMinus26() + 26 ); 1250 1071 WRITE_SVLC( iCode, "slice_qp_delta" ); 1251 #if DBL_CONTROL1252 1072 if (pcSlice->getPPS()->getDeblockingFilterControlPresent()) 1253 1073 { … … 1256 1076 WRITE_FLAG(pcSlice->getInheritDblParamFromAPS(), "inherit_dbl_param_from_APS_flag"); 1257 1077 } 1258 #else1259 WRITE_FLAG(pcSlice->getInheritDblParamFromAPS(), "inherit_dbl_param_from_APS_flag");1260 #endif1261 1078 if (!pcSlice->getInheritDblParamFromAPS()) 1262 1079 { … … 1268 1085 } 1269 1086 } 1270 #if DBL_CONTROL 1271 } 1272 #endif 1087 } 1273 1088 if ( pcSlice->getSliceType() == B_SLICE ) 1274 1089 { … … 1341 1156 \param pcSlice Where we find the substream size information. 1342 1157 */ 1343 #if TILES_WPP_ENTRY_POINT_SIGNALLING1344 1158 Void TEncCavlc::codeTilesWPPEntryPoint( TComSlice* pSlice ) 1345 1159 { … … 1441 1255 delete [] entryPointOffset; 1442 1256 } 1443 #else1444 Void TEncCavlc::codeSliceHeaderSubstreamTable( TComSlice* pcSlice )1445 {1446 UInt uiNumSubstreams = pcSlice->getPPS()->getNumSubstreams();1447 UInt*puiSubstreamSizes = pcSlice->getSubstreamSizes();1448 1449 // Write header information for all substreams except the last.1450 for (UInt ui = 0; ui+1 < uiNumSubstreams; ui++)1451 {1452 UInt uiNumbits = puiSubstreamSizes[ui];1453 1454 //the 2 first bits are used to give the size of the header1455 if ( uiNumbits < (1<<8) )1456 {1457 xWriteCode(0, 2 );1458 xWriteCode(uiNumbits, 8 );1459 }1460 else if ( uiNumbits < (1<<16) )1461 {1462 xWriteCode(1, 2 );1463 xWriteCode(uiNumbits, 16 );1464 }1465 else if ( uiNumbits < (1<<24) )1466 {1467 xWriteCode(2, 2 );1468 xWriteCode(uiNumbits, 24 );1469 }1470 else if ( uiNumbits < (1<<31) )1471 {1472 xWriteCode(3, 2 );1473 xWriteCode(uiNumbits, 32 );1474 }1475 else1476 {1477 printf("Error in codeSliceHeaderTable\n");1478 exit(-1);1479 }1480 }1481 }1482 #endif1483 1257 1484 1258 Void TEncCavlc::codeTerminatingBit ( UInt uilsLast ) … … 1599 1373 } 1600 1374 1601 #if BURST_IPCM1602 1375 /** Code I_PCM information. 1603 1376 * \param pcCU pointer to CU … … 1611 1384 assert(0); 1612 1385 } 1613 #else1614 /** Code I_PCM information.1615 * \param pcCU pointer to CU1616 * \param uiAbsPartIdx CU index1617 * \returns Void1618 *1619 * If I_PCM flag indicates that the CU is I_PCM, code its PCM alignment bits and codes.1620 */1621 Void TEncCavlc::codeIPCMInfo( TComDataCU* pcCU, UInt uiAbsPartIdx)1622 {1623 UInt uiIPCM = (pcCU->getIPCMFlag(uiAbsPartIdx) == true)? 1 : 0;1624 1625 xWriteFlag(uiIPCM);1626 1627 if (uiIPCM)1628 {1629 xWritePCMAlignZero();1630 1631 UInt uiMinCoeffSize = pcCU->getPic()->getMinCUWidth()*pcCU->getPic()->getMinCUHeight();1632 UInt uiLumaOffset = uiMinCoeffSize*uiAbsPartIdx;1633 UInt uiChromaOffset = uiLumaOffset>>2;1634 1635 Pel* piPCMSample;1636 UInt uiWidth;1637 UInt uiHeight;1638 UInt uiSampleBits;1639 UInt uiX, uiY;1640 1641 piPCMSample = pcCU->getPCMSampleY() + uiLumaOffset;1642 uiWidth = pcCU->getWidth(uiAbsPartIdx);1643 uiHeight = pcCU->getHeight(uiAbsPartIdx);1644 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthLuma();1645 1646 for(uiY = 0; uiY < uiHeight; uiY++)1647 {1648 for(uiX = 0; uiX < uiWidth; uiX++)1649 {1650 UInt uiSample = piPCMSample[uiX];1651 1652 xWriteCode(uiSample, uiSampleBits);1653 }1654 piPCMSample += uiWidth;1655 }1656 1657 piPCMSample = pcCU->getPCMSampleCb() + uiChromaOffset;1658 uiWidth = pcCU->getWidth(uiAbsPartIdx)/2;1659 uiHeight = pcCU->getHeight(uiAbsPartIdx)/2;1660 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthChroma();1661 1662 for(uiY = 0; uiY < uiHeight; uiY++)1663 {1664 for(uiX = 0; uiX < uiWidth; uiX++)1665 {1666 UInt uiSample = piPCMSample[uiX];1667 1668 xWriteCode(uiSample, uiSampleBits);1669 }1670 piPCMSample += uiWidth;1671 }1672 1673 piPCMSample = pcCU->getPCMSampleCr() + uiChromaOffset;1674 uiWidth = pcCU->getWidth(uiAbsPartIdx)/2;1675 uiHeight = pcCU->getHeight(uiAbsPartIdx)/2;1676 uiSampleBits = pcCU->getSlice()->getSPS()->getPCMBitDepthChroma();1677 1678 for(uiY = 0; uiY < uiHeight; uiY++)1679 {1680 for(uiX = 0; uiX < uiWidth; uiX++)1681 {1682 UInt uiSample = piPCMSample[uiX];1683 1684 xWriteCode(uiSample, uiSampleBits);1685 }1686 piPCMSample += uiWidth;1687 }1688 }1689 }1690 #endif1691 1386 1692 1387 Void TEncCavlc::codeIntraDirLumaAng( TComDataCU* pcCU, UInt uiAbsPartIdx ) … … 1719 1414 Int iDQp = pcCU->getQP( uiAbsPartIdx ) - pcCU->getRefQP( uiAbsPartIdx ); 1720 1415 1721 #if H0736_AVC_STYLE_QP_RANGE1722 1416 Int qpBdOffsetY = pcCU->getSlice()->getSPS()->getQpBDOffsetY(); 1723 1417 iDQp = (iDQp + 78 + qpBdOffsetY + (qpBdOffsetY/2)) % (52 + qpBdOffsetY) - 26 - (qpBdOffsetY/2); 1724 #endif1725 1418 1726 1419 xWriteSvlc( iDQp ); … … 1753 1446 xWriteSvlc( iCode ); 1754 1447 } 1755 #if LCU_SYNTAX_ALF1756 1448 /** Code the fixed length code (smaller than one max value) in OSALF 1757 1449 * \param idx: coded value … … 1778 1470 } 1779 1471 } 1780 #endif1781 1472 1782 1473 Void TEncCavlc::codeSaoFlag( UInt uiCode ) … … 1794 1485 xWriteSvlc( iCode ); 1795 1486 } 1796 #if SAO_UNIT_INTERLEAVING1797 1487 /** Code SAO run. 1798 1488 * \param uiCode … … 1818 1508 WRITE_CODE( uiCode, uiLength, "sao_run_diff"); 1819 1509 } 1820 #endif1821 1510 1822 1511 Void TEncCavlc::estBit( estBitsSbacStruct* pcEstBitsCabac, Int width, Int height, TextType eTType ) … … 2123 1812 Void TEncCavlc::xCodeScalingList(TComScalingList* scalingList, UInt sizeId, UInt listId) 2124 1813 { 2125 #if SCALING_LIST2126 1814 Int coefNum = min(MAX_MATRIX_COEF_NUM,(Int)g_scalingListSize[sizeId]); 2127 1815 UInt* scan = g_auiFrameScanXY [ (sizeId == 0)? 1 : 2]; 2128 #else2129 Int coefNum = (Int)g_scalingListSize[sizeId];2130 UInt* scan = g_auiFrameScanXY [ sizeId + 1];2131 #endif2132 1816 Int nextCoef = SCALING_LIST_START_VALUE; 2133 1817 Int data; 2134 1818 Int *src = scalingList->getScalingListAddress(sizeId, listId); 2135 #if SCALING_LIST2136 1819 if(sizeId > SCALING_LIST_8x8 && scalingList->getUseDefaultScalingMatrixFlag(sizeId,listId)) 2137 1820 { … … 2164 1847 } 2165 1848 } 2166 #else2167 for(Int i=0;i<coefNum;i++)2168 {2169 data = src[scan[i]] - nextCoef;2170 nextCoef = src[scan[i]];2171 if(data > 127)2172 {2173 data = data - 256;2174 }2175 if(data < -128)2176 {2177 data = data + 256;2178 }2179 2180 WRITE_SVLC( data, "delta_coef");2181 }2182 #endif2183 1849 } 2184 1850 Bool TComScalingList::checkPredMode(UInt sizeId, UInt listId) … … 2186 1852 for(Int predListIdx = (Int)listId -1 ; predListIdx >= 0; predListIdx--) 2187 1853 { 2188 #if SCALING_LIST2189 1854 if( !memcmp(getScalingListAddress(sizeId,listId),getScalingListAddress(sizeId, predListIdx),sizeof(Int)*min(MAX_MATRIX_COEF_NUM,(Int)g_scalingListSize[sizeId])) // check value of matrix 2190 1855 && ((sizeId < SCALING_LIST_16x16) || (getScalingListDC(sizeId,listId) == getScalingListDC(sizeId,predListIdx)))) // check DC value 2191 #else2192 if( !memcmp(getScalingListAddress(sizeId,listId),getScalingListAddress(sizeId, predListIdx),sizeof(Int)*(Int)g_scalingListSize[sizeId])) // check value of matrix2193 #endif2194 1856 { 2195 1857 setRefMatrixId(sizeId, listId, predListIdx); -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncCavlc.h
r292 r294 88 88 Void xWriteUnaryMaxSymbol ( UInt uiSymbol, UInt uiMaxSymbol ); 89 89 90 #if RPS_IN_SPS91 90 Void codeShortTermRefPicSet ( TComSPS* pcSPS, TComReferencePictureSet* pcRPS ); 92 #else93 Void codeShortTermRefPicSet ( TComPPS* pcPPS, TComReferencePictureSet* pcRPS );94 #endif95 91 96 92 UInt xConvertToUInt ( Int iValue ) { return ( iValue <= 0) ? -iValue<<1 : (iValue<<1)-1; } … … 129 125 Void codeTileMarkerFlag(TComSlice* pcSlice); 130 126 131 #if TILES_WPP_ENTRY_POINT_SIGNALLING132 127 Void codeTilesWPPEntryPoint( TComSlice* pSlice ); 133 #else134 Void codeSliceHeaderSubstreamTable( TComSlice* pcSlice );135 #endif136 128 Void codeTerminatingBit ( UInt uilsLast ); 137 129 Void codeSliceFinish (); … … 148 140 Void codeAlfSvlc ( Int iCode ); 149 141 Void codeAlfCtrlDepth(); 150 #if LCU_SYNTAX_ALF151 142 Void codeAPSAlflag(UInt uiCode); 152 143 Void codeAlfFixedLengthIdx( UInt idx, UInt numFilterSetsInBuffer); 153 #endif154 144 Void codeSaoFlag ( UInt uiCode ); 155 145 Void codeSaoUvlc ( UInt uiCode ); 156 146 Void codeSaoSvlc ( Int iCode ); 157 #if SAO_UNIT_INTERLEAVING158 147 Void codeSaoRun ( UInt uiCode, UInt maxValue ); 159 148 Void codeSaoMergeLeft ( UInt uiCode, UInt compIdx ){;} … … 161 150 Void codeSaoTypeIdx ( UInt uiCode ){ xWriteUvlc(uiCode );} 162 151 Void codeSaoUflc ( UInt uiCode ){ assert(uiCode < 32); xWriteCode(uiCode, 5);} 163 #endif164 152 165 153 Void codeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx ); … … 189 177 Void codePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 190 178 191 #if BURST_IPCM192 179 Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, Int numIPCM, Bool firstIPCMFlag); 193 #else194 Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx );195 #endif196 180 197 181 Void codeTransformSubdivFlag( UInt uiSymbol, UInt uiCtx ); -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncCfg.h
r292 r294 109 109 Int m_iSourceWidth; 110 110 Int m_iSourceHeight; 111 #if PIC_CROPPING112 111 Int m_croppingMode; 113 112 Int m_cropLeft; … … 115 114 Int m_cropTop; 116 115 Int m_cropBottom; 117 #endif118 116 Int m_iFrameToBeEncoded; 119 117 Double m_adLambdaModifier[ MAX_TLAYER ]; … … 125 123 GOPEntryMvc m_GOPList[MAX_GOP+1]; 126 124 Int m_extraRPSs; 127 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER128 125 Int m_maxDecPicBuffering[MAX_TLAYER]; 129 126 Int m_numReorderPics[MAX_TLAYER]; 130 #else131 Int m_maxNumberOfReferencePictures;132 Int m_numReorderFrames;133 #endif134 127 135 128 Int m_iQP; // if (AdaptiveQP == OFF) … … 142 135 // TODO: We need to have a common sliding mechanism used by both the encoder and decoder 143 136 144 #if H0566_TLA145 137 Int m_maxTempLayer; ///< Max temporal layer 146 #else147 Bool m_bTLayering; ///< indicates whether temporal IDs are set based on the hierarchical coding structure148 Bool m_abTLayerSwitchingFlag[MAX_TLAYER]; ///< temporal layer switching flags corresponding to temporal layer149 #endif150 138 Bool m_bDisInter4x4; 151 139 Bool m_useAMP; … … 163 151 Int m_loopFilterBetaOffsetDiv2; 164 152 Int m_loopFilterTcOffsetDiv2; 165 #if DBL_CONTROL166 153 Bool m_DeblockingFilterControlPresent; 167 #endif168 154 Bool m_bUseSAO; 169 155 #if LGE_ILLUCOMP_B0045 … … 173 159 Bool m_bUseIVS; 174 160 #endif 175 #if SAO_UNIT_INTERLEAVING176 161 Int m_maxNumOffsetsPerPic; 177 162 Bool m_saoInterleavingFlag; 178 #endif179 163 180 164 //====== Lossless ======== … … 232 216 233 217 Int m_iALFMaxNumberFilters; 234 #if LCU_SYNTAX_ALF235 218 Bool m_bALFParamInSlice; 236 219 Bool m_bALFPicBasedEncode; 237 #endif238 220 239 221 Bool m_bUseASR; … … 242 224 Bool m_bLCMod; 243 225 Bool m_bUseRDOQ; 244 #if !PIC_CROPPING245 Bool m_bUsePAD;246 #endif247 226 Bool m_bUseFastEnc; 248 227 Bool m_bUseEarlyCU; 249 228 250 #if FAST_DECISION_FOR_MRG_RD_COST251 229 Bool m_useFastDecisionForMerge; 252 #endif253 230 Bool m_bUseCbfFastMode; 254 231 Bool m_bUseLMChroma; … … 308 285 309 286 Bool m_bEnableTMVP; 310 #if MULTIBITS_DATA_HIDING311 287 Int m_signHideFlag; 312 288 Int m_signHidingThreshold; 313 #endif314 289 315 290 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 … … 386 361 Void setSourceWidth ( Int i ) { m_iSourceWidth = i; } 387 362 Void setSourceHeight ( Int i ) { m_iSourceHeight = i; } 388 #if PIC_CROPPING389 363 Void setCroppingMode ( Int i ) { m_croppingMode = i; } 390 364 Void setCropLeft ( Int i ) { m_cropLeft = i; } … … 392 366 Void setCropTop ( Int i ) { m_cropTop = i; } 393 367 Void setCropBottom ( Int i ) { m_cropBottom = i; } 394 #endif395 368 Void setFrameToBeEncoded ( Int i ) { m_iFrameToBeEncoded = i; } 396 369 … … 402 375 Void setExtraRPSs ( Int i ) { m_extraRPSs = i; } 403 376 GOPEntryMvc getGOPEntry ( Int i ) { return m_GOPList[i]; } 404 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER405 377 Void setMaxDecPicBuffering ( UInt u, UInt tlayer ) { m_maxDecPicBuffering[tlayer] = u; } 406 378 Void setNumReorderPics ( Int i, UInt tlayer ) { m_numReorderPics[tlayer] = i; } 407 #else408 Void setMaxNumberOfReferencePictures ( Int u ) { m_maxNumberOfReferencePictures = u; }409 Void setNumReorderFrames ( Int i ) { m_numReorderFrames = i; }410 #endif411 379 412 380 #if HHI_INTERVIEW_SKIP … … 426 394 Void setMaxRefPicNum ( Int iMaxRefPicNum ) { m_iMaxRefPicNum = iMaxRefPicNum; } 427 395 428 #if H0566_TLA429 396 Bool getMaxTempLayer () { return m_maxTempLayer; } 430 397 Void setMaxTempLayer ( Int maxTempLayer ) { m_maxTempLayer = maxTempLayer; } 431 #else432 Bool getTLayering () { return m_bTLayering; }433 Void setTLayering ( Bool bTLayering ) { m_bTLayering = bTLayering; }434 Bool getTLayerSwitchingFlag ( UInt uiTLayer ) { assert (uiTLayer < MAX_TLAYER ); return m_abTLayerSwitchingFlag[uiTLayer]; }435 Void setTLayerSwitchingFlag ( Bool* pbTLayerSwitchingFlag ) { for ( Int i = 0; i < MAX_TLAYER; i++ ) m_abTLayerSwitchingFlag[i] = pbTLayerSwitchingFlag[i]; }436 #endif437 398 438 399 Bool getDisInter4x4 () { return m_bDisInter4x4; } … … 470 431 Void setLoopFilterBetaOffset ( Int i ) { m_loopFilterBetaOffsetDiv2 = i; } 471 432 Void setLoopFilterTcOffset ( Int i ) { m_loopFilterTcOffsetDiv2 = i; } 472 #if DBL_CONTROL473 433 Void setDeblockingFilterControlPresent ( Bool b ) { m_DeblockingFilterControlPresent = b; } 474 #endif475 434 476 435 //====== Motion search ======== … … 527 486 Int getSourceWidth () { return m_iSourceWidth; } 528 487 Int getSourceHeight () { return m_iSourceHeight; } 529 #if PIC_CROPPING530 488 Int getCroppingMode () { return m_croppingMode; } 531 489 Int getCropLeft () { return m_cropLeft; } … … 533 491 Int getCropTop () { return m_cropTop; } 534 492 Int getCropBottom () { return m_cropBottom; } 535 #endif536 493 Int getFrameToBeEncoded () { return m_iFrameToBeEncoded; } 537 494 void setLambdaModifier ( UInt uiIndex, Double dValue ) { m_adLambdaModifier[ uiIndex ] = dValue; } … … 542 499 UInt getDecodingRefreshType () { return m_uiDecodingRefreshType; } 543 500 Int getGOPSize () { return m_iGOPSize; } 544 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER545 501 Int getMaxDecPicBuffering (UInt tlayer) { return m_maxDecPicBuffering[tlayer]; } 546 502 Int getNumReorderPics (UInt tlayer) { return m_numReorderPics[tlayer]; } 547 #else548 Int getMaxNumberOfReferencePictures () { return m_maxNumberOfReferencePictures; }549 Int geNumReorderFrames () { return m_numReorderFrames; }550 #endif551 503 Int getQP () { return m_iQP; } 552 504 … … 565 517 Int getLoopFilterBetaOffset () { return m_loopFilterBetaOffsetDiv2; } 566 518 Int getLoopFilterTcOffset () { return m_loopFilterTcOffsetDiv2; } 567 #if DBL_CONTROL568 519 Bool getDeblockingFilterControlPresent() { return m_DeblockingFilterControlPresent; } 569 #endif570 520 571 521 //==== Motion search ======== … … 610 560 Void setLCMod ( Bool b ) { m_bLCMod = b; } 611 561 Void setUseRDOQ ( Bool b ) { m_bUseRDOQ = b; } 612 #if !PIC_CROPPING613 Void setUsePAD ( Bool b ) { m_bUsePAD = b; }614 #endif615 562 #if HHI_VSO 616 563 Void setUseVSO ( Bool b ) { m_bUseVSO = b; } … … 624 571 Void setUseFastEnc ( Bool b ) { m_bUseFastEnc = b; } 625 572 Void setUseEarlyCU ( Bool b ) { m_bUseEarlyCU = b; } 626 #if FAST_DECISION_FOR_MRG_RD_COST627 573 Void setUseFastDecisionForMerge ( Bool b ) { m_useFastDecisionForMerge = b; } 628 #endif629 574 Void setUseCbfFastMode ( Bool b ) { m_bUseCbfFastMode = b; } 630 575 Void setUseConstrainedIntraPred ( Bool b ) { m_bUseConstrainedIntraPred = b; } … … 645 590 Void setALFMaxNumberFilters (Int i) { m_iALFMaxNumberFilters = i; } 646 591 Int getALFMaxNumberFilters () { return m_iALFMaxNumberFilters; } 647 #if LCU_SYNTAX_ALF648 592 Void setALFParamInSlice (Bool b) {m_bALFParamInSlice = b;} 649 593 Bool getALFParamInSlice () {return m_bALFParamInSlice;} 650 594 Void setALFPicBasedEncode (Bool b) {m_bALFPicBasedEncode = b;} 651 595 Bool getALFPicBasedEncode () {return m_bALFPicBasedEncode;} 652 #endif653 596 654 597 Bool getUseLComb () { return m_bUseLComb; } 655 598 Bool getLCMod () { return m_bLCMod; } 656 599 Bool getUseRDOQ () { return m_bUseRDOQ; } 657 #if !PIC_CROPPING658 Bool getUsePAD () { return m_bUsePAD; }659 #endif660 600 661 601 #if HHI_VSO … … 669 609 Bool getUseFastEnc () { return m_bUseFastEnc; } 670 610 Bool getUseEarlyCU () { return m_bUseEarlyCU; } 671 #if FAST_DECISION_FOR_MRG_RD_COST672 611 Bool getUseFastDecisionForMerge () { return m_useFastDecisionForMerge; } 673 #endif674 612 Bool getUseCbfFastMode () { return m_bUseCbfFastMode; } 675 613 Bool getUseConstrainedIntraPred () { return m_bUseConstrainedIntraPred; } … … 721 659 Bool getUseIVS () {return m_bUseIVS;} 722 660 #endif 723 #if SAO_UNIT_INTERLEAVING724 661 Void setMaxNumOffsetsPerPic (Int iVal) { m_maxNumOffsetsPerPic = iVal; } 725 662 Int getMaxNumOffsetsPerPic () { return m_maxNumOffsetsPerPic; } 726 663 Void setSaoInterleavingFlag (bool bVal) { m_saoInterleavingFlag = bVal; } 727 664 Bool getSaoInterleavingFlag () { return m_saoInterleavingFlag; } 728 #endif729 665 Void setTileBehaviorControlPresentFlag ( Int i ) { m_iTileBehaviorControlPresentFlag = i; } 730 666 Int getTileBehaviorControlPresentFlag () { return m_iTileBehaviorControlPresentFlag; } … … 735 671 Void setUniformSpacingIdr ( Int i ) { m_iUniformSpacingIdr = i; } 736 672 Int getUniformSpacingIdr () { return m_iUniformSpacingIdr; } 737 #if !REMOVE_TILE_DEPENDENCE738 Void setTileBoundaryIndependenceIdr ( Int i ) { m_iTileBoundaryIndependenceIdr = i; }739 Int getTileBoundaryIndependenceIdr () { return m_iTileBoundaryIndependenceIdr; }740 #endif741 673 Void setNumColumnsMinus1 ( Int i ) { m_iNumColumnsMinus1 = i; } 742 674 Int getNumColumnsMinus1 () { return m_iNumColumnsMinus1; } … … 834 766 Void setEnableTMVP ( Bool b ) { m_bEnableTMVP = b; } 835 767 Bool getEnableTMVP () { return m_bEnableTMVP; } 836 #if MULTIBITS_DATA_HIDING837 768 Void setSignHideFlag( Int signHideFlag ) { m_signHideFlag = signHideFlag; } 838 769 Void setTSIG( Int tsig ) { m_signHidingThreshold = tsig; } 839 770 Int getSignHideFlag() { return m_signHideFlag; } 840 771 Int getTSIG() { return m_signHidingThreshold; } 841 #endif842 772 #if VIDYO_VPS_INTEGRATION |QC_MVHEVC_B0046 843 773 Void setLayerId ( UInt layerId ) { m_layerId = layerId; } -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncCu.cpp
r292 r294 107 107 108 108 m_bEncodeDQP = false; 109 #if BURST_IPCM110 109 m_checkBurstIPCMFlag = false; 111 #endif112 110 113 111 // initialize partition order. … … 285 283 } 286 284 287 #if BURST_IPCM288 285 TComPic* pcPic = pcCU->getPic(); 289 286 Bool checkBurstIPCMFlag = (pcPic->getSlice(0)->getSPS()->getUsePCM())? true : false; … … 293 290 pcCU->setNumSucIPCM(0); 294 291 pcCU->setLastCUSucIPCMFlag(false); 295 #endif296 292 297 293 // Encode CU data 298 294 xEncodeCU( pcCU, 0, 0 ); 299 295 300 #if OL_FLUSH301 296 bool bTerminateSlice = bForceTerminate; 302 297 UInt uiCUAddr = pcCU->getAddr(); 303 298 /* If at the end of an LCU line but not at the end of a substream, perform CABAC flush */ 304 #if WPP_SIMPLIFICATION305 299 if (!bTerminateSlice && pcCU->getSlice()->getPPS()->getNumSubstreams() > 1) 306 #else307 if (!bTerminateSlice && pcCU->getSlice()->getPPS()->getCabacIstateReset())308 #endif309 300 { 310 301 Int iNumSubstreams = pcCU->getSlice()->getPPS()->getNumSubstreams(); … … 312 303 UInt uiCol = uiCUAddr % uiWidthInLCUs; 313 304 UInt uiLin = uiCUAddr / uiWidthInLCUs; 314 #if !REMOVE_TILE_DEPENDENCE315 Int iBreakDep = pcCU->getPic()->getPicSym()->getTileBoundaryIndependenceIdr();316 #endif317 305 UInt uiTileStartLCU = pcCU->getPic()->getPicSym()->getTComTile(pcCU->getPic()->getPicSym()->getTileIdxMap(uiCUAddr))->getFirstCUAddr(); 318 306 UInt uiTileLCUX = uiTileStartLCU % uiWidthInLCUs; … … 321 309 UInt uiTileHeight = pcCU->getPic()->getPicSym()->getTComTile(pcCU->getPic()->getPicSym()->getTileIdxMap(uiCUAddr))->getTileHeight(); 322 310 Int iNumSubstreamsPerTile = iNumSubstreams; 323 #if !REMOVE_TILE_DEPENDENCE 324 #if WPP_SIMPLIFICATION 325 if (iBreakDep && pcCU->getSlice()->getPPS()->getNumSubstreams() > 1) 326 #else 327 if (iBreakDep && pcCU->getSlice()->getPPS()->getEntropyCodingSynchro()) 328 #endif 311 if (pcCU->getSlice()->getPPS()->getNumSubstreams() > 1) 312 { 329 313 iNumSubstreamsPerTile /= pcCU->getPic()->getPicSym()->getNumTiles(); 330 if ((iBreakDep && (uiCol == uiTileLCUX+uiTileWidth-1) && (uiLin+iNumSubstreamsPerTile < uiTileLCUY+uiTileHeight))331 || (!iBreakDep && (uiCol == uiWidthInLCUs-1) && (uiLin+iNumSubstreams < pcCU->getPic()->getFrameHeightInCU())))314 } 315 if ((uiCol == uiTileLCUX+uiTileWidth-1) && (uiLin+iNumSubstreamsPerTile < uiTileLCUY+uiTileHeight)) 332 316 { 333 317 m_pcEntropyCoder->encodeFlush(); 334 318 } 335 #else 336 #if WPP_SIMPLIFICATION 337 if (pcCU->getSlice()->getPPS()->getNumSubstreams() > 1) 338 #else 339 if (pcCU->getSlice()->getPPS()->getEntropyCodingSynchro()) 340 #endif 341 { 342 iNumSubstreamsPerTile /= pcCU->getPic()->getPicSym()->getNumTiles(); 343 } 344 if ((uiCol == uiTileLCUX+uiTileWidth-1) && (uiLin+iNumSubstreamsPerTile < uiTileLCUY+uiTileHeight)) 345 { 346 m_pcEntropyCoder->encodeFlush(); 347 } 348 #endif 349 } 350 #endif // OL_FLUSH 319 } 351 320 } 352 321 … … 556 525 #if LOSSLESS_CODING 557 526 Bool isAddLowestQP = false; 558 #if H0736_AVC_STYLE_QP_RANGE559 527 Int lowestQP = -rpcTempCU->getSlice()->getSPS()->getQpBDOffsetY(); 560 #else561 Int lowestQP = 0;562 #endif563 528 #endif 564 529 … … 566 531 { 567 532 Int idQP = m_pcEncCfg->getMaxDeltaQP(); 568 #if H0736_AVC_STYLE_QP_RANGE569 533 iMinQP = Clip3( -rpcTempCU->getSlice()->getSPS()->getQpBDOffsetY(), MAX_QP, iBaseQP-idQP ); 570 534 iMaxQP = Clip3( -rpcTempCU->getSlice()->getSPS()->getQpBDOffsetY(), MAX_QP, iBaseQP+idQP ); … … 576 540 577 541 } 578 #endif579 #else580 iMinQP = Clip3( MIN_QP, MAX_QP, iBaseQP-idQP );581 iMaxQP = Clip3( MIN_QP, MAX_QP, iBaseQP+idQP );582 #if LOSSLESS_CODING583 if ( (rpcTempCU->getSlice()->getSPS()->getUseLossless()) && (lowestQP < iMinQP) && rpcTempCU->getSlice()->getPPS()->getUseDQP() )584 {585 isAddLowestQP = true;586 iMinQP = iMinQP - 1;587 }588 #endif589 542 #endif 590 543 } … … 1317 1270 { 1318 1271 Int idQP = m_pcEncCfg->getMaxDeltaQP(); 1319 #if H0736_AVC_STYLE_QP_RANGE1320 1272 iMinQP = Clip3( -rpcTempCU->getSlice()->getSPS()->getQpBDOffsetY(), MAX_QP, iBaseQP-idQP ); 1321 1273 iMaxQP = Clip3( -rpcTempCU->getSlice()->getSPS()->getQpBDOffsetY(), MAX_QP, iBaseQP+idQP ); … … 1326 1278 iMinQP = iMinQP - 1; 1327 1279 } 1328 #endif1329 #else1330 iMinQP = Clip3( MIN_QP, MAX_QP, iBaseQP-idQP );1331 iMaxQP = Clip3( MIN_QP, MAX_QP, iBaseQP+idQP );1332 #if LOSSLESS_CODING1333 if ( (rpcTempCU->getSlice()->getSPS()->getUseLossless()) && (lowestQP < iMinQP) && rpcTempCU->getSlice()->getPPS()->getUseDQP() )1334 {1335 isAddLowestQP = true;1336 iMinQP = iMinQP - 1;1337 }1338 #endif1339 1280 #endif 1340 1281 } … … 1635 1576 &&((uiPosY+pcCU->getHeight(uiAbsPartIdx))%uiGranularityWidth==0||(uiPosY+pcCU->getHeight(uiAbsPartIdx)==uiHeight)); 1636 1577 1637 #if BURST_IPCM1638 1578 if(granularityBoundary && (!(pcCU->getIPCMFlag(uiAbsPartIdx) && ( pcCU->getNumSucIPCM() > 1 )))) 1639 #else1640 if(granularityBoundary)1641 #endif1642 1579 { 1643 1580 // The 1-terminating bit is added to all streams, so don't add it here when it's 1. … … 1731 1668 iQpOffset = Int(floor( dQpOffset + 0.49999 )); 1732 1669 } 1733 #if H0736_AVC_STYLE_QP_RANGE1734 1670 return Clip3(-pcCU->getSlice()->getSPS()->getQpBDOffsetY(), MAX_QP, iBaseQp+iQpOffset ); 1735 #else1736 return Clip3( MIN_QP, MAX_QP, iBaseQp+iQpOffset );1737 #endif1738 1671 } 1739 1672 … … 1754 1687 UInt uiBPelY = uiTPelY + (g_uiMaxCUHeight>>uiDepth) - 1; 1755 1688 1756 #if BURST_IPCM1757 1689 if( getCheckBurstIPCMFlag() ) 1758 1690 { … … 1760 1692 pcCU->setNumSucIPCM( countNumSucIPCM ( pcCU, uiAbsPartIdx ) ); 1761 1693 } 1762 #endif1763 1694 1764 1695 TComSlice * pcSlice = pcCU->getPic()->getSlice(pcCU->getPic()->getCurrSliceIdx()); … … 1833 1764 setdQPFlag(true); 1834 1765 } 1835 #if BURST_IPCM1836 1766 pcCU->setNumSucIPCM(0); 1837 1767 pcCU->setLastCUSucIPCMFlag(false); 1838 #endif1839 1768 for ( UInt uiPartUnitIdx = 0; uiPartUnitIdx < 4; uiPartUnitIdx++, uiAbsPartIdx+=uiQNumParts ) 1840 1769 { … … 1991 1920 #endif 1992 1921 1993 #if FAST_DECISION_FOR_MRG_RD_COST1994 1922 Bool bestIsSkip = false; 1995 #endif1996 1923 1997 1924 for( UInt uiMergeCand = 0; uiMergeCand < numValidMergeCand; ++uiMergeCand ) … … 2023 1950 #endif 2024 1951 { 2025 #if FAST_DECISION_FOR_MRG_RD_COST2026 1952 if( !(bestIsSkip && uiNoResidual == 0) ) 2027 1953 { 2028 #endif2029 1954 // set MC parameters 2030 1955 rpcTempCU->setPredModeSubParts( MODE_SKIP, 0, uhDepth ); // interprets depth relative to LCU level … … 2088 2013 else 2089 2014 { 2090 #if FAST_DECISION_FOR_MRG_RD_COST2091 2015 if( bestIsSkip) 2092 2016 { … … 2107 2031 else 2108 2032 { 2109 #endif2110 2033 if ( pcPredYuvTemp != m_ppcPredYuvTemp[uhDepth]) 2111 2034 { … … 2113 2036 pcPredYuvTemp = m_ppcPredYuvBest[uhDepth]; 2114 2037 } 2115 #if FAST_DECISION_FOR_MRG_RD_COST2116 2038 } 2117 #endif2118 2039 } 2119 2040 #if HHI_VSO … … 2140 2061 Bool bQtRootCbf = rpcTempCU->getQtRootCbf(0) == 1; 2141 2062 2142 #if H0736_AVC_STYLE_QP_RANGE2143 2063 Int orgQP = rpcTempCU->getQP( 0 ); 2144 2064 xCheckDQP( rpcTempCU ); 2145 2065 xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth); 2146 2066 rpcTempCU->initEstData( uhDepth, orgQP ); 2147 #else 2148 UInt uiOrgQP = rpcTempCU->getQP( 0 ); 2149 xCheckDQP( rpcTempCU ); 2150 xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth); 2151 rpcTempCU->initEstData( uhDepth, uiOrgQP ); 2152 #endif 2153 2154 #if FAST_DECISION_FOR_MRG_RD_COST 2067 2155 2068 if( m_pcEncCfg->getUseFastDecisionForMerge() && !bestIsSkip ) 2156 2069 { 2157 2070 bestIsSkip = rpcBestCU->getQtRootCbf(0) == 0; 2158 2071 } 2159 #endif2160 2072 2161 2073 if (!bQtRootCbf) 2162 2074 break; 2163 #if FAST_DECISION_FOR_MRG_RD_COST2164 2075 } 2165 #endif2166 2076 } 2167 2077 } … … 2515 2425 } 2516 2426 2517 #if BURST_IPCM2518 2427 /** Check whether the last CU shares the same root as the current CU and is IPCM or not. 2519 2428 * \param pcCU … … 2607 2516 return numSucIPCM; 2608 2517 } 2609 #endif2610 2518 2611 2519 Void TEncCu::xCopyAMVPInfo (AMVPInfo* pSrc, AMVPInfo* pDst) -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncCu.h
r231 r294 84 84 // Data : encoder control 85 85 Bool m_bEncodeDQP; 86 #if BURST_IPCM87 86 Bool m_checkBurstIPCMFlag; 88 #endif89 87 90 88 // Access channel … … 173 171 Void setdQPFlag ( Bool b ) { m_bEncodeDQP = b; } 174 172 175 #if BURST_IPCM176 173 Bool getCheckBurstIPCMFlag() { return m_checkBurstIPCMFlag; } 177 174 Void setCheckBurstIPCMFlag( Bool b ) { m_checkBurstIPCMFlag = b; } … … 179 176 Bool checkLastCUSucIPCM ( TComDataCU* pcCU, UInt uiCurAbsPartIdx ); 180 177 Int countNumSucIPCM ( TComDataCU* pcCU, UInt uiCurAbsPartIdx ); 181 #endif182 178 183 179 #if ADAPTIVE_QP_SELECTION -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncEntropy.cpp
r292 r294 52 52 Void TEncEntropy::encodeSliceHeader ( TComSlice* pcSlice ) 53 53 { 54 #if SAO_UNIT_INTERLEAVING55 54 if (pcSlice->getSPS()->getUseSAO()) 56 55 { … … 68 67 } 69 68 } 70 #endif71 69 72 70 m_pcEntropyCoderIf->codeSliceHeader( pcSlice ); … … 74 72 } 75 73 76 #if TILES_WPP_ENTRY_POINT_SIGNALLING77 74 Void TEncEntropy::encodeTilesWPPEntryPoint( TComSlice* pSlice ) 78 75 { 79 76 m_pcEntropyCoderIf->codeTilesWPPEntryPoint( pSlice ); 80 77 } 81 #else82 Void TEncEntropy::encodeSliceHeaderSubstreamTable( TComSlice* pcSlice )83 {84 m_pcEntropyCoderIf->codeSliceHeaderSubstreamTable( pcSlice );85 }86 #endif87 78 88 79 Void TEncEntropy::encodeTerminatingBit ( UInt uiIsLast ) … … 98 89 } 99 90 100 #if OL_FLUSH101 91 Void TEncEntropy::encodeFlush() 102 92 { … … 107 97 m_pcEntropyCoderIf->encodeStart(); 108 98 } 109 #endif110 99 111 100 Void TEncEntropy::encodeSEI(const SEI& sei) … … 157 146 uiAbsPartIdx = 0; 158 147 } 159 #if BURST_IPCM160 148 if( !bRD ) 161 149 { … … 165 153 } 166 154 } 167 #endif168 155 m_pcEntropyCoderIf->codeSkipFlag( pcCU, uiAbsPartIdx ); 169 156 } … … 226 213 // m_pcEntropyCoderIf->codeAlfUvlc(pAlfParam->realfiltNo); 227 214 228 #if !LCU_SYNTAX_ALF229 m_pcEntropyCoderIf->codeAlfFlag(pAlfParam->alf_pcr_region_flag);230 #endif231 #if !ALF_SINGLE_FILTER_SHAPE232 m_pcEntropyCoderIf->codeAlfUvlc(pAlfParam->filter_shape);233 #endif234 215 Int noFilters = min(pAlfParam->filters_per_group-1, 2); 235 216 m_pcEntropyCoderIf->codeAlfUvlc(noFilters); … … 241 222 else if (noFilters == 2) 242 223 { 243 #if LCU_SYNTAX_ALF244 #if ALF_16_BA_GROUPS245 224 Int numMergeFlags = 16; 246 #else247 Int numMergeFlags = 15;248 #endif249 #else250 #if ALF_16_BA_GROUPS251 Int numMergeFlags = 16;252 #else253 Int numMergeFlags = pAlfParam->alf_pcr_region_flag ? 16 : 15;254 #endif255 #endif256 225 for (Int i=1; i<numMergeFlags; i++) 257 226 { … … 285 254 pDepthInt = pDepthIntTabShapes[ALFp->filter_shape]; 286 255 maxScanVal = 0; 287 #if ALF_SINGLE_FILTER_SHAPE288 256 int minScanVal = MIN_SCAN_POS_CROSS; 289 #else290 int minScanVal = ( ALFp->filter_shape==ALF_STAR5x5 ) ? 0 : MIN_SCAN_POS_CROSS;291 #endif292 257 293 258 for(i = 0; i < sqrFiltLength; i++) … … 355 320 // Coding parameters 356 321 ALFp->minKStart = minKStart; 357 #if !LCU_SYNTAX_ALF358 ALFp->maxScanVal = maxScanVal;359 #endif360 322 for(scanPos = minScanVal; scanPos < maxScanVal; scanPos++) 361 323 { … … 363 325 } 364 326 365 #if LCU_SYNTAX_ALF366 327 if (ALFp->filters_per_group == 1) 367 328 { … … 370 331 else 371 332 { 372 #endif373 333 len += writeFilterCodingParams(minKStart, minScanVal, maxScanVal, kMinTab); 374 334 375 335 // Filter coefficients 376 336 len += writeFilterCoeffs(sqrFiltLength, filters_per_group, pDepthInt, ALFp->coeffmulti, kMinTab); 377 #if LCU_SYNTAX_ALF 378 } 379 #endif 337 } 380 338 381 339 return len; … … 415 373 { 416 374 scanPos = pDepthInt[i] - 1; 417 #if LCU_SYNTAX_ALF418 375 Int k = (filters_per_group == 1) ? kMinTab[i] : kMinTab[scanPos]; 419 376 golombEncode(FilterCoeff[ind][i], k); 420 #else421 golombEncode(FilterCoeff[ind][i], kMinTab[scanPos]);422 #endif423 377 } 424 378 } … … 526 480 #endif 527 481 528 #if LCU_SYNTAX_ALF529 482 /** parse the fixed length code (smaller than one max value) in ALF 530 483 * \param run: coded value … … 793 746 794 747 } 795 #endif796 748 797 749 798 750 Void TEncEntropy::encodeAlfParam(ALFParam* pAlfParam) 799 751 { 800 #if LCU_SYNTAX_ALF801 752 const Int numCoeff = (Int)ALF_MAX_NUM_COEF; 802 753 … … 826 777 } 827 778 } 828 #else829 if (!pAlfParam->alf_flag)830 {831 return;832 }833 Int pos;834 codeAux(pAlfParam);835 codeFilt(pAlfParam);836 837 // filter parameters for chroma838 m_pcEntropyCoderIf->codeAlfUvlc(pAlfParam->chroma_idc);839 if(pAlfParam->chroma_idc)840 {841 #if !ALF_SINGLE_FILTER_SHAPE842 m_pcEntropyCoderIf->codeAlfUvlc(pAlfParam->filter_shape_chroma);843 #endif844 // filter coefficients for chroma845 for(pos=0; pos<pAlfParam->num_coeff_chroma; pos++)846 {847 m_pcEntropyCoderIf->codeAlfSvlc(pAlfParam->coeff_chroma[pos]);848 }849 }850 #endif851 779 } 852 780 … … 907 835 uiAbsPartIdx = 0; 908 836 } 909 #if BURST_IPCM910 837 if( !bRD ) 911 838 { … … 915 842 } 916 843 } 917 #endif918 844 919 845 #if !RWTH_SDC_DLT_B0036 … … 943 869 uiAbsPartIdx = 0; 944 870 } 945 #if BURST_IPCM946 871 if( !bRD ) 947 872 { … … 951 876 } 952 877 } 953 #endif954 878 955 879 m_pcEntropyCoderIf->codeSplitFlag( pcCU, uiAbsPartIdx, uiDepth ); … … 969 893 uiAbsPartIdx = 0; 970 894 } 971 #if BURST_IPCM972 895 if( !bRD ) 973 896 { … … 977 900 } 978 901 } 979 #endif980 902 #if RWTH_SDC_DLT_B0036 981 903 if( !pcCU->getSlice()->isInterB() && pcCU->isIntra(uiAbsPartIdx) && pcCU->getSDCFlag(uiAbsPartIdx) ) … … 1031 953 } 1032 954 1033 #if BURST_IPCM1034 955 Int numIPCM = 0; 1035 956 Bool firstIPCMFlag = false; … … 1047 968 } 1048 969 m_pcEntropyCoderIf->codeIPCMInfo ( pcCU, uiAbsPartIdx, numIPCM, firstIPCMFlag); 1049 #else 1050 m_pcEntropyCoderIf->codeIPCMInfo ( pcCU, uiAbsPartIdx ); 1051 #endif 1052 1053 } 1054 1055 #if UNIFIED_TRANSFORM_TREE 970 971 } 972 1056 973 Void TEncEntropy::xEncodeTransform( TComDataCU* pcCU,UInt offsetLuma, UInt offsetChroma, UInt uiAbsPartIdx, UInt absTUPartIdx, UInt uiDepth, UInt width, UInt height, UInt uiTrIdx, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3, Bool& bCodeDQP ) 1057 #else1058 Void TEncEntropy::xEncodeTransformSubdiv( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt absTUPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 )1059 #endif1060 974 { 1061 975 const UInt uiSubdiv = pcCU->getTransformIdx( uiAbsPartIdx ) + pcCU->getDepth( uiAbsPartIdx ) > uiDepth; 1062 976 const UInt uiLog2TrafoSize = g_aucConvertToBit[pcCU->getSlice()->getSPS()->getMaxCUWidth()]+2 - uiDepth; 1063 #if UNIFIED_TRANSFORM_TREE1064 977 UInt cbfY = pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA , uiTrIdx ); 1065 978 UInt cbfU = pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrIdx ); … … 1084 997 } 1085 998 } 1086 #endif // UNIFIED_TRANSFORM_TREE1087 999 {//CABAC 1088 1000 if( pcCU->getPredictionMode(uiAbsPartIdx) == MODE_INTRA && pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_NxN && uiDepth == pcCU->getDepth(uiAbsPartIdx) ) … … 1164 1076 if( uiSubdiv ) 1165 1077 { 1166 #if UNIFIED_TRANSFORM_TREE1167 1078 UInt size; 1168 1079 width >>= 1; … … 1170 1081 size = width*height; 1171 1082 uiTrIdx++; 1172 #endif // UNIFIED_TRANSFORM_TREE1173 1083 ++uiDepth; 1174 #if UNIFIED_TRANSFORM_TREE1175 1084 const UInt partNum = pcCU->getPic()->getNumPartInCU() >> (uiDepth << 1); 1176 #else1177 const UInt uiQPartNum = pcCU->getPic()->getNumPartInCU() >> (uiDepth << 1);1178 #endif1179 1085 1180 1086 UInt uiCurrentCbfY = 0; … … 1182 1088 UInt uiCurrentCbfV = 0; 1183 1089 1184 #if UNIFIED_TRANSFORM_TREE1185 1090 UInt nsAddr = 0; 1186 1091 nsAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, absTUPartIdx, 0, uiDepth - pcCU->getDepth( uiAbsPartIdx ) ); … … 1198 1103 nsAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, absTUPartIdx, 3, uiDepth - pcCU->getDepth( uiAbsPartIdx ) ); 1199 1104 xEncodeTransform( pcCU, offsetLuma, offsetChroma, uiAbsPartIdx, nsAddr, uiDepth, width, height, uiTrIdx, 3, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV, bCodeDQP ); 1200 #else // UNIFIED_TRANSFORM_TREE1201 UInt nsAddr = 0;1202 nsAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, absTUPartIdx, 0, uiDepth - pcCU->getDepth( uiAbsPartIdx ) );1203 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, nsAddr, uiDepth, 0, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );1204 1205 uiAbsPartIdx += uiQPartNum;1206 nsAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, absTUPartIdx, 1, uiDepth - pcCU->getDepth( uiAbsPartIdx ) );1207 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, nsAddr, uiDepth, 1, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );1208 1209 uiAbsPartIdx += uiQPartNum;1210 nsAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, absTUPartIdx, 2, uiDepth - pcCU->getDepth( uiAbsPartIdx ) );1211 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, nsAddr, uiDepth, 2, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );1212 1213 uiAbsPartIdx += uiQPartNum;1214 nsAddr = pcCU->getNSAbsPartIdx( uiLog2TrafoSize-1, uiAbsPartIdx, absTUPartIdx, 3, uiDepth - pcCU->getDepth( uiAbsPartIdx ) );1215 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, nsAddr, uiDepth, 3, uiCurrentCbfY, uiCurrentCbfU, uiCurrentCbfV );1216 #endif // UNIFIED_TRANSFORM_TREE1217 1105 1218 1106 uiYCbfFront3 += uiCurrentCbfY; … … 1258 1146 } 1259 1147 1260 #if UNIFIED_TRANSFORM_TREE1261 1148 if ( cbfY || cbfU || cbfV ) 1262 1149 { … … 1310 1197 } 1311 1198 } 1312 #endif // UNIFIED_TRANSFORM_TREE 1313 } 1314 } 1315 } 1316 1317 #if !UNIFIED_TRANSFORM_TREE 1318 // transform index 1319 Void TEncEntropy::encodeTransformIdx( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool bRD ) 1320 { 1321 assert( !bRD ); // parameter bRD can be removed 1322 if( bRD ) 1323 { 1324 uiAbsPartIdx = 0; 1325 } 1326 1327 DTRACE_CABAC_VL( g_nSymbolCounter++ ) 1328 DTRACE_CABAC_T( "\tdecodeTransformIdx()\tCUDepth=" ) 1329 DTRACE_CABAC_V( uiDepth ) 1330 DTRACE_CABAC_T( "\n" ) 1331 UInt temp = 0; 1332 UInt temp1 = 0; 1333 UInt temp2 = 0; 1334 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 ); 1335 } 1336 #endif // !UNIFIED_TRANSFORM_TREE 1199 } 1200 } 1201 } 1202 1337 1203 1338 1204 // Intra direction for Luma … … 1550 1416 1551 1417 // texture 1552 #if !UNIFIED_TRANSFORM_TREE1553 Void TEncEntropy::xEncodeCoeff( TComDataCU* pcCU, UInt uiLumaOffset, UInt uiChromaOffset, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiTrIdx, UInt uiCurrTrIdx, Bool& bCodeDQP )1554 {1555 UInt uiLog2TrSize = g_aucConvertToBit[ pcCU->getSlice()->getSPS()->getMaxCUWidth() >> uiDepth ] + 2;1556 UInt uiCbfY = pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, uiTrIdx );1557 UInt uiCbfU = pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrIdx );1558 UInt uiCbfV = pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiTrIdx );1559 1560 if( uiLog2TrSize == 2 )1561 {1562 UInt uiQPDiv = pcCU->getPic()->getNumPartInCU() >> ( ( uiDepth - 1 ) << 1 );1563 if( ( uiAbsPartIdx % uiQPDiv ) == 0 )1564 {1565 m_uiBakAbsPartIdx = uiAbsPartIdx;1566 m_uiBakChromaOffset = uiChromaOffset;1567 }1568 else if( ( uiAbsPartIdx % uiQPDiv ) == (uiQPDiv - 1) )1569 {1570 uiCbfU = pcCU->getCbf( m_uiBakAbsPartIdx, TEXT_CHROMA_U, uiTrIdx );1571 uiCbfV = pcCU->getCbf( m_uiBakAbsPartIdx, TEXT_CHROMA_V, uiTrIdx );1572 }1573 }1574 1575 if ( uiCbfY || uiCbfU || uiCbfV )1576 {1577 // dQP: only for LCU once1578 if ( pcCU->getSlice()->getPPS()->getUseDQP() )1579 {1580 if ( bCodeDQP )1581 {1582 encodeQP( pcCU, uiAbsPartIdx );1583 bCodeDQP = false;1584 }1585 }1586 UInt uiLumaTrMode, uiChromaTrMode;1587 pcCU->convertTransIdx( uiAbsPartIdx, pcCU->getTransformIdx( uiAbsPartIdx ), uiLumaTrMode, uiChromaTrMode );1588 const UInt uiStopTrMode = uiLumaTrMode;1589 1590 assert(1); // as long as quadtrees are not used for residual transform1591 1592 if( uiTrIdx == uiStopTrMode )1593 {1594 if( pcCU->getCbf( uiAbsPartIdx, TEXT_LUMA, uiTrIdx ) )1595 {1596 Int trWidth = uiWidth;1597 Int trHeight = uiHeight;1598 pcCU->getNSQTSize( uiTrIdx, uiAbsPartIdx, trWidth, trHeight );1599 m_pcEntropyCoderIf->codeCoeffNxN( pcCU, (pcCU->getCoeffY()+uiLumaOffset), uiAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_LUMA );1600 }1601 1602 uiWidth >>= 1;1603 uiHeight >>= 1;1604 1605 if( uiLog2TrSize == 2 )1606 {1607 UInt uiQPDiv = pcCU->getPic()->getNumPartInCU() >> ( ( uiDepth - 1 ) << 1 );1608 if( ( uiAbsPartIdx % uiQPDiv ) == (uiQPDiv - 1) )1609 {1610 uiWidth <<= 1;1611 uiHeight <<= 1;1612 Int trWidth = uiWidth;1613 Int trHeight = uiHeight;1614 pcCU->getNSQTSize( uiTrIdx-1, uiAbsPartIdx, trWidth, trHeight );1615 if( pcCU->getCbf( m_uiBakAbsPartIdx, TEXT_CHROMA_U, uiTrIdx ) )1616 {1617 m_pcEntropyCoderIf->codeCoeffNxN( pcCU, (pcCU->getCoeffCb()+m_uiBakChromaOffset), m_uiBakAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_CHROMA_U );1618 }1619 if( pcCU->getCbf( m_uiBakAbsPartIdx, TEXT_CHROMA_V, uiTrIdx ) )1620 {1621 m_pcEntropyCoderIf->codeCoeffNxN( pcCU, (pcCU->getCoeffCr()+m_uiBakChromaOffset), m_uiBakAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_CHROMA_V );1622 }1623 }1624 }1625 else1626 {1627 Int trWidth = uiWidth;1628 Int trHeight = uiHeight;1629 pcCU->getNSQTSize( uiTrIdx, uiAbsPartIdx, trWidth, trHeight );1630 if( pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_U, uiTrIdx ) )1631 {1632 m_pcEntropyCoderIf->codeCoeffNxN( pcCU, (pcCU->getCoeffCb()+uiChromaOffset), uiAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_CHROMA_U );1633 }1634 if( pcCU->getCbf( uiAbsPartIdx, TEXT_CHROMA_V, uiTrIdx ) )1635 {1636 m_pcEntropyCoderIf->codeCoeffNxN( pcCU, (pcCU->getCoeffCr()+uiChromaOffset), uiAbsPartIdx, trWidth, trHeight, uiDepth, TEXT_CHROMA_V );1637 }1638 }1639 }1640 else1641 {1642 {1643 DTRACE_CABAC_VL( g_nSymbolCounter++ );1644 DTRACE_CABAC_T( "\tgoing down\tdepth=" );1645 DTRACE_CABAC_V( uiDepth );1646 DTRACE_CABAC_T( "\ttridx=" );1647 DTRACE_CABAC_V( uiTrIdx );1648 DTRACE_CABAC_T( "\n" );1649 }1650 if( uiCurrTrIdx <= uiTrIdx )1651 assert(1);1652 1653 UInt uiSize;1654 uiWidth >>= 1;1655 uiHeight >>= 1;1656 uiSize = uiWidth*uiHeight;1657 uiDepth++;1658 uiTrIdx++;1659 1660 UInt uiQPartNum = pcCU->getPic()->getNumPartInCU() >> (uiDepth << 1);1661 UInt uiIdx = uiAbsPartIdx;1662 1663 {1664 xEncodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiIdx, uiDepth, uiWidth, uiHeight, uiTrIdx, uiCurrTrIdx, bCodeDQP );1665 uiLumaOffset += uiSize; uiChromaOffset += (uiSize>>2); uiIdx += uiQPartNum;1666 1667 xEncodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiIdx, uiDepth, uiWidth, uiHeight, uiTrIdx, uiCurrTrIdx, bCodeDQP );1668 uiLumaOffset += uiSize; uiChromaOffset += (uiSize>>2); uiIdx += uiQPartNum;1669 1670 xEncodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiIdx, uiDepth, uiWidth, uiHeight, uiTrIdx, uiCurrTrIdx, bCodeDQP );1671 uiLumaOffset += uiSize; uiChromaOffset += (uiSize>>2); uiIdx += uiQPartNum;1672 1673 xEncodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiIdx, uiDepth, uiWidth, uiHeight, uiTrIdx, uiCurrTrIdx, bCodeDQP );1674 }1675 {1676 DTRACE_CABAC_VL( g_nSymbolCounter++ );1677 DTRACE_CABAC_T( "\tgoing up\n" );1678 }1679 }1680 }1681 }1682 #endif // !UNIFIED_TRANSFORM_TREE1683 1418 1684 1419 /** encode coefficients … … 1718 1453 DTRACE_CABAC_V( uiDepth ) 1719 1454 DTRACE_CABAC_T( "\n" ) 1720 #if !UNIFIED_TRANSFORM_TREE1721 UInt temp = 0;1722 UInt temp1 = 0;1723 UInt temp2 = 0;1724 xEncodeTransformSubdiv( pcCU, uiAbsPartIdx, uiAbsPartIdx, uiDepth, 0, temp, temp1, temp2 );1725 #endif // !UNIFIED_TRANSFORM_TREE1726 1455 } 1727 1456 else … … 1747 1476 } 1748 1477 } 1749 #if !UNIFIED_TRANSFORM_TREE1750 encodeTransformIdx( pcCU, uiAbsPartIdx, pcCU->getDepth(uiAbsPartIdx) );1751 #endif1752 1478 } 1753 1479 … … 1768 1494 #endif 1769 1495 1770 #if UNIFIED_TRANSFORM_TREE1771 1496 UInt temp = 0; 1772 1497 UInt temp1 = 0; 1773 1498 UInt temp2 = 0; 1774 1499 xEncodeTransform( pcCU, uiLumaOffset, uiChromaOffset, uiAbsPartIdx, uiAbsPartIdx, uiDepth, uiWidth, uiHeight, 0, 0, temp, temp1, temp2, bCodeDQP ); 1775 #else // UNIFIED_TRANSFORM_TREE1776 xEncodeCoeff( pcCU, uiLumaOffset, uiChromaOffset, uiAbsPartIdx, uiDepth, uiWidth, uiHeight, 0, uiLumaTrMode, bCodeDQP );1777 #endif // UNIFIED_TRANSFORM_TREE1778 1500 1779 1501 #if FIX_MPI_B0065 … … 1797 1519 } 1798 1520 1799 #if SAO_UNIT_INTERLEAVING1800 1521 /** Encode SAO Offset 1801 1522 * \param saoLcuParam SAO LCU paramters … … 1985 1706 } 1986 1707 } 1987 #else1988 /** Encode SAO for one partition1989 * \param pSaoParam, iPartIdx1990 */1991 Void TEncEntropy::encodeSaoOnePart(SAOParam* pSaoParam, Int iPartIdx, Int iYCbCr)1992 {1993 SAOQTPart* pAlfPart = NULL;1994 pAlfPart = &(pSaoParam->psSaoPart[iYCbCr][iPartIdx]);1995 1996 UInt uiSymbol;1997 1998 if(!pAlfPart->bSplit)1999 {2000 if (pAlfPart->bEnableFlag)2001 {2002 uiSymbol = pAlfPart->iBestType + 1;2003 }2004 else2005 {2006 uiSymbol = 0;2007 }2008 2009 m_pcEntropyCoderIf->codeSaoUvlc(uiSymbol);2010 2011 if (pAlfPart->bEnableFlag)2012 {2013 for(Int i=0; i< pAlfPart->iLength; i++)2014 {2015 m_pcEntropyCoderIf->codeSaoSvlc(pAlfPart->iOffset[i]);2016 }2017 }2018 return;2019 }2020 2021 //split2022 if (pAlfPart->PartLevel < pSaoParam->iMaxSplitLevel)2023 {2024 for (Int i=0;i<NUM_DOWN_PART;i++)2025 {2026 encodeSaoOnePart(pSaoParam, pAlfPart->DownPartsIdx[i], iYCbCr);2027 }2028 }2029 }2030 2031 /** Encode quadtree split flag2032 * \param pSaoParam, iPartIdx2033 */2034 Void TEncEntropy::encodeQuadTreeSplitFlag(SAOParam* pSaoParam, Int iPartIdx, Int iYCbCr)2035 {2036 SAOQTPart* pSaoPart = NULL;2037 pSaoPart = &(pSaoParam->psSaoPart[iYCbCr][iPartIdx]);2038 2039 if(pSaoPart->PartLevel < pSaoParam->iMaxSplitLevel)2040 {2041 //send one flag2042 m_pcEntropyCoderIf->codeSaoFlag( (pSaoPart->bSplit)?(1):(0) );2043 2044 if(pSaoPart->bSplit)2045 {2046 for (Int i=0;i<NUM_DOWN_PART;i++)2047 {2048 encodeQuadTreeSplitFlag(pSaoParam, pSaoPart->DownPartsIdx[i], iYCbCr);2049 }2050 }2051 }2052 }2053 /** Encode SAO parameters2054 * \param pSaoParam2055 */2056 Void TEncEntropy::encodeSaoParam(SAOParam* pSaoParam)2057 {2058 if (pSaoParam->bSaoFlag[0])2059 {2060 encodeQuadTreeSplitFlag(pSaoParam, 0, 0);2061 encodeSaoOnePart(pSaoParam, 0, 0);2062 m_pcEntropyCoderIf->codeSaoFlag(pSaoParam->bSaoFlag[1]);2063 if (pSaoParam->bSaoFlag[1])2064 {2065 encodeQuadTreeSplitFlag(pSaoParam, 0, 1);2066 encodeSaoOnePart(pSaoParam, 0, 1);2067 }2068 m_pcEntropyCoderIf->codeSaoFlag(pSaoParam->bSaoFlag[2]);2069 if (pSaoParam->bSaoFlag[2])2070 {2071 encodeQuadTreeSplitFlag(pSaoParam, 0, 2);2072 encodeSaoOnePart(pSaoParam, 0, 2);2073 }2074 }2075 }2076 #endif2077 1708 2078 1709 Int TEncEntropy::countNonZeroCoeffs( TCoeff* pcCoef, UInt uiSize ) -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncEntropy.h
r292 r294 90 90 virtual Void codeTileMarkerFlag ( TComSlice* pcSlice ) = 0; 91 91 92 #if TILES_WPP_ENTRY_POINT_SIGNALLING93 92 virtual Void codeTilesWPPEntryPoint ( TComSlice* pSlice ) = 0; 94 #else95 virtual Void codeSliceHeaderSubstreamTable( TComSlice* pcSlice ) = 0;96 #endif97 93 virtual Void codeTerminatingBit ( UInt uilsLast ) = 0; 98 94 virtual Void codeSliceFinish () = 0; 99 #if OL_FLUSH100 95 virtual Void codeFlush () = 0; 101 96 virtual Void encodeStart () = 0; 102 #endif103 97 104 98 virtual Void codeAlfCtrlDepth() = 0; … … 134 128 #endif 135 129 136 #if BURST_IPCM137 130 virtual Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, Int numIPCM, Bool firstIPCMFlag) = 0; 138 #else139 virtual Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;140 #endif141 131 142 132 virtual Void codeTransformSubdivFlag( UInt uiSymbol, UInt uiCtx ) = 0; … … 155 145 virtual Void codeAlfUvlc ( UInt uiCode ) = 0; 156 146 virtual Void codeAlfSvlc ( Int iCode ) = 0; 157 #if LCU_SYNTAX_ALF158 147 virtual Void codeAlfFixedLengthIdx( UInt idx, UInt numFilterSetsInBuffer) = 0; 159 148 virtual Void codeAPSAlflag(UInt uiCode) = 0; 160 #endif161 149 /// set slice granularity 162 150 virtual Void setSliceGranularity(Int iSliceGranularity) = 0; … … 169 157 virtual Void codeSaoUvlc ( UInt uiCode ) = 0; 170 158 virtual Void codeSaoSvlc ( Int iCode ) = 0; 171 #if SAO_UNIT_INTERLEAVING172 159 virtual Void codeSaoRun ( UInt uiCode, UInt uiMaxValue ) = 0; 173 160 virtual Void codeSaoMergeLeft ( UInt uiCode, UInt uiCompIdx ) = 0; … … 175 162 virtual Void codeSaoTypeIdx ( UInt uiCode) = 0; 176 163 virtual Void codeSaoUflc ( UInt uiCode) = 0; 177 #endif178 164 virtual Void estBit (estBitsSbacStruct* pcEstBitsSbac, Int width, Int height, TextType eTType) = 0; 179 165 … … 198 184 UInt m_uiBakAbsPartIdx; 199 185 UInt m_uiBakChromaOffset; 200 #if UNIFIED_TRANSFORM_TREE201 186 UInt m_bakAbsPartIdxCU; 202 #endif203 187 204 188 public: … … 216 200 Void encodeSliceHeader ( TComSlice* pcSlice ); 217 201 Void encodeTileMarkerFlag (TComSlice* pcSlice) {m_pcEntropyCoderIf->codeTileMarkerFlag(pcSlice);} 218 #if TILES_WPP_ENTRY_POINT_SIGNALLING219 202 Void encodeTilesWPPEntryPoint( TComSlice* pSlice ); 220 #else221 Void encodeSliceHeaderSubstreamTable( TComSlice* pcSlice );222 #endif223 203 Void encodeTerminatingBit ( UInt uiIsLast ); 224 204 Void encodeSliceFinish (); 225 #if OL_FLUSH226 205 Void encodeFlush (); 227 206 Void encodeStart (); 228 #endif229 #if LCU_SYNTAX_ALF230 207 Void encodeAlfFlag(UInt code) {m_pcEntropyCoderIf->codeAlfFlag(code);} 231 208 Void encodeAlfStoredFilterSetIdx(UInt idx, UInt numFilterSetsInBuffer); … … 236 213 Int getAlfRun(Int compIdx, AlfParamSet* pAlfParamSet, Int lcuIdxInSlice, Int lcuPos, Int startlcuPosX, Int endlcuPosX); 237 214 Void encodeAPSAlfFlag(UInt code) {m_pcEntropyCoderIf->codeAPSAlflag(code);} 238 #endif239 215 Void encodeAlfParam(ALFParam* pAlfParam); 240 216 … … 297 273 Void encodeIntraDirModeChroma( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false ); 298 274 299 #if !UNIFIED_TRANSFORM_TREE300 Void encodeTransformIdx ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, Bool bRD = false );301 #endif302 275 Void encodeTransformSubdivFlag( UInt uiSymbol, UInt uiCtx ); 303 276 Void encodeQtCbf ( TComDataCU* pcCU, UInt uiAbsPartIdx, TextType eType, UInt uiTrDepth ); … … 320 293 321 294 private: 322 #if UNIFIED_TRANSFORM_TREE323 295 Void xEncodeTransform ( TComDataCU* pcCU,UInt offsetLumaOffset, UInt offsetChroma, UInt uiAbsPartIdx, UInt absTUPartIdx, UInt uiDepth, UInt width, UInt height, UInt uiTrIdx, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3, Bool& bCodeDQP ); 324 #else325 Void xEncodeTransformSubdiv ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt absTUPartIdx, UInt uiDepth, UInt uiInnerQuadIdx, UInt& uiYCbfFront3, UInt& uiUCbfFront3, UInt& uiVCbfFront3 );326 Void xEncodeCoeff ( TComDataCU* pcCU, UInt uiLumaOffset, UInt uiChromaOffset, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiTrIdx, UInt uiCurrTrIdx, Bool& bCodeDQP );327 #endif // !UNIFIED_TRANSFORM_TREE328 296 public: 329 297 Void encodeCoeff ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, Bool& bCodeDQP ); … … 345 313 Int golombEncode(int coeff, int k); 346 314 Int lengthGolomb(int coeffVal, int k); 347 #if SAO_UNIT_INTERLEAVING348 315 Void encodeSaoUnit(Int rx, Int ry, Int compIdx, SAOParam* saoParam, Int repeatedRow); 349 316 Void encodeSaoOffset(SaoLcuParam* saoLcuParam); 350 317 Void encodeSaoUnitInterleaving(Int rx, Int ry, SAOParam* saoParam, TComDataCU* cu, Int cuAddrInSlice, Int cuAddrUpInSlice, Bool lfCrossSliceBoundaryFlag); 351 318 Void encodeSaoParam (TComAPS* aps); 352 #else353 Void encodeSaoOnePart (SAOParam* pSaoParam, Int iPartIdx, Int iYCbCr);354 Void encodeQuadTreeSplitFlag(SAOParam* pSaoParam, Int iPartIdx, Int iYCbCr);355 Void encodeSaoParam (SAOParam* pSaoParam);356 #endif357 319 358 320 static Int countNonZeroCoeffs( TCoeff* pcCoef, UInt uiSize ); -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncGOP.cpp
r292 r294 159 159 TComOutputBitstream *pcBitstreamRedirect; 160 160 pcBitstreamRedirect = new TComOutputBitstream; 161 #if !REMOVE_TILE_DEPENDENCE162 OutputNALUnit *naluBuffered = NULL;163 Bool bIteratorAtListStart = false;164 #endif165 161 AccessUnit::iterator itLocationToPushSliceHeaderNALU; // used to store location where NALU containing slice header is to be inserted 166 162 UInt uiOneBitstreamPerSliceLength = 0; … … 283 279 pcSlice->setDefaultScalingList (); 284 280 } 285 #if SCALING_LIST286 281 pcSlice->getScalingList()->checkDcOfMatrix(); 287 #endif288 282 pcSlice->getScalingList()->setScalingListPresentFlag(pcSlice->checkDefaultScalingList()); 289 283 m_pcEncTop->getTrQuant()->setScalingList(pcSlice->getScalingList()); … … 333 327 pcSlice->applyReferencePictureSet(rcListPic, pcSlice->getRPS()); 334 328 335 #if H0566_TLA && H0566_TLA_SET_FOR_SWITCHING_POINTS329 #if H0566_TLA_SET_FOR_SWITCHING_POINTS 336 330 if(pcSlice->getTLayer() > 0) 337 331 { … … 354 348 TComRefPicListModification* refPicListModification = pcSlice->getRefPicListModification(); 355 349 refPicListModification->setRefPicListModificationFlagL0( false ); 356 #if !H0137_0138_LIST_MODIFICATION357 refPicListModification->setNumberOfRefPicListModificationsL0(0);358 #endif359 350 refPicListModification->setRefPicListModificationFlagL1( false ); 360 #if !H0137_0138_LIST_MODIFICATION361 refPicListModification->setNumberOfRefPicListModificationsL1(0);362 #endif363 351 xSetRefPicListModificationsMvc( pcSlice, uiPOCCurr, iGOPid ); 364 352 … … 525 513 } 526 514 527 #if H0111_MVD_L1_ZERO528 515 Bool bGPBcheck=false; 529 516 if ( pcSlice->getSliceType() == B_SLICE) … … 552 539 } 553 540 pcPic->getSlice(pcSlice->getSliceIdx())->setMvdL1ZeroFlag(pcSlice->getMvdL1ZeroFlag()); 554 #endif555 541 556 542 UInt uiNumSlices = 1; … … 581 567 UInt uiEncCUAddr; 582 568 583 #if !REMOVE_TILE_DEPENDENCE584 if(pcSlice->getPPS()->getTileBehaviorControlPresentFlag() == 1)585 {586 pcPic->getPicSym()->setTileBoundaryIndependenceIdr( pcSlice->getPPS()->getTileBoundaryIndependenceIdr() );587 }588 else589 {590 pcPic->getPicSym()->setTileBoundaryIndependenceIdr( pcSlice->getPPS()->getSPS()->getTileBoundaryIndependenceIdr() );591 592 }593 #endif594 569 595 570 if( pcSlice->getPPS()->getColumnRowInfoPresent() == 1 ) //derive the tile parameters from PPS … … 839 814 Bool bLFCrossTileBoundary = (pcSlice->getPPS()->getTileBehaviorControlPresentFlag() == 1)? 840 815 (pcSlice->getPPS()->getLFCrossTileBoundaryFlag()):(pcSlice->getPPS()->getSPS()->getLFCrossTileBoundaryFlag()); 841 #if DBL_CONTROL842 816 m_pcLoopFilter->setCfg(pcSlice->getPPS()->getDeblockingFilterControlPresent(), pcSlice->getLoopFilterDisable(), pcSlice->getLoopFilterBetaOffset(), pcSlice->getLoopFilterTcOffset(), bLFCrossTileBoundary); 843 #else844 m_pcLoopFilter->setCfg(pcSlice->getLoopFilterDisable(), pcSlice->getLoopFilterBetaOffset(), pcSlice->getLoopFilterTcOffset(), bLFCrossTileBoundary);845 #endif846 817 m_pcLoopFilter->loopFilterPic( pcPic ); 847 818 … … 861 832 } 862 833 863 #if LCU_SYNTAX_ALF864 834 AlfParamSet* alfSliceParams = NULL; 865 835 std::vector<AlfCUCtrlInfo>* alfCUCtrlParam = NULL; 866 #else867 std::vector<AlfCUCtrlInfo> vAlfCUCtrlParam;868 #endif869 836 pcSlice = pcPic->getSlice(0); 870 837 871 838 if(pcSlice->getSPS()->getUseALF()) 872 839 { 873 #if LCU_SYNTAX_ALF874 840 m_pcAdaptiveLoopFilter->createPicAlfInfo(pcPic, uiNumSlices, pcSlice->getSliceQp()); 875 841 m_pcAdaptiveLoopFilter->initALFEnc(m_pcCfg->getALFParamInSlice(), m_pcCfg->getALFPicBasedEncode(), uiNumSlices, alfSliceParams, alfCUCtrlParam); 876 #else877 vAlfCUCtrlParam.resize(uiNumSlices);878 m_pcAdaptiveLoopFilter->createPicAlfInfo(pcPic, uiNumSlices);879 #endif880 842 } 881 843 … … 900 862 } 901 863 #endif 902 #if NAL_REF_FLAG903 864 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 904 865 OutputNALUnit nalu(NAL_UNIT_SPS, true, m_pcEncTop->getLayerId()); … … 906 867 OutputNALUnit nalu(NAL_UNIT_SPS, true, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth()); 907 868 #endif 908 #else909 OutputNALUnit nalu(NAL_UNIT_SPS, NAL_REF_IDC_PRIORITY_HIGHEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());910 #endif911 869 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 912 #if TILES_WPP_ENTRY_POINT_SIGNALLING913 870 pcSlice->getSPS()->setNumSubstreams( pcSlice->getPPS()->getNumSubstreams() ); 914 #endif915 871 #if HHI_MPI || OL_QTLIMIT_PREDCODING_B0068 916 872 m_pcEntropyCoder->encodeSPS(pcSlice->getSPS(), m_pcEncTop->getIsDepth()); … … 921 877 accessUnit.push_back(new NALUnitEBSP(nalu)); 922 878 923 #if NAL_REF_FLAG924 879 #if VIDYO_VPS_INTEGRATION|QC_MVHEVC_B0046 925 880 #if QC_MVHEVC_B0046 … … 930 885 #else 931 886 nalu = NALUnit(NAL_UNIT_PPS, true, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth()); 932 #endif933 #else934 nalu = NALUnit(NAL_UNIT_PPS, NAL_REF_IDC_PRIORITY_HIGHEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());935 887 #endif 936 888 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); … … 1057 1009 m_pcEntropyCoder->resetEntropy (); 1058 1010 /* start slice NALunit */ 1059 #if H03881060 #if NAL_REF_FLAG1061 1011 OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced(), 1062 1012 #if !VIDYO_VPS_INTEGRATION &!QC_MVHEVC_B0046 … … 1064 1014 #else 1065 1015 m_pcEncTop->getLayerId(), pcSlice->getTLayer() ); 1066 #endif1067 #else1068 OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced() ? NAL_REF_IDC_PRIORITY_HIGHEST: NAL_REF_IDC_PRIORITY_LOWEST,1069 #if !VIDYO_VPS_INTEGRATION1070 m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer() );1071 #else1072 m_pcEncTop->getLayerId(), pcSlice->getTLayer() );1073 #endif1074 #endif1075 #else1076 OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->isReferenced() ? NAL_REF_IDC_PRIORITY_HIGHEST: NAL_REF_IDC_PRIORITY_LOWEST,1077 #if !VIDYO_VPS_INTEGRATION1078 m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer(), true );1079 #else1080 m_pcEncTop->getLayerId(), pcSlice->getTLayer(), true );1081 #endif1082 1083 1016 #endif 1084 1017 … … 1103 1036 if (pcSlice->getSPS()->getUseALF()) 1104 1037 { 1105 #if LCU_SYNTAX_ALF1106 1038 if(pcSlice->getAlfEnabledFlag()) 1107 #else1108 if(pcSlice->getAPS()->getAlfEnabled())1109 #endif1110 1039 { 1111 1040 1112 #if LCU_SYNTAX_ALF1113 1041 if( pcSlice->getSPS()->getUseALFCoefInSlice()) 1114 1042 { … … 1122 1050 { 1123 1051 AlfCUCtrlInfo& cAlfCUCtrlParam = (*alfCUCtrlParam)[pcSlice->getSliceIdx()]; 1124 #else1125 AlfCUCtrlInfo& cAlfCUCtrlParam = vAlfCUCtrlParam[pcSlice->getSliceIdx()];1126 #endif1127 1052 if(cAlfCUCtrlParam.cu_control_flag) 1128 1053 { … … 1138 1063 m_pcEntropyCoder->encodeAlfCtrlParam(cAlfCUCtrlParam, m_pcAdaptiveLoopFilter->getNumCUsInPic()); 1139 1064 1140 #if LCU_SYNTAX_ALF1141 1065 } 1142 #endif1143 1066 } 1144 1067 } … … 1214 1137 UInt uiTotalCodedSize = 0; // for padding calcs. 1215 1138 UInt uiNumSubstreamsPerTile = iNumSubstreams; 1216 #if !REMOVE_TILE_DEPENDENCE 1217 #if WPP_SIMPLIFICATION 1218 if (pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && iNumSubstreams > 1) 1219 #else 1220 if (pcPic->getPicSym()->getTileBoundaryIndependenceIdr() && pcSlice->getPPS()->getEntropyCodingSynchro()) 1221 #endif 1139 if (iNumSubstreams > 1) 1140 { 1222 1141 uiNumSubstreamsPerTile /= pcPic->getPicSym()->getNumTiles(); 1223 #else 1224 #if WPP_SIMPLIFICATION 1225 if (iNumSubstreams > 1) 1226 #else 1227 if (pcSlice->getPPS()->getEntropyCodingSynchro()) 1228 #endif 1229 { 1230 uiNumSubstreamsPerTile /= pcPic->getPicSym()->getNumTiles(); 1231 } 1232 #endif 1142 } 1233 1143 for ( UInt ui = 0 ; ui < iNumSubstreams; ui++ ) 1234 1144 { … … 1240 1150 m_pcEntropyCoder->encodeSliceFinish(); 1241 1151 pcSubstreamsOut[ui].write( 1, 1 ); // stop bit. 1242 #if TILES_WPP_ENTRY_POINT_SIGNALLING1243 1152 pcSubstreamsOut[ui].writeAlignZero(); 1244 #endif1245 1153 // Byte alignment is necessary between tiles when tiles are independent. 1246 1154 uiTotalCodedSize += pcSubstreamsOut[ui].getNumberOfWrittenBits(); … … 1269 1177 m_pcEntropyCoder->setEntropyCoder ( m_pcCavlcCoder, pcSlice ); 1270 1178 m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream); 1271 #if TILES_WPP_ENTRY_POINT_SIGNALLING1272 1179 if (m_pcCfg->getTileLocationInSliceHeaderFlag()==0) 1273 1180 { … … 1275 1182 } 1276 1183 m_pcEntropyCoder->encodeTilesWPPEntryPoint( pcSlice ); 1277 #else1278 m_pcEntropyCoder->encodeSliceHeaderSubstreamTable(pcSlice);1279 #endif1280 1184 // Substreams... 1281 1185 TComOutputBitstream *pcOut = pcBitstreamRedirect; … … 1309 1213 uiBoundingAddrEntropySlice = m_uiStoredStartCUAddrForEncodingEntropySlice[uiStartCUAddrEntropySliceIdx]; 1310 1214 uiNextCUAddr = min(uiBoundingAddrSlice, uiBoundingAddrEntropySlice); 1311 #if !REMOVE_TILE_DEPENDENCE1312 Bool bNextCUInNewSlice = (uiNextCUAddr >= uiRealEndAddress) || (uiNextCUAddr == m_uiStoredStartCUAddrForEncodingSlice[uiStartCUAddrSliceIdx]);1313 #endif1314 1215 // If current NALU is the first NALU of slice (containing slice header) and more NALUs exist (due to multiple entropy slices) then buffer it. 1315 1216 // If current NALU is the last NALU of slice and a NALU was buffered, then (a) Write current NALU (b) Update an write buffered NALU at approproate location in NALU list. 1316 1217 Bool bNALUAlignedWrittenToList = false; // used to ensure current NALU is not written more than once to the NALU list. 1317 #if !REMOVE_TILE_DEPENDENCE1318 if (pcSlice->getSPS()->getTileBoundaryIndependenceIdr() && !pcSlice->getSPS()->getTileBoundaryIndependenceIdr())1319 {1320 if (bNextCUInNewSlice)1321 {1322 if (!bEntropySlice) // there were no entropy slices1323 {1324 xWriteTileLocationToSliceHeader(nalu, pcBitstreamRedirect, pcSlice);1325 }1326 // (a) writing current NALU1327 writeRBSPTrailingBits(nalu.m_Bitstream);1328 accessUnit.push_back(new NALUnitEBSP(nalu));1329 bNALUAlignedWrittenToList = true;1330 1331 // (b) update and write buffered NALU1332 if (bEntropySlice) // if entropy slices existed in the slice then perform concatenation for the buffered nalu-bitstream and buffered payload bitstream1333 {1334 // Perform bitstream concatenation of slice header and partial slice payload1335 xWriteTileLocationToSliceHeader((*naluBuffered), pcBitstreamRedirect, pcSlice);1336 if (bIteratorAtListStart)1337 {1338 itLocationToPushSliceHeaderNALU = accessUnit.begin();1339 }1340 else1341 {1342 itLocationToPushSliceHeaderNALU++;1343 }1344 accessUnit.insert(itLocationToPushSliceHeaderNALU, (new NALUnitEBSP((*naluBuffered))) );1345 1346 // free buffered nalu1347 delete naluBuffered;1348 naluBuffered = NULL;1349 }1350 }1351 else // another entropy slice exists1352 {1353 // Is this start-of-slice NALU? i.e. the one containing slice header. If Yes, then buffer it.1354 if (!bEntropySlice)1355 {1356 // store a pointer to where NALU for slice header is to be written in NALU list1357 itLocationToPushSliceHeaderNALU = accessUnit.end();1358 if (accessUnit.begin() == accessUnit.end())1359 {1360 bIteratorAtListStart = true;1361 }1362 else1363 {1364 bIteratorAtListStart = false;1365 itLocationToPushSliceHeaderNALU--;1366 }1367 1368 // buffer nalu for later writing1369 #if H03881370 naluBuffered = new OutputNALUnit( pcSlice->getNalUnitType(), pcSlice->isReferenced() ? NAL_REF_IDC_PRIORITY_HIGHEST: NAL_REF_IDC_PRIORITY_LOWEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer() );1371 #else1372 naluBuffered = new OutputNALUnit(pcSlice->getNalUnitType(), pcSlice->isReferenced() ? NAL_REF_IDC_PRIORITY_HIGHEST: NAL_REF_IDC_PRIORITY_LOWEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth(), pcSlice->getTLayer(), true);1373 #endif1374 copyNaluData( (*naluBuffered), nalu );1375 1376 // perform byte-alignment to get appropriate bitstream length (used for explicit tile location signaling in slice header)1377 writeRBSPTrailingBits((*pcBitstreamRedirect));1378 bNALUAlignedWrittenToList = true; // This is not really a write to bitsream but buffered for later. The flag is set to prevent writing of current NALU to list.1379 uiOneBitstreamPerSliceLength += pcBitstreamRedirect->getNumberOfWrittenBits(); // length of bitstream after byte-alignment1380 }1381 else // write out entropy slice1382 {1383 writeRBSPTrailingBits(nalu.m_Bitstream);1384 accessUnit.push_back(new NALUnitEBSP(nalu));1385 bNALUAlignedWrittenToList = true;1386 uiOneBitstreamPerSliceLength += nalu.m_Bitstream.getNumberOfWrittenBits(); // length of bitstream after byte-alignment1387 }1388 }1389 }1390 else1391 {1392 #endif1393 1218 xWriteTileLocationToSliceHeader(nalu, pcBitstreamRedirect, pcSlice); 1394 1219 writeRBSPTrailingBits(nalu.m_Bitstream); … … 1396 1221 bNALUAlignedWrittenToList = true; 1397 1222 uiOneBitstreamPerSliceLength += nalu.m_Bitstream.getNumberOfWrittenBits(); // length of bitstream after byte-alignment 1398 #if !REMOVE_TILE_DEPENDENCE1399 }1400 #endif1401 1223 1402 1224 if (!bNALUAlignedWrittenToList) … … 1417 1239 TComAPS cAPS; 1418 1240 allocAPS(&cAPS, pcSlice->getSPS()); 1419 #if SAO_UNIT_INTERLEAVING1420 1241 cAPS.setSaoInterleavingFlag(m_pcCfg->getSaoInterleavingFlag()); 1421 #endif1422 1242 // set entropy coder for RD 1423 1243 m_pcEntropyCoder->setEntropyCoder ( m_pcCavlcCoder, pcSlice ); … … 1445 1265 1446 1266 // adaptive loop filter 1447 #if !LCU_SYNTAX_ALF1448 UInt64 uiDist, uiBits;1449 #endif1450 1267 if ( pcSlice->getSPS()->getUseALF()) 1451 1268 { … … 1453 1270 m_pcEntropyCoder->setBitstream ( m_pcBitCounter ); 1454 1271 m_pcAdaptiveLoopFilter->startALFEnc(pcPic, m_pcEntropyCoder ); 1455 #if LCU_SYNTAX_ALF1456 1272 AlfParamSet* pAlfEncParam = (pcSlice->getSPS()->getUseALFCoefInSlice())?( alfSliceParams ):( cAPS.getAlfParam()); 1457 1273 #if ALF_CHROMA_LAMBDA … … 1477 1293 #endif 1478 1294 1479 #else1480 ALFParam& cAlfParam = *( cAPS.getAlfParam());1481 1482 #if ALF_CHROMA_LAMBDA1483 #if HHI_INTERVIEW_SKIP1484 m_pcAdaptiveLoopFilter->ALFProcess( &cAlfParam, &vAlfCUCtrlParam, pcPic->getSlice(0)->getLambdaLuma(), pcPic->getSlice(0)->getLambdaChroma(), uiDist, uiBits, m_pcEncTop->getInterViewSkip());1485 #else1486 m_pcAdaptiveLoopFilter->ALFProcess( &cAlfParam, &vAlfCUCtrlParam, pcPic->getSlice(0)->getLambdaLuma(), pcPic->getSlice(0)->getLambdaChroma(), uiDist, uiBits);1487 #endif1488 #else1489 #if SAO_CHROMA_LAMBDA1490 #if HHI_INTERVIEW_SKIP1491 m_pcAdaptiveLoopFilter->ALFProcess( &cAlfParam, &vAlfCUCtrlParam, pcPic->getSlice(0)->getLambdaLuma(), uiDist, uiBits, m_pcEncTop->getInterViewSkip());1492 #else1493 m_pcAdaptiveLoopFilter->ALFProcess( &cAlfParam, &vAlfCUCtrlParam, pcPic->getSlice(0)->getLambdaLuma(), uiDist, uiBits);1494 #endif1495 #else1496 #if HHI_INTERVIEW_SKIP1497 m_pcAdaptiveLoopFilter->ALFProcess( &cAlfParam, &vAlfCUCtrlParam, pcPic->getSlice(0)->getLambdaLuma(), uiDist, uiBits, m_pcEncTop->getInterViewSkip());1498 #else1499 m_pcAdaptiveLoopFilter->ALFProcess( &cAlfParam, &vAlfCUCtrlParam, pcPic->getSlice(0)->getLambda(), uiDist, uiBits);1500 #endif1501 #endif1502 #endif1503 #endif1504 1295 m_pcAdaptiveLoopFilter->endALFEnc(); 1505 1296 … … 1518 1309 if (pcSlice->getSPS()->getUseALF()) 1519 1310 { 1520 #if LCU_SYNTAX_ALF1521 1311 pcPic->getSlice(s)->setAlfEnabledFlag( (pcSlice->getSPS()->getUseALFCoefInSlice())?(alfSliceParams[s].isEnabled[ALF_Y]):(cAPS.getAlfEnabled()) ); 1522 #else1523 pcPic->getSlice(s)->setAlfEnabledFlag((cAPS.getAlfParam()->alf_flag==1)?true:false);1524 #endif1525 1312 } 1526 1313 if (pcSlice->getSPS()->getUseSAO()) … … 1535 1322 case ENCODE_APS: 1536 1323 { 1537 #if NAL_REF_FLAG1538 1324 #if VIDYO_VPS_INTEGRATION | QC_MVHEVC_B0046 1539 1325 OutputNALUnit nalu(NAL_UNIT_APS, true, m_pcEncTop->getLayerId()); 1540 1326 #else 1541 1327 OutputNALUnit nalu(NAL_UNIT_APS, true, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth()); 1542 #endif1543 #else1544 OutputNALUnit nalu(NAL_UNIT_APS, NAL_REF_IDC_PRIORITY_HIGHEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());1545 1328 #endif 1546 1329 encodeAPS(&(vAPS[iCodedAPSIdx]), nalu.m_Bitstream, pcSliceForAPS); … … 1569 1352 if(pcSlice->getSPS()->getUseALF()) 1570 1353 { 1571 #if LCU_SYNTAX_ALF1572 1354 m_pcAdaptiveLoopFilter->uninitALFEnc(alfSliceParams, alfCUCtrlParam); 1573 #endif1574 1355 m_pcAdaptiveLoopFilter->destroyPicAlfInfo(); 1575 1356 } … … 1601 1382 digestStr = digestToString(sei_recon_picture_digest.digest); 1602 1383 1603 #if NAL_REF_FLAG1604 1384 #if VIDYO_VPS_INTEGRATION | QC_MVHEVC_B0046 1605 1385 OutputNALUnit nalu(NAL_UNIT_SEI, false, m_pcEncTop->getLayerId()); 1606 1386 #else 1607 1387 OutputNALUnit nalu(NAL_UNIT_SEI, false, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth()); 1608 #endif1609 #else1610 OutputNALUnit nalu(NAL_UNIT_SEI, NAL_REF_IDC_PRIORITY_LOWEST, m_pcEncTop->getViewId(), m_pcEncTop->getIsDepth());1611 1388 #endif 1612 1389 … … 1663 1440 { 1664 1441 pAPS->createAlfParam(); 1665 #if LCU_SYNTAX_ALF1666 1442 //alf Enabled flag in APS is false after pAPS->createAlfParam(); 1667 1443 if(!pSPS->getUseALFCoefInSlice()) … … 1670 1446 pAPS->getAlfParam()->createALFParam(); 1671 1447 } 1672 #else1673 m_pcAdaptiveLoopFilter->allocALFParam(pAPS->getAlfParam());1674 #endif1675 1448 } 1676 1449 } … … 1695 1468 if(pAPS->getAlfParam() != NULL) 1696 1469 { 1697 #if LCU_SYNTAX_ALF1698 1470 if(!pSPS->getUseALFCoefInSlice()) 1699 1471 { 1700 1472 pAPS->getAlfParam()->releaseALFParam(); 1701 1473 } 1702 #else1703 m_pcAdaptiveLoopFilter->freeALFParam(pAPS->getAlfParam());1704 #endif1705 1474 pAPS->destroyAlfParam(); 1706 1475 } … … 1728 1497 1729 1498 cAPS.setSaoEnabled(pcSlice->getSPS()->getUseSAO() ? (cAPS.getSaoParam()->bSaoFlag[0] ):(false)); 1730 #if LCU_SYNTAX_ALF1731 1499 cAPS.setAlfEnabled(pcSlice->getSPS()->getUseALF() ? (cAPS.getAlfParam()->isEnabled[0]):(false)); 1732 #else1733 cAPS.setAlfEnabled(pcSlice->getSPS()->getUseALF() ? (cAPS.getAlfParam()->alf_flag ==1):(false));1734 #endif1735 1500 cAPS.setLoopFilterOffsetInAPS(m_pcCfg->getLoopFilterOffsetInAPS()); 1736 1501 cAPS.setLoopFilterDisable(m_pcCfg->getLoopFilterDisable()); … … 1771 1536 m_pcEntropyCoder->encodeDFParams(pcAPS); 1772 1537 } 1773 #if SAO_UNIT_INTERLEAVING1774 1538 m_pcEntropyCoder->encodeSaoParam(pcAPS); 1775 #else1776 if(pcAPS->getSaoEnabled())1777 {1778 m_pcEntropyCoder->encodeSaoParam(pcAPS->getSaoParam());1779 }1780 #endif1781 #if LCU_SYNTAX_ALF1782 1539 m_pcEntropyCoder->encodeAPSAlfFlag( pcAPS->getAlfEnabled()?1:0); 1783 #endif1784 1540 if(pcAPS->getAlfEnabled()) 1785 1541 { … … 1796 1552 TComSlice* pcSlice = pcPic->getSlice(pcPic->getCurrSliceIdx()); 1797 1553 Bool bCalcDist = false; 1798 #if DBL_CONTROL1799 1554 m_pcLoopFilter->setCfg(pcSlice->getPPS()->getDeblockingFilterControlPresent(), pcSlice->getLoopFilterDisable(), m_pcCfg->getLoopFilterBetaOffset(), m_pcCfg->getLoopFilterTcOffset(), m_pcCfg->getLFCrossTileBoundaryFlag()); 1800 #else1801 m_pcLoopFilter->setCfg(pcSlice->getLoopFilterDisable(), m_pcCfg->getLoopFilterBetaOffset(), m_pcCfg->getLoopFilterTcOffset(), m_pcCfg->getLFCrossTileBoundaryFlag());1802 #endif1803 1555 m_pcLoopFilter->loopFilterPic( pcPic ); 1804 1556 … … 1817 1569 m_pcAdaptiveLoopFilter->createPicAlfInfo(pcPic); 1818 1570 1819 #if LCU_SYNTAX_ALF1820 1571 AlfParamSet* alfParamSet; 1821 1572 std::vector<AlfCUCtrlInfo>* alfCUCtrlParam = NULL; … … 1824 1575 alfParamSet->createALFParam(); 1825 1576 m_pcAdaptiveLoopFilter->initALFEnc(false, true, 1, alfParamSet, alfCUCtrlParam); 1826 #else1827 ALFParam cAlfParam;1828 m_pcAdaptiveLoopFilter->allocALFParam(&cAlfParam);1829 #endif1830 1577 m_pcAdaptiveLoopFilter->startALFEnc(pcPic, m_pcEntropyCoder); 1831 1578 1832 1579 1833 #if LCU_SYNTAX_ALF1834 1580 1835 1581 #if ALF_CHROMA_LAMBDA … … 1855 1601 #endif 1856 1602 1857 #else1858 #if ALF_CHROMA_LAMBDA1859 m_pcAdaptiveLoopFilter->ALFProcess(&cAlfParam, NULL, pcSlice->getLambdaLuma(), pcSlice->getLambdaChroma(), ruiDist, ruiBits, m_pcEncTop->getInterViewSkip());1860 #if HHI_INTERVIEW_SKIP1861 #else1862 m_pcAdaptiveLoopFilter->ALFProcess(&cAlfParam, NULL, pcSlice->getLambdaLuma(), pcSlice->getLambdaChroma(), ruiDist, ruiBits);1863 #endif1864 #else1865 #if SAO_CHROMA_LAMBDA1866 #if HHI_INTERVIEW_SKIP1867 m_pcAdaptiveLoopFilter->ALFProcess(&cAlfParam, NULL, pcSlice->getLambdaLuma(), ruiDist, ruiBits, m_pcEncTop->getInterViewSkip());1868 #else1869 m_pcAdaptiveLoopFilter->ALFProcess(&cAlfParam, NULL, pcSlice->getLambdaLuma(), ruiDist, ruiBits);1870 #endif1871 #else1872 #if HHI_INTERVIEW_SKIP1873 m_pcAdaptiveLoopFilter->ALFProcess(&cAlfParam, NULL, pcSlice->getLambda(), ruiDist, ruiBits, m_pcEncTop->getInterViewSkip());1874 #else1875 m_pcAdaptiveLoopFilter->ALFProcess(&cAlfParam, NULL, pcSlice->getLambda(), ruiDist, ruiBits);1876 #endif1877 #endif1878 1879 #endif1880 #endif1881 1603 m_pcAdaptiveLoopFilter->endALFEnc(); 1882 1604 1883 #if LCU_SYNTAX_ALF1884 1605 alfParamSet->releaseALFParam(); 1885 1606 delete alfParamSet; 1886 1607 delete alfCUCtrlParam; 1887 #else1888 m_pcAdaptiveLoopFilter->freeALFParam(&cAlfParam);1889 #endif1890 1608 m_pcAdaptiveLoopFilter->PCMLFDisableProcess(pcPic); 1891 1609 m_pcAdaptiveLoopFilter->destroyPicAlfInfo(); … … 2039 1757 { 2040 1758 case NAL_UNIT_CODED_SLICE: return "SLICE"; 2041 #if H0566_TLA2042 1759 #if !QC_REM_IDV_B0046 2043 1760 case NAL_UNIT_CODED_SLICE_IDV: return "IDV"; … … 2045 1762 case NAL_UNIT_CODED_SLICE_CRA: return "CRA"; 2046 1763 case NAL_UNIT_CODED_SLICE_TLA: return "TLA"; 2047 #else2048 case NAL_UNIT_CODED_SLICE_CDR: return "CDR";2049 #endif2050 1764 case NAL_UNIT_CODED_SLICE_IDR: return "IDR"; 2051 1765 case NAL_UNIT_SEI: return "SEI"; … … 2282 1996 else 2283 1997 { 2284 #if H0566_TLA2285 1998 return NAL_UNIT_CODED_SLICE_CRA; 2286 #else2287 return NAL_UNIT_CODED_SLICE_CDR;2288 #endif2289 1999 } 2290 2000 } … … 2318 2028 if( m_pcCfg->getDecodingRefreshType() == 1 ) 2319 2029 { 2320 #if H0566_TLA2321 2030 return NAL_UNIT_CODED_SLICE_CRA; 2322 #else2323 return NAL_UNIT_CODED_SLICE_CDR;2324 #endif2325 2031 } 2326 2032 else if( m_pcCfg->getDecodingRefreshType() == 2 ) … … 2384 2090 { 2385 2091 { 2386 #if !TILES_WPP_ENTRY_POINT_SIGNALLING2387 Int iTransmitTileLocationInSliceHeader = (rpcSlice->getTileLocationCount()==0 || m_pcCfg->getTileLocationInSliceHeaderFlag()==0) ? 0 : 1;2388 rNalu.m_Bitstream.write(iTransmitTileLocationInSliceHeader, 1); // write flag indicating whether tile location information communicated in slice header2389 2390 if (iTransmitTileLocationInSliceHeader)2391 {2392 rNalu.m_Bitstream.write(rpcSlice->getTileLocationCount()-1, 5); // write number of tiles2393 2394 Int *aiDiff;2395 aiDiff = new Int [rpcSlice->getTileLocationCount()];2396 2397 // Find largest number of bits required by Diff2398 Int iLastSize = 0, iDiffMax = 0, iDiffMin = 0;2399 for (UInt uiIdx=0; uiIdx<rpcSlice->getTileLocationCount(); uiIdx++)2400 {2401 Int iCurDiff, iCurSize;2402 if (uiIdx==0)2403 {2404 iCurDiff = rpcSlice->getTileLocation( uiIdx );2405 iLastSize = rpcSlice->getTileLocation( uiIdx );2406 }2407 else2408 {2409 iCurSize = rpcSlice->getTileLocation( uiIdx ) - rpcSlice->getTileLocation( uiIdx-1 );2410 iCurDiff = iCurSize - iLastSize;2411 iLastSize = iCurSize;2412 }2413 // Store Diff so it may be written to slice header later without re-calculating.2414 aiDiff[uiIdx] = iCurDiff;2415 2416 if (iCurDiff>iDiffMax)2417 {2418 iDiffMax = iCurDiff;2419 }2420 if (iCurDiff<iDiffMin)2421 {2422 iDiffMin = iCurDiff;2423 }2424 }2425 2426 Int iDiffMinAbs, iDiffMaxAbs;2427 iDiffMinAbs = (iDiffMin<0) ? (-iDiffMin) : iDiffMin;2428 iDiffMaxAbs = (iDiffMax<0) ? (-iDiffMax) : iDiffMax;2429 2430 Int iBitsUsedByDiff = 0, iDiffAbsLargest;2431 iDiffAbsLargest = (iDiffMinAbs < iDiffMaxAbs) ? iDiffMaxAbs : iDiffMinAbs;2432 while (1)2433 {2434 if (iDiffAbsLargest >= (1 << iBitsUsedByDiff) )2435 {2436 iBitsUsedByDiff++;2437 }2438 else2439 {2440 break;2441 }2442 }2443 iBitsUsedByDiff++;2444 2445 if (iBitsUsedByDiff > 32)2446 {2447 printf("\nDiff magnitude uses more than 32-bits");2448 assert ( 0 );2449 exit ( 0 ); // trying to catch any problems with using fixed bits for Diff information2450 }2451 2452 rNalu.m_Bitstream.write( iBitsUsedByDiff-1, 5 ); // write number of bits used by Diff2453 2454 // Write diff to slice header (rNalu)2455 for (UInt uiIdx=0; uiIdx<rpcSlice->getTileLocationCount(); uiIdx++)2456 {2457 Int iCurDiff = aiDiff[uiIdx];2458 2459 // write sign of diff2460 if (uiIdx!=0)2461 {2462 if (iCurDiff<0)2463 {2464 rNalu.m_Bitstream.write(1, 1);2465 }2466 else2467 {2468 rNalu.m_Bitstream.write(0, 1);2469 }2470 }2471 2472 // write abs value of diff2473 Int iAbsDiff = (iCurDiff<0) ? (-iCurDiff) : iCurDiff;2474 if (iAbsDiff > ((((UInt64)1)<<32)-1))2475 {2476 printf("\niAbsDiff exceeds 32-bit limit");2477 exit(0);2478 }2479 rNalu.m_Bitstream.write( iAbsDiff, iBitsUsedByDiff-1 );2480 }2481 2482 delete [] aiDiff;2483 }2484 #endif2485 2092 } 2486 2093 -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.cpp
r56 r294 100 100 * \param *psQTPart, iPartIdx, dLambda 101 101 */ 102 #if SAO_UNIT_INTERLEAVING103 102 Void TEncSampleAdaptiveOffset::rdoSaoOnePart(SAOQTPart *psQTPart, Int iPartIdx, Double dLambda) 104 103 { … … 340 339 } 341 340 342 #else343 Void TEncSampleAdaptiveOffset::rdoSaoOnePart(SAOQTPart *psQTPart, Int iPartIdx, Double dLambda)344 {345 Int iTypeIdx;346 Int iNumTotalType = MAX_NUM_SAO_TYPE;347 SAOQTPart* pOnePart = &(psQTPart[iPartIdx]);348 349 Int64 iEstDist;350 Int64 iOffsetOrg;351 Int64 iOffset;352 Int64 iCount;353 Int iClassIdx;354 Int uiShift = g_uiBitIncrement << 1;355 356 UInt uiDepth = pOnePart->PartLevel;357 358 m_iDistOrg [iPartIdx] = 0;359 360 for (iTypeIdx=-1; iTypeIdx<iNumTotalType; iTypeIdx++)361 {362 if( m_bUseSBACRD )363 {364 m_pcRDGoOnSbacCoder->load(m_pppcRDSbacCoder[uiDepth][CI_CURR_BEST]);365 m_pcRDGoOnSbacCoder->resetBits();366 }367 else368 {369 m_pcEntropyCoder->resetEntropy();370 m_pcEntropyCoder->resetBits();371 }372 373 iEstDist = 0;374 375 m_pcEntropyCoder->m_pcEntropyCoderIf->codeSaoUvlc(iTypeIdx+1);376 377 if (iTypeIdx>=0)378 {379 380 for(iClassIdx=1; iClassIdx < m_iNumClass[iTypeIdx]+1; iClassIdx++)381 {382 if(m_iCount [iPartIdx][iTypeIdx][iClassIdx])383 {384 #if FULL_NBIT385 m_iOffset[iPartIdx][iTypeIdx][iClassIdx] = (Int64) xRoundIbdi((Double)(m_iOffsetOrg[iPartIdx][iTypeIdx][iClassIdx]<<g_uiBitDepth-8) / (Double)(m_iCount [iPartIdx][iTypeIdx][iClassIdx]<<m_uiSaoBitIncrease));386 #else387 m_iOffset[iPartIdx][iTypeIdx][iClassIdx] = (Int64) xRoundIbdi((Double)(m_iOffsetOrg[iPartIdx][iTypeIdx][iClassIdx]<<g_uiBitIncrement) / (Double)(m_iCount [iPartIdx][iTypeIdx][iClassIdx]<<m_uiSaoBitIncrease));388 #endif389 m_iOffset[iPartIdx][iTypeIdx][iClassIdx] = Clip3(-m_iOffsetTh, m_iOffsetTh-1, (Int)m_iOffset[iPartIdx][iTypeIdx][iClassIdx]);390 {391 Int64 iterOffset, tempOffset;392 Int64 tempDist, tempRate;393 Double tempCost, tempMinCost;394 UInt codeLength, tempValue;395 396 iterOffset = m_iOffset[iPartIdx][iTypeIdx][iClassIdx];397 m_iOffset[iPartIdx][iTypeIdx][iClassIdx] = 0;398 tempMinCost = dLambda; // Assuming sending quantized value 0 results in zero offset and sending the value zero needs 1 bit. entropy coder can be used to measure the exact rate here.399 400 while (iterOffset != 0)401 {402 // Calculate the bits required for signalling the offset403 codeLength = 1;404 tempValue = (UInt)((iterOffset <= 0) ? ( (-iterOffset<<1) + 1 ) : (iterOffset<<1));405 while( 1 != tempValue )406 {407 tempValue >>= 1;408 codeLength += 2;409 }410 tempRate = (codeLength >> 1) + ((codeLength+1) >> 1);411 412 // Do the dequntization before distorion calculation413 tempOffset = iterOffset << m_uiSaoBitIncrease;414 tempDist = (( m_iCount [iPartIdx][iTypeIdx][iClassIdx]*tempOffset*tempOffset-m_iOffsetOrg[iPartIdx][iTypeIdx][iClassIdx]*tempOffset*2 ) >> uiShift);415 416 tempCost = ((Double)tempDist + dLambda * (Double) tempRate);417 if(tempCost < tempMinCost)418 {419 tempMinCost = tempCost;420 m_iOffset[iPartIdx][iTypeIdx][iClassIdx] = iterOffset;421 }422 iterOffset = (iterOffset > 0) ? (iterOffset-1):(iterOffset+1);423 }424 }425 }426 else427 {428 m_iOffsetOrg[iPartIdx][iTypeIdx][iClassIdx] = 0;429 m_iOffset[iPartIdx][iTypeIdx][iClassIdx] = 0;430 }431 432 iCount = m_iCount [iPartIdx][iTypeIdx][iClassIdx];433 iOffset = m_iOffset[iPartIdx][iTypeIdx][iClassIdx] << m_uiSaoBitIncrease;434 iOffsetOrg = m_iOffsetOrg[iPartIdx][iTypeIdx][iClassIdx];435 iEstDist += (( iCount*iOffset*iOffset-iOffsetOrg*iOffset*2 ) >> uiShift);436 m_pcEntropyCoder->m_pcEntropyCoderIf->codeSaoSvlc((Int)m_iOffset[iPartIdx][iTypeIdx][iClassIdx]);437 }438 m_iDist[iPartIdx][iTypeIdx] = iEstDist;439 m_iRate[iPartIdx][iTypeIdx] = m_pcEntropyCoder->getNumberOfWrittenBits();440 441 m_dCost[iPartIdx][iTypeIdx] = (Double)((Double)m_iDist[iPartIdx][iTypeIdx] + dLambda * (Double) m_iRate[iPartIdx][iTypeIdx]);442 443 if(m_dCost[iPartIdx][iTypeIdx] < m_dCostPartBest[iPartIdx])444 {445 m_iDistOrg [iPartIdx] = 0;446 m_dCostPartBest[iPartIdx] = m_dCost[iPartIdx][iTypeIdx];447 m_iTypePartBest[iPartIdx] = iTypeIdx;448 if( m_bUseSBACRD )449 m_pcRDGoOnSbacCoder->store( m_pppcRDSbacCoder[pOnePart->PartLevel][CI_TEMP_BEST] );450 }451 }452 else453 {454 if(m_iDistOrg[iPartIdx] < m_dCostPartBest[iPartIdx] )455 {456 m_dCostPartBest[iPartIdx] = (Double) m_iDistOrg[iPartIdx] + m_pcEntropyCoder->getNumberOfWrittenBits()*dLambda ;457 m_iTypePartBest[iPartIdx] = -1;458 if( m_bUseSBACRD )459 m_pcRDGoOnSbacCoder->store( m_pppcRDSbacCoder[pOnePart->PartLevel][CI_TEMP_BEST] );460 }461 }462 }463 464 pOnePart->bProcessed = true;465 pOnePart->bSplit = false;466 pOnePart->iMinDist = m_iTypePartBest[iPartIdx] >= 0 ? m_iDist[iPartIdx][m_iTypePartBest[iPartIdx]] : m_iDistOrg[iPartIdx];467 pOnePart->iMinRate = (Int) (m_iTypePartBest[iPartIdx] >= 0 ? m_iRate[iPartIdx][m_iTypePartBest[iPartIdx]] : 0);468 pOnePart->dMinCost = pOnePart->iMinDist + dLambda * pOnePart->iMinRate;469 pOnePart->iBestType = m_iTypePartBest[iPartIdx];470 if (pOnePart->iBestType != -1)471 {472 pOnePart->bEnableFlag = 1;473 pOnePart->iLength = m_iNumClass[pOnePart->iBestType];474 for (Int i=0; i<pOnePart->iLength ; i++)475 pOnePart->iOffset[i] = (Int) m_iOffset[iPartIdx][pOnePart->iBestType][i+1];476 }477 else478 {479 pOnePart->bEnableFlag = 0;480 pOnePart->iLength = 0;481 }482 }483 484 #endif485 341 /** Run partition tree disable 486 342 */ … … 488 344 { 489 345 SAOQTPart* pOnePart= &(psQTPart[iPartIdx]); 490 #if !SAO_UNIT_INTERLEAVING491 pOnePart->bEnableFlag = false;492 #endif493 346 pOnePart->bSplit = false; 494 347 pOnePart->iLength = 0; … … 556 409 dCostFinal = dCostSplit; 557 410 pOnePart->bSplit = true; 558 #if !SAO_UNIT_INTERLEAVING559 pOnePart->bEnableFlag = false;560 #endif561 411 pOnePart->iLength = 0; 562 412 pOnePart->iBestType = -1; … … 810 660 Int x, y; 811 661 812 #if SAO_UNIT_INTERLEAVING813 662 //--------- Band offset-----------// 814 663 stats = ppStats[SAO_BO]; … … 830 679 pRec += stride; 831 680 } 832 #else833 //--------- Band offset 0-----------//834 stats = ppStats[SAO_BO_0];835 count = ppCount[SAO_BO_0];836 pOrg = pOrgStart;837 pRec = pRecStart;838 for (y=0; y< height; y++)839 {840 for (x=0; x< width; x++)841 {842 classIdx = m_ppLumaTableBo0[pRec[x]];843 if (classIdx)844 {845 stats[classIdx] += (pOrg[x] - pRec[x]);846 count[classIdx] ++;847 }848 }849 pOrg += stride;850 pRec += stride;851 }852 853 //--------- Band offset 1-----------//854 stats = ppStats[SAO_BO_1];855 count = ppCount[SAO_BO_1];856 pOrg = pOrgStart;857 pRec = pRecStart;858 859 for (y=0; y< height; y++)860 {861 for (x=0; x< width; x++)862 {863 classIdx = m_ppLumaTableBo1[pRec[x]];864 if (classIdx)865 {866 stats[classIdx] += (pOrg[x] - pRec[x]);867 count[classIdx] ++;868 }869 }870 pOrg += stride;871 pRec += stride;872 }873 #endif874 681 //---------- Edge offset 0--------------// 875 682 stats = ppStats[SAO_EO_0]; … … 1166 973 1167 974 Int iIsChroma = (iYCbCr!=0)? 1:0; 1168 #if SAO_UNIT_INTERLEAVING1169 975 Int numSkipLine = iIsChroma? 2:4; 1170 976 if (m_saoInterleavingFlag == 0) … … 1172 978 numSkipLine = 0; 1173 979 } 1174 #endif1175 980 1176 981 iPicWidthTmp = m_iPicWidth >> iIsChroma; … … 1194 999 #endif 1195 1000 { 1196 #if SAO_UNIT_INTERLEAVING1197 1001 iStats = m_iOffsetOrg[iPartIdx][SAO_BO]; 1198 1002 iCount = m_iCount [iPartIdx][SAO_BO]; 1199 #else1200 iStats = m_iOffsetOrg[iPartIdx][SAO_BO_0];1201 iCount = m_iCount [iPartIdx][SAO_BO_0];1202 #endif1203 1003 1204 1004 pOrg = getPicYuvAddr(m_pcPic->getPicYuvOrg(), iYCbCr, iAddr); 1205 1005 pRec = getPicYuvAddr(m_pcPic->getPicYuvRec(), iYCbCr, iAddr); 1206 1006 1207 #if SAO_UNIT_INTERLEAVING1208 1007 iEndY = (uiBPelY == iPicHeightTmp) ? iLcuHeight : iLcuHeight-numSkipLine; 1209 1008 for (y=0; y<iEndY; y++) 1210 #else1211 for (y=0; y<iLcuHeight; y++)1212 #endif1213 1009 { 1214 1010 for (x=0; x<iLcuWidth; x++) 1215 1011 { 1216 #if SAO_UNIT_INTERLEAVING1217 1012 iClassIdx = m_lumaTableBo[pRec[x]]; 1218 #else1219 iClassIdx = m_ppLumaTableBo0[pRec[x]];1220 #endif1221 1013 if (iClassIdx) 1222 1014 { … … 1229 1021 } 1230 1022 1231 #if !SAO_UNIT_INTERLEAVING1232 iStats = m_iOffsetOrg[iPartIdx][SAO_BO_1];1233 iCount = m_iCount [iPartIdx][SAO_BO_1];1234 1235 pOrg = getPicYuvAddr(m_pcPic->getPicYuvOrg(), iYCbCr, iAddr);1236 pRec = getPicYuvAddr(m_pcPic->getPicYuvRec(), iYCbCr, iAddr);1237 1238 for (y=0; y<iLcuHeight; y++)1239 {1240 for (x=0; x<iLcuWidth; x++)1241 {1242 iClassIdx = m_ppLumaTableBo1[pRec[x]];1243 if (iClassIdx)1244 {1245 iStats[iClassIdx] += (pOrg[x] - pRec[x]);1246 iCount[iClassIdx] ++;1247 }1248 }1249 pOrg += iStride;1250 pRec += iStride;1251 }1252 #endif1253 1023 } 1254 1024 Int iSignLeft; … … 1275 1045 iStartX = (uiLPelX == 0) ? 1 : 0; 1276 1046 iEndX = (uiRPelX == iPicWidthTmp) ? iLcuWidth-1 : iLcuWidth; 1277 #if SAO_UNIT_INTERLEAVING1278 1047 for (y=0; y<iLcuHeight-numSkipLine; y++) 1279 #else1280 for (y=0; y<iLcuHeight; y++)1281 #endif1282 1048 { 1283 1049 iSignLeft = xSign(pRec[iStartX] - pRec[iStartX-1]); … … 1305 1071 1306 1072 iStartY = (uiTPelY == 0) ? 1 : 0; 1307 #if SAO_UNIT_INTERLEAVING1308 1073 iEndY = (uiBPelY == iPicHeightTmp) ? iLcuHeight-1 : iLcuHeight-numSkipLine; 1309 #else1310 iEndY = (uiBPelY == iPicHeightTmp) ? iLcuHeight-1 : iLcuHeight;1311 #endif1312 1074 if (uiTPelY == 0) 1313 1075 { … … 1347 1109 1348 1110 iStartY = (uiTPelY == 0) ? 1 : 0; 1349 #if SAO_UNIT_INTERLEAVING1350 1111 iEndY = (uiBPelY == iPicHeightTmp) ? iLcuHeight-1 : iLcuHeight-numSkipLine; 1351 #else1352 iEndY = (uiBPelY == iPicHeightTmp) ? iLcuHeight-1 : iLcuHeight;1353 #endif1354 1112 if (uiTPelY == 0) 1355 1113 { … … 1394 1152 1395 1153 iStartY = (uiTPelY == 0) ? 1 : 0; 1396 #if SAO_UNIT_INTERLEAVING1397 1154 iEndY = (uiBPelY == iPicHeightTmp) ? iLcuHeight-1 : iLcuHeight-numSkipLine; 1398 #else1399 iEndY = (uiBPelY == iPicHeightTmp) ? iLcuHeight-1 : iLcuHeight;1400 #endif1401 1155 if (iStartY == 1) 1402 1156 { … … 1486 1240 for (iTypeIdx=0; iTypeIdx<iNumTotalType; iTypeIdx++) 1487 1241 { 1488 #if SAO_UNIT_INTERLEAVING1489 1242 for (iClassIdx=0; iClassIdx< (iTypeIdx < SAO_BO ? m_iNumClass[iTypeIdx] : SAO_MAX_BO_CLASSES) +1; iClassIdx++) 1490 #else1491 for (iClassIdx=0; iClassIdx<m_iNumClass[iTypeIdx]+1; iClassIdx++)1492 #endif1493 1243 { 1494 1244 m_iOffsetOrg[iPartIdx][iTypeIdx][iClassIdx] += m_iOffsetOrg[iDownPartIdx][iTypeIdx][iClassIdx]; … … 1574 1324 Double dCostFinal = 0; 1575 1325 1576 #if !SAO_UNIT_INTERLEAVING 1577 Int iCb = 1; 1578 Int iCr = 2; 1579 Double dCostFinalCb = 0; 1580 Double dCostFinalCr = 0; 1581 #endif 1582 1583 #if SAO_UNIT_INTERLEAVING 1326 1584 1327 if ( m_saoInterleavingFlag) 1585 1328 { … … 1616 1359 } 1617 1360 } 1618 #else 1619 getSaoStats(pcSaoParam->psSaoPart[iY], iY); 1620 runQuadTreeDecision(pcSaoParam->psSaoPart[iY], 0, dCostFinal, m_uiMaxSplitLevel, m_dLambdaLuma); 1621 pcSaoParam->bSaoFlag[iY] = dCostFinal < m_iDistOrg[0] ? 1:0; 1622 if(pcSaoParam->bSaoFlag[iY]) 1623 { 1624 processSaoQuadTree(pcSaoParam->psSaoPart[iY], 0, 0); 1625 1626 resetStats(); 1627 getSaoStats(pcSaoParam->psSaoPart[iCb], iCb); 1628 runQuadTreeDecision(pcSaoParam->psSaoPart[iCb], 0, dCostFinalCb, m_uiMaxSplitLevel, m_dLambdaChroma); 1629 pcSaoParam->bSaoFlag[iCb] = dCostFinalCb < 0 ? 1:0; 1630 if (pcSaoParam->bSaoFlag[iCb]) 1631 { 1632 processSaoQuadTree(pcSaoParam->psSaoPart[iCb], 0, iCb); 1633 } 1634 1635 resetStats(); 1636 getSaoStats(pcSaoParam->psSaoPart[iCr], iCr); 1637 runQuadTreeDecision(pcSaoParam->psSaoPart[iCr], 0, dCostFinalCr, m_uiMaxSplitLevel, m_dLambdaChroma); 1638 pcSaoParam->bSaoFlag[iCr] = dCostFinalCr < 0 ? 1:0; 1639 if (pcSaoParam->bSaoFlag[iCr]) 1640 { 1641 processSaoQuadTree(pcSaoParam->psSaoPart[iCr], 0, iCr); 1642 } 1643 } 1644 #endif 1645 } 1646 #if SAO_UNIT_INTERLEAVING 1361 } 1647 1362 /** Check merge SAO unit 1648 1363 * \param saoUnitCurr current SAO unit … … 2260 1975 } 2261 1976 2262 #endif2263 1977 2264 1978 //! \} -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncSampleAdaptiveOffset.h
r56 r294 101 101 Void destroyEncBuffer(); 102 102 Void createEncBuffer(); 103 #if SAO_UNIT_INTERLEAVING104 103 Void assignSaoUnitSyntax(SaoLcuParam* saoLcuParam, SAOQTPart* saoPart, Bool &oneUnitFlag, Int yCbCr); 105 104 Void checkMerge(SaoLcuParam * lcuParamCurr,SaoLcuParam * lcuParamCheck, Int dir); … … 108 107 Void setMaxNumOffsetsPerPic(Int iVal) {m_maxNumOffsetsPerPic = iVal; } 109 108 Int getMaxNumOffsetsPerPic() {return m_maxNumOffsetsPerPic; } 110 #endif111 109 }; 112 110 -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncSbac.cpp
r292 r294 95 95 , m_cALFUvlcSCModel ( 1, 1, NUM_ALF_UVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 96 96 , m_cALFSvlcSCModel ( 1, 1, NUM_ALF_SVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 97 #if AMP_CTX98 97 , m_cCUAMPSCModel ( 1, 1, NUM_CU_AMP_CTX , m_contextModels + m_numContextModels, m_numContextModels) 99 #else100 , m_cCUXPosiSCModel ( 1, 1, NUM_CU_X_POS_CTX , m_contextModels + m_numContextModels, m_numContextModels)101 , m_cCUYPosiSCModel ( 1, 1, NUM_CU_Y_POS_CTX , m_contextModels + m_numContextModels, m_numContextModels)102 #endif103 98 , m_cSaoFlagSCModel ( 1, 1, NUM_SAO_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 104 99 , m_cSaoUvlcSCModel ( 1, 1, NUM_SAO_UVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 105 100 , m_cSaoSvlcSCModel ( 1, 1, NUM_SAO_SVLC_CTX , m_contextModels + m_numContextModels, m_numContextModels) 106 #if SAO_UNIT_INTERLEAVING107 101 , m_cSaoMergeLeftSCModel ( 1, 1, NUM_SAO_MERGE_LEFT_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 108 102 , m_cSaoMergeUpSCModel ( 1, 1, NUM_SAO_MERGE_UP_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) 109 103 , m_cSaoTypeIdxSCModel ( 1, 1, NUM_SAO_TYPE_IDX_CTX , m_contextModels + m_numContextModels, m_numContextModels) 110 #endif111 104 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 112 105 , m_cDmmFlagSCModel ( 1, 1, NUM_DMM_FLAG_CTX , m_contextModels + m_numContextModels, m_numContextModels) … … 166 159 #endif 167 160 m_cCUPartSizeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_PART_SIZE ); 168 #if AMP_CTX169 161 m_cCUAMPSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_AMP_POS ); 170 #else171 m_cCUXPosiSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_X_POS );172 m_cCUYPosiSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_Y_POS );173 #endif174 162 m_cCUPredModeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_PRED_MODE ); 175 163 m_cCUIntraPredSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTRA_PRED_MODE ); … … 195 183 m_cSaoUvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_UVLC ); 196 184 m_cSaoSvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_SVLC ); 197 #if SAO_UNIT_INTERLEAVING198 185 m_cSaoMergeLeftSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_LEFT_FLAG ); 199 186 m_cSaoMergeUpSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_UP_FLAG ); 200 187 m_cSaoTypeIdxSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX ); 201 #endif202 188 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 203 189 m_cDmmFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG ); … … 259 245 #endif 260 246 curCost += m_cCUPartSizeSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_PART_SIZE ); 261 #if AMP_CTX262 247 curCost += m_cCUAMPSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_CU_AMP_POS ); 263 #else264 curCost += m_cCUXPosiSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_CU_X_POS );265 curCost += m_cCUYPosiSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_CU_Y_POS );266 #endif267 248 curCost += m_cCUPredModeSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_PRED_MODE ); 268 249 curCost += m_cCUIntraPredSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_INTRA_PRED_MODE ); … … 288 269 curCost += m_cSaoUvlcSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_UVLC ); 289 270 curCost += m_cSaoSvlcSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_SVLC ); 290 #if SAO_UNIT_INTERLEAVING291 271 curCost += m_cSaoMergeLeftSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_MERGE_LEFT_FLAG ); 292 272 curCost += m_cSaoMergeUpSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_MERGE_UP_FLAG ); 293 273 curCost += m_cSaoTypeIdxSCModel.calcCost ( curSliceType, qp, (UChar*)INIT_SAO_TYPE_IDX ); 294 #endif295 274 296 275 if (curCost < bestCost) … … 333 312 #endif 334 313 m_cCUPartSizeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_PART_SIZE ); 335 #if AMP_CTX336 314 m_cCUAMPSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_AMP_POS ); 337 #else338 m_cCUXPosiSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_X_POS );339 m_cCUYPosiSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_CU_Y_POS );340 #endif341 315 m_cCUPredModeSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_PRED_MODE ); 342 316 m_cCUIntraPredSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTRA_PRED_MODE ); … … 362 336 m_cSaoUvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_UVLC ); 363 337 m_cSaoSvlcSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_SVLC ); 364 #if SAO_UNIT_INTERLEAVING365 338 m_cSaoMergeLeftSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_LEFT_FLAG ); 366 339 m_cSaoMergeUpSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_MERGE_UP_FLAG ); 367 340 m_cSaoTypeIdxSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_SAO_TYPE_IDX ); 368 #endif369 341 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX 370 342 m_cDmmFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_DMM_FLAG ); … … 426 398 } 427 399 428 #if TILES_WPP_ENTRY_POINT_SIGNALLING429 400 Void TEncSbac::codeTilesWPPEntryPoint( TComSlice* pSlice ) 430 401 { … … 432 403 return; 433 404 } 434 #else435 Void TEncSbac::codeSliceHeaderSubstreamTable( TComSlice* pcSlice )436 {437 assert (0);438 }439 #endif440 405 441 406 Void TEncSbac::codeTerminatingBit( UInt uilsLast ) … … 449 414 } 450 415 451 #if OL_FLUSH452 416 Void TEncSbac::codeFlush() 453 417 { … … 459 423 m_pcBinIf->start(); 460 424 } 461 #endif462 425 463 426 Void TEncSbac::xWriteUnarySymbol( UInt uiSymbol, ContextModel* pcSCModel, Int iOffset ) … … 557 520 m_pcBinIf->encodeBinsEP( ( binValues << ruiGoRiceParam ) + uiCodeWord - ( uiQuotient << ruiGoRiceParam ), numBins + ruiGoRiceParam ); 558 521 559 #if EIGHT_BITS_RICE_CODE560 522 ruiGoRiceParam = g_aauiGoRiceUpdate[ ruiGoRiceParam ][ min<UInt>( uiSymbol, 23 ) ]; 561 #else562 ruiGoRiceParam = g_aauiGoRiceUpdate[ ruiGoRiceParam ][ min<UInt>( uiSymbol, 15 ) ];563 #endif564 523 565 524 if( bExGolomb ) … … 669 628 if (eSize == SIZE_2NxN) 670 629 { 671 #if AMP_CTX672 630 m_pcBinIf->encodeBin(1, m_cCUAMPSCModel.get( 0, 0, 0 )); 673 #else674 m_pcBinIf->encodeBin(1, m_cCUYPosiSCModel.get( 0, 0, 0 ));675 #endif676 631 } 677 632 else 678 633 { 679 #if AMP_CTX680 634 m_pcBinIf->encodeBin(0, m_cCUAMPSCModel.get( 0, 0, 0 )); 681 635 m_pcBinIf->encodeBinEP((eSize == SIZE_2NxnU? 0: 1)); 682 #else683 m_pcBinIf->encodeBin(0, m_cCUYPosiSCModel.get( 0, 0, 0 ));684 m_pcBinIf->encodeBin((eSize == SIZE_2NxnU? 0: 1), m_cCUYPosiSCModel.get( 0, 0, 1 ));685 #endif686 636 } 687 637 } … … 702 652 if (eSize == SIZE_Nx2N) 703 653 { 704 #if AMP_CTX705 654 m_pcBinIf->encodeBin(1, m_cCUAMPSCModel.get( 0, 0, 0 )); 706 #else707 m_pcBinIf->encodeBin(1, m_cCUXPosiSCModel.get( 0, 0, 0 ));708 #endif709 655 } 710 656 else 711 657 { 712 #if AMP_CTX713 658 m_pcBinIf->encodeBin(0, m_cCUAMPSCModel.get( 0, 0, 0 )); 714 659 m_pcBinIf->encodeBinEP((eSize == SIZE_nLx2N? 0: 1)); 715 #else716 m_pcBinIf->encodeBin(0, m_cCUXPosiSCModel.get( 0, 0, 0 ));717 m_pcBinIf->encodeBin((eSize == SIZE_nLx2N? 0: 1), m_cCUXPosiSCModel.get( 0, 0, 1 ));718 #endif719 660 } 720 661 } … … 851 792 { 852 793 UInt uiNumCand = MRG_MAX_NUM_CANDS; 853 #if !MRG_IDX_CTX_RED854 UInt auiCtx[4] = { 0, 1, 2, 3 };855 #endif856 794 UInt uiUnaryIdx = pcCU->getMergeIndex( uiAbsPartIdx ); 857 795 uiNumCand = pcCU->getSlice()->getMaxNumMergeCand(); … … 876 814 { 877 815 const UInt uiSymbol = ui == uiUnaryIdx ? 0 : 1; 878 #if MRG_IDX_CTX_RED879 816 if ( ui==0 ) 880 817 { … … 885 822 m_pcBinIf->encodeBinEP( uiSymbol ); 886 823 } 887 #else888 m_pcBinIf->encodeBin( uiSymbol, m_cCUMergeIdxExtSCModel.get( 0, 0, auiCtx[ui] ) );889 #endif890 824 if( uiSymbol == 0 ) 891 825 { … … 1135 1069 { 1136 1070 #endif 1137 #if !LOGI_INTRA_NAME_3MPM1138 Int iIntraIdx = pcCU->getIntraSizeIdx(uiAbsPartIdx);1139 #endif1140 1071 #if LGE_EDGE_INTRA_A0070 1141 1072 Bool bCodeEdgeIntra = false; … … 1148 1079 #endif 1149 1080 1150 #if LOGI_INTRA_NAME_3MPM1151 1081 Int uiPreds[3] = {-1, -1, -1}; 1152 #else1153 Int uiPreds[2] = {-1, -1};1154 #endif1155 1082 Int uiPredNum = pcCU->getIntraDirLumaPredictor(uiAbsPartIdx, uiPreds); 1156 1083 … … 1168 1095 { 1169 1096 m_pcBinIf->encodeBin( 1, m_cCUIntraPredSCModel.get( 0, 0, 0 ) ); 1170 #if LOGI_INTRA_NAME_3MPM1171 1097 m_pcBinIf->encodeBinEP( uiPredIdx ? 1 : 0 ); 1172 1098 if (uiPredIdx) … … 1174 1100 m_pcBinIf->encodeBinEP( uiPredIdx-1 ); 1175 1101 } 1176 #else1177 m_pcBinIf->encodeBinEP( uiPredIdx );1178 #endif1179 1102 } 1180 1103 else … … 1182 1105 m_pcBinIf->encodeBin( 0, m_cCUIntraPredSCModel.get( 0, 0, 0 ) ); 1183 1106 1184 #if LOGI_INTRA_NAME_3MPM1185 1107 if (uiPreds[0] > uiPreds[1]) 1186 1108 { … … 1195 1117 std::swap(uiPreds[1], uiPreds[2]); 1196 1118 } 1197 #endif1198 1119 1199 1120 for(Int i = (uiPredNum - 1); i >= 0; i--) … … 1202 1123 } 1203 1124 1204 #if LOGI_INTRA_NAME_3MPM1205 1125 m_pcBinIf->encodeBinsEP( uiDir, 5 ); 1206 1126 #if LGE_EDGE_INTRA_A0070 … … 1208 1128 if (uiDir == 31) m_pcBinIf->encodeBinsEP(0,1); 1209 1129 #endif 1210 #else1211 if ( uiDir < 31 )1212 {1213 m_pcBinIf->encodeBinsEP( uiDir, g_aucIntraModeBitsAng[ iIntraIdx ] - 1 );1214 }1215 else1216 {1217 m_pcBinIf->encodeBinsEP( 31, 5 );1218 m_pcBinIf->encodeBinEP( uiDir - 31 );1219 }1220 #endif1221 1130 } 1222 1131 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX … … 1258 1167 m_pcBinIf->encodeBin( 1, m_cCUChromaPredSCModel.get( 0, 0, 1 )); 1259 1168 } 1260 #if CHROMA_MODE_CODING1261 1169 m_pcBinIf->encodeBinsEP( uiIntraDirChroma, 2 ); 1262 #else1263 xWriteUnaryMaxSymbol( uiIntraDirChroma, m_cCUChromaPredSCModel.get( 0, 0 ) + 1, 0, 3 );1264 #endif1265 1170 } 1266 1171 return; … … 1319 1224 Void TEncSbac::codeMvd( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList ) 1320 1225 { 1321 #if H0111_MVD_L1_ZERO1322 1226 if(pcCU->getSlice()->getMvdL1ZeroFlag() && eRefList == REF_PIC_LIST_1 && pcCU->getInterDir(uiAbsPartIdx)==3) 1323 1227 { 1324 1228 return; 1325 1229 } 1326 #endif1327 1230 1328 1231 const TComCUMvField* pcCUMvField = pcCU->getCUMvField( eRefList ); … … 1377 1280 Int iDQp = pcCU->getQP( uiAbsPartIdx ) - pcCU->getRefQP( uiAbsPartIdx ); 1378 1281 1379 #if H0736_AVC_STYLE_QP_RANGE1380 1282 Int qpBdOffsetY = pcCU->getSlice()->getSPS()->getQpBDOffsetY(); 1381 1283 iDQp = (iDQp + 78 + qpBdOffsetY + (qpBdOffsetY/2)) % (52 + qpBdOffsetY) - 26 - (qpBdOffsetY/2); 1382 #else1383 #if LOSSLESS_CODING1384 if(pcCU->getSlice()->getSPS()->getUseLossless())1385 {1386 if(iDQp > 25)1387 {1388 iDQp = iDQp - 52;1389 }1390 if(iDQp < -26)1391 {1392 iDQp = iDQp + 52;1393 }1394 }1395 #endif1396 #endif1397 1284 1398 1285 if ( iDQp == 0 ) … … 1405 1292 1406 1293 UInt uiSign = (iDQp > 0 ? 0 : 1); 1407 #if !H0736_AVC_STYLE_QP_RANGE1408 UInt uiQpBdOffsetY = 6*(g_uiBitIncrement + g_uiBitDepth - 8);1409 #endif1410 1294 1411 1295 m_pcBinIf->encodeBinEP(uiSign); 1412 1296 1413 #if H0736_AVC_STYLE_QP_RANGE1414 1297 assert(iDQp >= -(26+(qpBdOffsetY/2))); 1415 1298 assert(iDQp <= (25+(qpBdOffsetY/2))); 1416 1299 1417 1300 UInt uiMaxAbsDQpMinus1 = 24 + (qpBdOffsetY/2) + (uiSign); 1418 #else1419 assert(iDQp >= -(26+(Int)(uiQpBdOffsetY/2)));1420 assert(iDQp <= (25+(Int)(uiQpBdOffsetY/2)));1421 1422 UInt uiMaxAbsDQpMinus1 = 24 + (uiQpBdOffsetY/2) + (uiSign);1423 #endif1424 1301 UInt uiAbsDQpMinus1 = (UInt)((iDQp > 0)? iDQp : (-iDQp)) - 1; 1425 1302 xWriteUnaryMaxSymbol( uiAbsDQpMinus1, &m_cCUDeltaQpSCModel.get( 0, 0, 1 ), 1, uiMaxAbsDQpMinus1); … … 1447 1324 } 1448 1325 1449 #if BURST_IPCM1450 1326 /** Code I_PCM information. 1451 1327 * \param pcCU pointer to CU … … 1456 1332 */ 1457 1333 Void TEncSbac::codeIPCMInfo( TComDataCU* pcCU, UInt uiAbsPartIdx, Int numIPCM, Bool firstIPCMFlag) 1458 #else1459 /** Code I_PCM information.1460 * \param pcCU pointer to CU1461 * \param uiAbsPartIdx CU index1462 * \returns Void1463 *1464 * If I_PCM flag indicates that the CU is I_PCM, code its PCM alignment bits and codes.1465 */1466 Void TEncSbac::codeIPCMInfo( TComDataCU* pcCU, UInt uiAbsPartIdx)1467 #endif1468 1334 { 1469 1335 UInt uiIPCM = (pcCU->getIPCMFlag(uiAbsPartIdx) == true)? 1 : 0; 1470 1336 1471 #if BURST_IPCM1472 1337 Bool writePCMSampleFlag = pcCU->getIPCMFlag(uiAbsPartIdx); 1473 1338 … … 1482 1347 } 1483 1348 } 1484 #else 1485 m_pcBinIf->encodeBinTrm (uiIPCM); 1486 #endif 1487 1488 #if BURST_IPCM 1349 1489 1350 if (writePCMSampleFlag) 1490 #else 1491 if (uiIPCM) 1492 #endif 1493 { 1494 #if !BURST_IPCM 1495 m_pcBinIf->encodePCMAlignBits(); 1496 #endif 1351 { 1497 1352 UInt uiMinCoeffSize = pcCU->getPic()->getMinCUWidth()*pcCU->getPic()->getMinCUHeight(); 1498 1353 UInt uiLumaOffset = uiMinCoeffSize*uiAbsPartIdx; … … 1551 1406 piPCMSample += uiWidth; 1552 1407 } 1553 #if BURST_IPCM1554 1408 numIPCM--; 1555 1409 if(numIPCM == 0) … … 1557 1411 m_pcBinIf->resetBac(); 1558 1412 } 1559 #else1560 m_pcBinIf->resetBac();1561 #endif1562 1413 } 1563 1414 } … … 1603 1454 1604 1455 // posX 1605 #if LAST_CTX_REDUCTION1606 1456 Int widthCtx = eTType? 4: width; 1607 1457 const UInt *puiCtxIdxX = g_uiLastCtx + ( g_aucConvertToBit[ widthCtx ] * ( g_aucConvertToBit[ widthCtx ] + 3 ) ); 1608 #else1609 const UInt *puiCtxIdxX = g_uiLastCtx + ( g_aucConvertToBit[ width ] * ( g_aucConvertToBit[ width ] + 3 ) );1610 #endif1611 1458 for( uiCtxLast = 0; uiCtxLast < uiGroupIdxX; uiCtxLast++ ) 1612 1459 { 1613 #if LAST_CTX_REDUCTION1614 1460 if (eTType) 1615 1461 { … … 1618 1464 else 1619 1465 { 1620 #endif1621 1466 m_pcBinIf->encodeBin( 1, *( pCtxX + puiCtxIdxX[ uiCtxLast ] ) ); 1622 #if LAST_CTX_REDUCTION 1623 } 1624 #endif 1467 } 1625 1468 } 1626 1469 if( uiGroupIdxX < g_uiGroupIdx[ width - 1 ]) 1627 1470 { 1628 #if LAST_CTX_REDUCTION1629 1471 if ( eTType ) 1630 1472 { … … 1633 1475 else 1634 1476 { 1635 #endif1636 1477 m_pcBinIf->encodeBin( 0, *( pCtxX + puiCtxIdxX[ uiCtxLast ] ) ); 1637 #if LAST_CTX_REDUCTION 1638 } 1639 #endif 1478 } 1640 1479 } 1641 1480 1642 1481 // posY 1643 #if LAST_CTX_REDUCTION1644 1482 Int heightCtx = eTType? 4: height; 1645 1483 const UInt *puiCtxIdxY = g_uiLastCtx + ( g_aucConvertToBit[ heightCtx ] * ( g_aucConvertToBit[ heightCtx ] + 3 ) ); 1646 #else1647 const UInt *puiCtxIdxY = g_uiLastCtx + ( g_aucConvertToBit[ height ] * ( g_aucConvertToBit[ height ] + 3 ) );1648 #endif1649 1484 for( uiCtxLast = 0; uiCtxLast < uiGroupIdxY; uiCtxLast++ ) 1650 1485 { 1651 #if LAST_CTX_REDUCTION1652 1486 if (eTType) 1653 1487 { … … 1656 1490 else 1657 1491 { 1658 #endif1659 1492 m_pcBinIf->encodeBin( 1, *( pCtxY + puiCtxIdxY[ uiCtxLast ] ) ); 1660 #if LAST_CTX_REDUCTION 1661 } 1662 #endif 1493 } 1663 1494 } 1664 1495 if( uiGroupIdxY < g_uiGroupIdx[ height - 1 ]) 1665 1496 { 1666 #if LAST_CTX_REDUCTION1667 1497 if (eTType) 1668 1498 { … … 1671 1501 else 1672 1502 { 1673 #endif1674 1503 m_pcBinIf->encodeBin( 0, *( pCtxY + puiCtxIdxY[ uiCtxLast ] ) ); 1675 #if LAST_CTX_REDUCTION 1676 } 1677 #endif 1504 } 1678 1505 } 1679 1506 if ( uiGroupIdxX > 3 ) … … 1765 1592 } 1766 1593 1767 #if MULTIBITS_DATA_HIDING1768 1594 UInt const tsig = pcCU->getSlice()->getPPS()->getTSIG(); 1769 1595 #if LOSSLESS_CODING … … 1780 1606 Bool beValid = pcCU->getSlice()->getPPS()->getSignHideFlag() > 0; 1781 1607 #endif 1782 #endif1783 1608 1784 1609 // Find position of last coefficient … … 1790 1615 { 1791 1616 scanCG = g_auiSigLastScan[ uiScanIdx ][ uiLog2BlockSize > 3 ? uiLog2BlockSize-2-1 : 0 ]; 1792 #if MULTILEVEL_SIGMAP_EXT1793 1617 if( uiLog2BlockSize == 3 ) 1794 1618 { … … 1799 1623 scanCG = g_sigLastScanCG32x32; 1800 1624 } 1801 #endif1802 1625 } 1803 1626 else … … 1809 1632 const UInt uiNumBlkSide = uiWidth >> uiShift; 1810 1633 1811 #if !MULTILEVEL_SIGMAP_EXT1812 if( blockType > 3 )1813 {1814 #endif1815 1634 ::memset( uiSigCoeffGroupFlag, 0, sizeof(UInt) * MLS_GRP_NUM ); 1816 1635 … … 1823 1642 UInt uiPosX = posLast - ( uiPosY << uiLog2BlockSize ); 1824 1643 UInt uiBlkIdx = uiNumBlkSide * (uiPosY >> uiShift) + (uiPosX >> uiShift); 1825 #if MULTILEVEL_SIGMAP_EXT1826 1644 if( uiWidth == 8 && uiHeight == 8 && (uiScanIdx == SCAN_HOR || uiScanIdx == SCAN_VER) ) 1827 1645 { … … 1835 1653 } 1836 1654 } 1837 #endif1838 1655 if( pcCoef[ posLast ] ) 1839 1656 { … … 1844 1661 } 1845 1662 while ( uiNumSig > 0 ); 1846 #if !MULTILEVEL_SIGMAP_EXT1847 }1848 else1849 {1850 1851 do1852 {1853 posLast = scan[ ++scanPosLast ];1854 uiNumSig -= ( pcCoef[ posLast ] != 0 );1855 }1856 while ( uiNumSig > 0 );1857 1858 }1859 #endif1860 1663 1861 1664 // Code position of last coefficient … … 1882 1685 UInt coeffSigns = 0; 1883 1686 1884 #if MULTIBITS_DATA_HIDING1885 1687 Int lastNZPosInCG = -1, firstNZPosInCG = SCAN_SET_SIZE; 1886 #endif1887 1688 1888 1689 if( iScanPosSig == scanPosLast ) … … 1891 1692 coeffSigns = ( pcCoef[ posLast ] < 0 ); 1892 1693 numNonZero = 1; 1893 #if MULTIBITS_DATA_HIDING1894 1694 lastNZPosInCG = iScanPosSig; 1895 1695 firstNZPosInCG = iScanPosSig; 1896 #endif1897 1696 iScanPosSig--; 1898 1697 } 1899 1698 1900 #if !MULTILEVEL_SIGMAP_EXT1901 if( blockType > 3 )1902 {1903 #endif1904 1699 // encode significant_coeffgroup_flag 1905 1700 Int iCGBlkPos = scanCG[ iSubSet ]; 1906 1701 Int iCGPosY = iCGBlkPos / uiNumBlkSide; 1907 1702 Int iCGPosX = iCGBlkPos - (iCGPosY * uiNumBlkSide); 1908 #if MULTILEVEL_SIGMAP_EXT1909 1703 if( uiWidth == 8 && uiHeight == 8 && (uiScanIdx == SCAN_HOR || uiScanIdx == SCAN_VER) ) 1910 1704 { … … 1912 1706 iCGPosX = (uiScanIdx == SCAN_VER ? iCGBlkPos : 0); 1913 1707 } 1914 #endif1915 #if !REMOVE_INFER_SIGGRP1916 Bool bInferredCGFlag = false;1917 #endif1918 #if REMOVE_INFER_SIGGRP1919 1708 if( iSubSet == iLastScanSet || iSubSet == 0) 1920 #else1921 if( iSubSet == iLastScanSet )1922 #endif1923 1709 { 1924 1710 uiSigCoeffGroupFlag[ iCGBlkPos ] = 1; … … 1926 1712 else 1927 1713 { 1928 #if !REMOVE_INFER_SIGGRP1929 #if MULTILEVEL_SIGMAP_EXT1930 if( !TComTrQuant::bothCGNeighboursOne( uiSigCoeffGroupFlag, iCGPosX, iCGPosY, uiScanIdx, uiWidth, uiHeight ) && ( iSubSet ) )1931 #else1932 if( !TComTrQuant::bothCGNeighboursOne( uiSigCoeffGroupFlag, iCGPosX, iCGPosY, uiWidth, uiHeight ) && ( iSubSet ) )1933 #endif1934 {1935 #endif1936 1714 UInt uiSigCoeffGroup = (uiSigCoeffGroupFlag[ iCGBlkPos ] != 0); 1937 #if MULTILEVEL_SIGMAP_EXT1938 1715 UInt uiCtxSig = TComTrQuant::getSigCoeffGroupCtxInc( uiSigCoeffGroupFlag, iCGPosX, iCGPosY, uiScanIdx, uiWidth, uiHeight ); 1939 #else1940 UInt uiCtxSig = TComTrQuant::getSigCoeffGroupCtxInc( uiSigCoeffGroupFlag, iCGPosX, iCGPosY, uiWidth, uiHeight );1941 #endif1942 1716 m_pcBinIf->encodeBin( uiSigCoeffGroup, baseCoeffGroupCtx[ uiCtxSig ] ); 1943 #if !REMOVE_INFER_SIGGRP1944 }1945 else1946 {1947 uiSigCoeffGroupFlag[ iCGBlkPos ] = 1;1948 bInferredCGFlag = true;1949 }1950 #endif1951 1717 } 1952 1718 … … 1961 1727 uiPosX = uiBlkPos - ( uiPosY << uiLog2BlockSize ); 1962 1728 uiSig = (pcCoef[ uiBlkPos ] != 0); 1963 #if REMOVE_INFER_SIGGRP1964 1729 if( iScanPosSig > iSubPos || iSubSet == 0 || numNonZero ) 1965 #else1966 if( iScanPosSig > iSubPos || bInferredCGFlag || numNonZero )1967 #endif1968 1730 { 1969 1731 uiCtxSig = TComTrQuant::getSigCtxInc( pcCoef, uiPosX, uiPosY, blockType, uiWidth, uiHeight, eTType ); … … 1975 1737 coeffSigns = 2 * coeffSigns + ( pcCoef[ uiBlkPos ] < 0 ); 1976 1738 numNonZero++; 1977 #if MULTIBITS_DATA_HIDING1978 1739 if( lastNZPosInCG == -1 ) 1979 1740 { … … 1981 1742 } 1982 1743 firstNZPosInCG = iScanPosSig; 1983 #endif1984 1744 } 1985 1745 } … … 1989 1749 iScanPosSig = iSubPos - 1; 1990 1750 } 1991 #if !MULTILEVEL_SIGMAP_EXT1992 }1993 else1994 {1995 1996 for( ; iScanPosSig >= iSubPos; iScanPosSig-- )1997 {1998 UInt uiBlkPos = scan[ iScanPosSig ];1999 UInt uiPosY = uiBlkPos >> uiLog2BlockSize;2000 UInt uiPosX = uiBlkPos - ( uiPosY << uiLog2BlockSize );2001 UInt uiSig = 0;2002 if( pcCoef[ uiBlkPos ] != 0 )2003 {2004 uiSig = 1;2005 absCoeff[ numNonZero ] = abs( pcCoef[ uiBlkPos ] );2006 coeffSigns = 2 * coeffSigns + ( pcCoef[ uiBlkPos ] < 0 );2007 numNonZero++;2008 #if MULTIBITS_DATA_HIDING2009 if( lastNZPosInCG == -1 )2010 {2011 lastNZPosInCG = iScanPosSig;2012 }2013 firstNZPosInCG = iScanPosSig;2014 #endif2015 }2016 UInt uiCtxSig = TComTrQuant::getSigCtxInc( pcCoef, uiPosX, uiPosY, blockType, uiWidth, uiHeight, eTType );2017 m_pcBinIf->encodeBin( uiSig, baseCtx[ uiCtxSig ] );2018 }2019 2020 }2021 #endif2022 1751 2023 1752 if( numNonZero > 0 ) 2024 1753 { 2025 #if MULTIBITS_DATA_HIDING2026 1754 Bool signHidden = ( lastNZPosInCG - firstNZPosInCG >= (Int)tsig ); 2027 #endif // MULTIBITS_DATA_HIDING2028 1755 2029 1756 UInt c1 = 1; 2030 #if !RESTRICT_GR1GR2FLAG_NUMBER2031 UInt c2 = 0;2032 #endif2033 #if LEVEL_CTX_LUMA_RED2034 1757 UInt uiCtxSet = (iSubSet > 0 && eTType==TEXT_LUMA) ? 2 : 0; 2035 #else2036 UInt uiCtxSet = (iSubSet > 0 && eTType==TEXT_LUMA) ? 3 : 0;2037 #endif2038 1758 2039 1759 if( uiNumOne > 0 ) 2040 1760 { 2041 1761 uiCtxSet++; 2042 #if !LEVEL_CTX_LUMA_RED2043 if( uiNumOne > 3 && eTType==TEXT_LUMA)2044 {2045 uiCtxSet++;2046 }2047 #endif2048 1762 } 2049 1763 … … 2051 1765 ContextModel *baseCtxMod = ( eTType==TEXT_LUMA ) ? m_cCUOneSCModel.get( 0, 0 ) + 4 * uiCtxSet : m_cCUOneSCModel.get( 0, 0 ) + NUM_ONE_FLAG_CTX_LUMA + 4 * uiCtxSet; 2052 1766 2053 #if RESTRICT_GR1GR2FLAG_NUMBER2054 1767 Int numC1Flag = min(numNonZero, C1FLAG_NUMBER); 2055 1768 Int firstC2FlagIdx = -1; 2056 1769 for( Int idx = 0; idx < numC1Flag; idx++ ) 2057 #else2058 for ( Int idx = 0; idx < numNonZero; idx++ )2059 #endif2060 1770 { 2061 1771 UInt uiSymbol = absCoeff[ idx ] > 1; … … 2065 1775 c1 = 0; 2066 1776 2067 #if RESTRICT_GR1GR2FLAG_NUMBER2068 1777 if (firstC2FlagIdx == -1) 2069 1778 { 2070 1779 firstC2FlagIdx = idx; 2071 1780 } 2072 #endif2073 1781 } 2074 1782 else if( (c1 < 3) && (c1 > 0) ) … … 2081 1789 { 2082 1790 2083 #if RESTRICT_GR1GR2FLAG_NUMBER2084 1791 baseCtxMod = ( eTType==TEXT_LUMA ) ? m_cCUAbsSCModel.get( 0, 0 ) + uiCtxSet : m_cCUAbsSCModel.get( 0, 0 ) + NUM_ABS_FLAG_CTX_LUMA + uiCtxSet; 2085 1792 if ( firstC2FlagIdx != -1) … … 2088 1795 m_pcBinIf->encodeBin( symbol, baseCtxMod[0] ); 2089 1796 } 2090 #else 2091 baseCtxMod = ( eTType==TEXT_LUMA ) ? m_cCUAbsSCModel.get( 0, 0 ) + 3 * uiCtxSet : m_cCUAbsSCModel.get( 0, 0 ) + NUM_ABS_FLAG_CTX_LUMA + 3 * uiCtxSet; 1797 } 1798 1799 if( beValid && signHidden ) 1800 { 1801 m_pcBinIf->encodeBinsEP( (coeffSigns >> 1), numNonZero-1 ); 1802 } 1803 else 1804 { 1805 m_pcBinIf->encodeBinsEP( coeffSigns, numNonZero ); 1806 } 1807 1808 Int iFirstCoeff2 = 1; 1809 if (c1 == 0 || numNonZero > C1FLAG_NUMBER) 1810 { 2092 1811 for ( Int idx = 0; idx < numNonZero; idx++ ) 2093 1812 { 2094 if( absCoeff[ idx ] > 1 )2095 {2096 UInt symbol = absCoeff[ idx ] > 2;2097 m_pcBinIf->encodeBin( symbol, baseCtxMod[c2] );2098 c2 += (c2 < 2);2099 uiNumOne++;2100 }2101 }2102 #endif2103 }2104 2105 #if MULTIBITS_DATA_HIDING2106 if( beValid && signHidden )2107 {2108 m_pcBinIf->encodeBinsEP( (coeffSigns >> 1), numNonZero-1 );2109 }2110 else2111 {2112 m_pcBinIf->encodeBinsEP( coeffSigns, numNonZero );2113 }2114 #else2115 m_pcBinIf->encodeBinsEP( coeffSigns, numNonZero );2116 #endif2117 2118 #if RESTRICT_GR1GR2FLAG_NUMBER2119 Int iFirstCoeff2 = 1;2120 if (c1 == 0 || numNonZero > C1FLAG_NUMBER)2121 #else2122 if (c1 == 0)2123 #endif2124 {2125 for ( Int idx = 0; idx < numNonZero; idx++ )2126 {2127 #if RESTRICT_GR1GR2FLAG_NUMBER2128 1813 UInt baseLevel = (idx < C1FLAG_NUMBER)? (2 + iFirstCoeff2 ) : 1; 2129 1814 … … 2137 1822 uiNumOne++; 2138 1823 } 2139 #else2140 if ( absCoeff[ idx ] > 2 )2141 {2142 xWriteGoRiceExGolomb( absCoeff[ idx ] - 3, uiGoRiceParam );2143 }2144 #endif2145 1824 } 2146 1825 } … … 2273 1952 } 2274 1953 } 2275 #if SAO_UNIT_INTERLEAVING2276 1954 /** Code SAO band position 2277 1955 * \param uiCode … … 2333 2011 } 2334 2012 } 2335 #endif2336 2013 /*! 2337 2014 **************************************************************************** … … 2442 2119 const UInt *puiCtxIdx; 2443 2120 Int ctx; 2444 #if LAST_CTX_REDUCTION2445 2121 Int widthCtx = eTType? 4 : width; 2446 2122 puiCtxIdx = g_uiLastCtx + (g_aucConvertToBit[ widthCtx ]*(g_aucConvertToBit[ widthCtx ]+3)); 2447 #else2448 puiCtxIdx = g_uiLastCtx + (g_aucConvertToBit[ width ]*(g_aucConvertToBit[ width ]+3));2449 #endif2450 2123 ContextModel *pCtxX = m_cCuCtxLastX.get( 0, eTType ); 2451 2124 for (ctx = 0; ctx < g_uiGroupIdx[ width - 1 ]; ctx++) 2452 2125 { 2453 2126 Int ctxOffset = puiCtxIdx[ ctx ]; 2454 #if LAST_CTX_REDUCTION2455 2127 if (eTType) 2456 2128 { … … 2461 2133 else 2462 2134 { 2463 #endif2464 2135 pcEstBitsSbac->lastXBits[ ctx ] = iBitsX + pCtxX[ ctxOffset ].getEntropyBits( 0 ); 2465 2136 iBitsX += pCtxX[ ctxOffset ].getEntropyBits( 1 ); 2466 #if LAST_CTX_REDUCTION 2467 } 2468 #endif 2137 } 2469 2138 } 2470 2139 pcEstBitsSbac->lastXBits[ctx] = iBitsX; 2471 2140 2472 #if LAST_CTX_REDUCTION2473 2141 Int heightCtx = eTType? 4 : height; 2474 2142 puiCtxIdx = g_uiLastCtx + (g_aucConvertToBit[ heightCtx ]*(g_aucConvertToBit[ heightCtx ]+3)); 2475 #else2476 puiCtxIdx = g_uiLastCtx + (g_aucConvertToBit[ height ]*(g_aucConvertToBit[ height ]+3));2477 #endif2478 2143 ContextModel *pCtxY = m_cCuCtxLastY.get( 0, eTType ); 2479 2144 for (ctx = 0; ctx < g_uiGroupIdx[ height - 1 ]; ctx++) 2480 2145 { 2481 2146 Int ctxOffset = puiCtxIdx[ ctx ]; 2482 #if LAST_CTX_REDUCTION2483 2147 if (eTType) 2484 2148 { … … 2489 2153 else 2490 2154 { 2491 #endif2492 2155 pcEstBitsSbac->lastYBits[ ctx ] = iBitsY + pCtxY[ ctxOffset ].getEntropyBits( 0 ); 2493 2156 iBitsY += pCtxY[ ctxOffset ].getEntropyBits( 1 ); 2494 #if LAST_CTX_REDUCTION 2495 } 2496 #endif 2157 } 2497 2158 } 2498 2159 pcEstBitsSbac->lastYBits[ctx] = iBitsY; -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncSbac.h
r292 r294 111 111 Void codeSliceHeader ( TComSlice* pcSlice ); 112 112 Void codeTileMarkerFlag(TComSlice* pcSlice) {printf("Not supported\n"); assert(0); exit(1);} 113 #if TILES_WPP_ENTRY_POINT_SIGNALLING114 113 Void codeTilesWPPEntryPoint( TComSlice* pSlice ); 115 #else116 Void codeSliceHeaderSubstreamTable( TComSlice* pcSlice );117 #endif118 114 Void codeTerminatingBit ( UInt uilsLast ); 119 115 Void codeSliceFinish (); 120 #if OL_FLUSH121 116 Void codeFlush (); 122 117 Void encodeStart (); 123 #endif124 118 125 119 Void codeAlfFlag ( UInt uiCode ); … … 127 121 Void codeAlfSvlc ( Int uiCode ); 128 122 Void codeAlfCtrlDepth (); 129 #if LCU_SYNTAX_ALF130 123 Void codeAPSAlflag(UInt uiCode) {assert (0); return;} 131 124 Void codeAlfFixedLengthIdx( UInt idx, UInt maxValue){ assert (0); return;} 132 #endif133 125 134 126 Void codeAlfCtrlFlag ( UInt uiSymbol ); … … 137 129 Void codeSaoUvlc ( UInt uiCode ); 138 130 Void codeSaoSvlc ( Int uiCode ); 139 #if SAO_UNIT_INTERLEAVING140 131 Void codeSaoRun ( UInt uiCode, UInt uiMaxValue ) {;} 141 132 Void codeSaoMergeLeft ( UInt uiCode, UInt uiCompIdx ); … … 143 134 Void codeSaoTypeIdx ( UInt uiCode); 144 135 Void codeSaoUflc ( UInt uiCode); 145 #endif146 136 Void codeScalingList ( TComScalingList* scalingList ){ assert (0); return;}; 147 137 … … 228 218 Void codePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ); 229 219 Void codePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx ); 230 #if BURST_IPCM231 220 Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx, Int numIPCM, Bool firstIPCMFlag); 232 #else233 Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx );234 #endif235 221 Void codeTransformSubdivFlag ( UInt uiSymbol, UInt uiCtx ); 236 222 Void codeQtCbf ( TComDataCU* pcCU, UInt uiAbsPartIdx, TextType eType, UInt uiTrDepth ); … … 305 291 ContextModel3DBuffer m_cALFUvlcSCModel; 306 292 ContextModel3DBuffer m_cALFSvlcSCModel; 307 #if AMP_CTX308 293 ContextModel3DBuffer m_cCUAMPSCModel; 309 #else310 ContextModel3DBuffer m_cCUXPosiSCModel;311 ContextModel3DBuffer m_cCUYPosiSCModel;312 #endif313 294 ContextModel3DBuffer m_cSaoFlagSCModel; 314 295 ContextModel3DBuffer m_cSaoUvlcSCModel; 315 296 ContextModel3DBuffer m_cSaoSvlcSCModel; 316 #if SAO_UNIT_INTERLEAVING317 297 ContextModel3DBuffer m_cSaoMergeLeftSCModel; 318 298 ContextModel3DBuffer m_cSaoMergeUpSCModel; 319 299 ContextModel3DBuffer m_cSaoTypeIdxSCModel; 320 #endif321 300 322 301 #if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncSearch.cpp
r292 r294 1080 1080 pcCU ->setTrIdxSubParts ( uiTrDepth, uiAbsPartIdx, uiFullDepth ); 1081 1081 1082 #if H0736_AVC_STYLE_QP_RANGE1083 1082 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA, pcCU->getSlice()->getSPS()->getQpBDOffsetY(), 0 ); 1084 #else1085 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_LUMA, 0 );1086 #endif1087 1083 1088 1084 #if RDOQ_CHROMA_LAMBDA … … 1278 1274 UInt uiAbsSum = 0; 1279 1275 1280 #if H0736_AVC_STYLE_QP_RANGE1281 1276 if(eText == TEXT_CHROMA_U) 1282 1277 { … … 1287 1282 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() ); 1288 1283 } 1289 #else1290 if(eText == TEXT_CHROMA_U)1291 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getPPS()->getChromaQpOffset() );1292 else1293 m_pcTrQuant->setQPforQuant ( pcCU->getQP( 0 ), !pcCU->getSlice()->getDepth(), pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() );1294 #endif1295 1284 1296 1285 #if RDOQ_CHROMA_LAMBDA … … 2041 2030 2042 2031 //===== determine set of modes to be tested (using prediction signal only) ===== 2043 #if LOGI_INTRA_NAME_3MPM2044 2032 Int numModesAvailable = 35; //total number of Intra modes 2045 #else2046 Int numModesAvailable = g_aucIntraModeNumAng[uiWidthBit];2047 #endif2048 2033 Pel* piOrg = pcOrgYuv ->getLumaAddr( uiPU, uiWidth ); 2049 2034 Pel* piPred = pcPredYuv->getLumaAddr( uiPU, uiWidth ); … … 2159 2144 2160 2145 #if FAST_UDI_USE_MPM 2161 #if LOGI_INTRA_NAME_3MPM2162 2146 Int uiPreds[3] = {-1, -1, -1}; 2163 #else2164 Int uiPreds[2] = {-1, -1};2165 #endif2166 2147 Int iMode = -1; 2167 2148 Int numCand = pcCU->getIntraDirLumaPredictor( uiPartOffset, uiPreds, &iMode ); 2168 #if LOGI_INTRA_NAME_3MPM2169 2149 if( iMode >= 0 ) 2170 2150 { 2171 2151 numCand = iMode; 2172 2152 } 2173 #else2174 if( iMode >= 0 )2175 {2176 numCand = 1;2177 uiPreds[0] = iMode;2178 }2179 #endif2180 2153 2181 2154 for( Int j=0; j < numCand; j++) … … 3169 3142 PartSize ePartSize = pcCU->getPartitionSize( 0 ); 3170 3143 3171 #if H0111_MVD_L1_ZERO3172 3144 Int bestBiPRefIdxL1 = 0; 3173 3145 Int bestBiPMvpL1 = 0; 3174 3146 UInt biPDistTemp = MAX_INT; 3175 #endif3176 3147 3177 3148 #if ZERO_MVD_EST … … 3212 3183 UInt auiZeroMvdBits[3]; 3213 3184 #endif 3214 #if H0111_MVD_L1_ZERO3215 3185 UInt bestBiPDist = MAX_INT; 3216 #endif3217 3186 3218 3187 UInt uiCostTempL0[MAX_NUM_REF]; … … 3274 3243 if ( iRefIdxTemp == pcCU->getSlice()->getNumRefIdx(eRefPicList)-1 ) uiBitsTemp--; 3275 3244 } 3276 #if H0111_MVD_L1_ZERO3277 3245 #if ZERO_MVD_EST 3278 3246 xEstimateMvPredAMVP( pcCU, pcOrgYuv, iPartIdx, eRefPicList, iRefIdxTemp, cMvPred[iRefList][iRefIdxTemp], false, &biPDistTemp, &uiZeroMvdDistTemp); 3279 3247 #else 3280 3248 xEstimateMvPredAMVP( pcCU, pcOrgYuv, iPartIdx, eRefPicList, iRefIdxTemp, cMvPred[iRefList][iRefIdxTemp], false, &biPDistTemp); 3281 #endif3282 #else3283 #if ZERO_MVD_EST3284 xEstimateMvPredAMVP( pcCU, pcOrgYuv, iPartIdx, eRefPicList, iRefIdxTemp, cMvPred[iRefList][iRefIdxTemp], false, &uiZeroMvdDistTemp);3285 #else3286 xEstimateMvPredAMVP( pcCU, pcOrgYuv, iPartIdx, eRefPicList, iRefIdxTemp, cMvPred[iRefList][iRefIdxTemp]);3287 #endif3288 3249 #endif 3289 3250 aaiMvpIdx[iRefList][iRefIdxTemp] = pcCU->getMVPIdx(eRefPicList, uiPartAddr); 3290 3251 aaiMvpNum[iRefList][iRefIdxTemp] = pcCU->getMVPNum(eRefPicList, uiPartAddr); 3291 3252 3292 #if H0111_MVD_L1_ZERO3293 3253 if(pcCU->getSlice()->getMvdL1ZeroFlag() && iRefList==1 && biPDistTemp < bestBiPDist) 3294 3254 { … … 3297 3257 bestBiPRefIdxL1 = iRefIdxTemp; 3298 3258 } 3299 #endif3300 3259 3301 3260 #if H3D_IVMP … … 3410 3369 pcCU->getCUMvField(eRefPicList)->setAllRefIdx( iRefIdx[iRefList], ePartSize, uiPartAddr, 0, iPartIdx ); 3411 3370 3412 #if H0111_MVD_L1_ZERO3413 3371 if(!pcCU->getSlice()->getMvdL1ZeroFlag()) 3414 3372 { 3415 #endif3416 3373 // storing list 1 prediction signal for iterative bi-directional prediction 3417 3374 if ( eRefPicList == REF_PIC_LIST_1 ) … … 3433 3390 #endif 3434 3391 } 3435 #if H0111_MVD_L1_ZERO3436 3392 } 3437 #endif3438 3393 } 3439 3394 } … … 3457 3412 ::memcpy(aaiMvpIdxBi, aaiMvpIdx, sizeof(aaiMvpIdx)); 3458 3413 3459 #if H0111_MVD_L1_ZERO3460 3414 UInt uiMotBits[2]; 3461 3415 … … 3502 3456 uiBits[2] = uiMbBits[2] + uiMotBits[0] + uiMotBits[1]; 3503 3457 } 3504 #else3505 UInt uiMotBits[2] = { uiBits[0] - uiMbBits[0], uiBits[1] - uiMbBits[1] };3506 uiBits[2] = uiMbBits[2] + uiMotBits[0] + uiMotBits[1];3507 #endif3508 3458 3509 3459 // 4-times iteration (default) … … 3511 3461 3512 3462 // fast encoder setting: only one iteration 3513 #if H0111_MVD_L1_ZERO3514 3463 if ( m_pcEncCfg->getUseFastEnc() || pcCU->getSlice()->getMvdL1ZeroFlag()) 3515 #else3516 if ( m_pcEncCfg->getUseFastEnc() )3517 #endif3518 3464 { 3519 3465 iNumIter = 1; … … 3530 3476 RefPicList eRefPicList = ( iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 ); 3531 3477 3532 #if H0111_MVD_L1_ZERO3533 3478 if(pcCU->getSlice()->getMvdL1ZeroFlag()) 3534 3479 { … … 3536 3481 eRefPicList = REF_PIC_LIST_0; 3537 3482 } 3538 #endif3539 3483 3540 3484 Bool bChanged = false; … … 3606 3550 uiBits[2] = uiBitsTemp; 3607 3551 3608 #if H0111_MVD_L1_ZERO3609 3552 if(iNumIter!=1) 3610 3553 { 3611 #endif3612 3554 // Set motion 3613 3555 pcCU->getCUMvField( eRefPicList )->setAllMv( cMvBi[iRefList], ePartSize, uiPartAddr, 0, iPartIdx ); … … 3620 3562 motionCompensation( pcCU, pcYuvPred, eRefPicList, iPartIdx ); 3621 3563 #endif 3622 #if H0111_MVD_L1_ZERO3623 3564 } 3624 #endif3625 3565 } 3626 3566 } // for loop-iRefIdxTemp … … 3632 3572 xCopyAMVPInfo(&aacAMVPInfo[0][iRefIdxBi[0]], pcCU->getCUMvField(REF_PIC_LIST_0)->getAMVPInfo()); 3633 3573 xCheckBestMVP(pcCU, REF_PIC_LIST_0, cMvBi[0], cMvPredBi[0][iRefIdxBi[0]], aaiMvpIdxBi[0][iRefIdxBi[0]], uiBits[2], uiCostBi); 3634 #if H0111_MVD_L1_ZERO3635 3574 if(!pcCU->getSlice()->getMvdL1ZeroFlag()) 3636 3575 { 3637 #endif3638 3576 xCopyAMVPInfo(&aacAMVPInfo[1][iRefIdxBi[1]], pcCU->getCUMvField(REF_PIC_LIST_1)->getAMVPInfo()); 3639 3577 xCheckBestMVP(pcCU, REF_PIC_LIST_1, cMvBi[1], cMvPredBi[1][iRefIdxBi[1]], aaiMvpIdxBi[1][iRefIdxBi[1]], uiBits[2], uiCostBi); 3640 #if H0111_MVD_L1_ZERO3641 3578 } 3642 #endif3643 3579 } 3644 3580 break; … … 3986 3922 3987 3923 // AMVP 3988 #if H0111_MVD_L1_ZERO3989 3924 #if ZERO_MVD_EST 3990 3925 Void TEncSearch::xEstimateMvPredAMVP( TComDataCU* pcCU, TComYuv* pcOrgYuv, UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMvPred, Bool bFilled, UInt* puiDistBiP, UInt* puiDist ) 3991 3926 #else 3992 3927 Void TEncSearch::xEstimateMvPredAMVP( TComDataCU* pcCU, TComYuv* pcOrgYuv, UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMvPred, Bool bFilled, UInt* puiDistBiP ) 3993 #endif3994 #else3995 #if ZERO_MVD_EST3996 Void TEncSearch::xEstimateMvPredAMVP( TComDataCU* pcCU, TComYuv* pcOrgYuv, UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMvPred, Bool bFilled, UInt* puiDist )3997 #else3998 Void TEncSearch::xEstimateMvPredAMVP( TComDataCU* pcCU, TComYuv* pcOrgYuv, UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMvPred, Bool bFilled )3999 #endif4000 3928 #endif 4001 3929 { … … 4029 3957 pcCU->setMVPNumSubParts( pcAMVPInfo->iN, eRefPicList, uiPartAddr, uiPartIdx, pcCU->getDepth(uiPartAddr)); 4030 3958 4031 #if H0111_MVD_L1_ZERO4032 3959 if(pcCU->getSlice()->getMvdL1ZeroFlag() && eRefPicList==REF_PIC_LIST_1) 4033 3960 { … … 4047 3974 #endif 4048 3975 } 4049 #endif4050 3976 return; 4051 3977 } … … 4087 4013 cBestMv = pcAMVPInfo->m_acMvCand[i]; 4088 4014 iBestIdx = i; 4089 #if H0111_MVD_L1_ZERO4090 4015 (*puiDistBiP) = uiTmpCost; 4091 #endif4092 4016 #if ZERO_MVD_EST 4093 4017 (*puiDist) = uiDist; … … 4976 4900 4977 4901 // Residual coding. 4978 #if H0736_AVC_STYLE_QP_RANGE4979 4902 Int qp, qpBest = 0, qpMin, qpMax; 4980 #else4981 UInt uiQp, uiQpBest = 0, uiQpMin, uiQpMax;4982 #endif4983 4903 Double dCost, dCostBest = MAX_DOUBLE; 4984 4904 … … 4992 4912 while((uiWidth>>uiMaxTrMode) < (g_uiMaxCUWidth>>g_uiMaxCUDepth)) uiMaxTrMode--; 4993 4913 4994 #if H0736_AVC_STYLE_QP_RANGE4995 4914 qpMin = bHighPass ? Clip3( -pcCU->getSlice()->getSPS()->getQpBDOffsetY(), MAX_QP, pcCU->getQP(0) - m_iMaxDeltaQP ) : pcCU->getQP( 0 ); 4996 4915 qpMax = bHighPass ? Clip3( -pcCU->getSlice()->getSPS()->getQpBDOffsetY(), MAX_QP, pcCU->getQP(0) + m_iMaxDeltaQP ) : pcCU->getQP( 0 ); 4997 #else4998 uiQpMin = bHighPass ? min( MAX_QP, max( MIN_QP, pcCU->getQP(0) - m_iMaxDeltaQP ) ) : pcCU->getQP( 0 );4999 uiQpMax = bHighPass ? min( MAX_QP, max( MIN_QP, pcCU->getQP(0) + m_iMaxDeltaQP ) ) : pcCU->getQP( 0 );5000 #endif5001 4916 5002 4917 #if HHI_INTERVIEW_SKIP … … 5037 4952 #endif 5038 4953 5039 #if H0736_AVC_STYLE_QP_RANGE5040 4954 for ( qp = qpMin; qp <= qpMax; qp++ ) 5041 #else5042 for ( uiQp = uiQpMin; uiQp <= uiQpMax; uiQp++ )5043 #endif5044 4955 { 5045 4956 dCost = 0.; … … 5158 5069 } 5159 5070 5160 #if H0736_AVC_STYLE_QP_RANGE5161 5071 if( qpMin != qpMax && qp != qpMax ) 5162 #else5163 if( uiQpMin != uiQpMax && uiQp != uiQpMax )5164 #endif5165 5072 { 5166 5073 const UInt uiQPartNum = pcCU->getPic()->getNumPartInCU() >> (pcCU->getDepth(0) << 1); … … 5181 5088 uiDistortionBest = uiDistortion; 5182 5089 dCostBest = dCost; 5183 #if H0736_AVC_STYLE_QP_RANGE5184 5090 qpBest = qp; 5185 #else5186 uiQpBest = uiQp;5187 #endif5188 5091 if( m_bUseSBACRD ) 5189 5092 { … … 5209 5112 assert ( dCostBest != MAX_DOUBLE ); 5210 5113 5211 #if H0736_AVC_STYLE_QP_RANGE5212 5114 if( qpMin != qpMax && qpBest != qpMax ) 5213 #else5214 if( uiQpMin != uiQpMax && uiQpBest != uiQpMax )5215 #endif5216 5115 { 5217 5116 if( m_bUseSBACRD ) … … 5304 5203 } 5305 5204 5306 #if H0736_AVC_STYLE_QP_RANGE5307 5205 pcCU->setQPSubParts( qpBest, 0, pcCU->getDepth(0) ); 5308 #else5309 pcCU->setQPSubParts( uiQpBest, 0, pcCU->getDepth(0) );5310 #endif5311 5206 5312 5207 // set Model … … 5337 5232 const UInt uiLog2TrSize = g_aucConvertToBit[pcCU->getSlice()->getSPS()->getMaxCUWidth() >> uiDepth]+2; 5338 5233 5339 #if G519_TU_AMP_NSQT_HARMONIZATION5340 5234 UInt SplitFlag = ((pcCU->getSlice()->getSPS()->getQuadtreeTUMaxDepthInter() == 1) && pcCU->getPredictionMode(uiAbsPartIdx) == MODE_INTER && ( pcCU->getPartitionSize(uiAbsPartIdx) != SIZE_2Nx2N )); 5341 #else5342 UInt SplitFlag = ((pcCU->getSlice()->getSPS()->getQuadtreeTUMaxDepthInter() == 1) && pcCU->getPredictionMode(uiAbsPartIdx) == MODE_INTER && ( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2NxN || pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_Nx2N));5343 #endif5344 5235 Bool bCheckFull; 5345 5236 if ( SplitFlag && uiDepth == pcCU->getDepth(uiAbsPartIdx) && ( uiLog2TrSize > pcCU->getQuadtreeTULog2MinSizeInCU(uiAbsPartIdx) ) ) … … 5406 5297 } 5407 5298 5408 #if H0736_AVC_STYLE_QP_RANGE5409 5299 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_LUMA, pcCU->getSlice()->getSPS()->getQpBDOffsetY(), 0 ); 5410 #else5411 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_LUMA, 0 );5412 #endif5413 5300 5414 5301 #if RDOQ_CHROMA_LAMBDA … … 5430 5317 } 5431 5318 5432 #if H0736_AVC_STYLE_QP_RANGE5433 5319 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset() ); 5434 #else5435 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getPPS()->getChromaQpOffset() );5436 #endif5437 5320 5438 5321 #if RDOQ_CHROMA_LAMBDA … … 5445 5328 #endif 5446 5329 trWidthC, trHeightC, uiAbsSumU, TEXT_CHROMA_U, uiAbsPartIdx ); 5447 #if H0736_AVC_STYLE_QP_RANGE5448 5330 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() ); 5449 #else5450 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() );5451 #endif5452 5331 m_pcTrQuant->transformNxN( pcCU, pcResi->getCrAddr(absTUPartIdxC), pcResi->getCStride(), pcCoeffCurrV, 5453 5332 #if ADAPTIVE_QP_SELECTION … … 5548 5427 Pel *pcResiCurrY = m_pcQTTempTComYuv[ uiQTTempAccessLayer ].getLumaAddr( absTUPartIdx ); 5549 5428 5550 #if H0736_AVC_STYLE_QP_RANGE5551 5429 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_LUMA, pcCU->getSlice()->getSPS()->getQpBDOffsetY(), 0 ); 5552 #else5553 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_LUMA, 0 );5554 #endif5555 5430 5556 5431 Int scalingListType = 3 + g_eTTable[(Int)TEXT_LUMA]; … … 5705 5580 Pel *pcResiCurrU = m_pcQTTempTComYuv[uiQTTempAccessLayer].getCbAddr( absTUPartIdxC ); 5706 5581 5707 #if H0736_AVC_STYLE_QP_RANGE5708 5582 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset() ); 5709 #else5710 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getPPS()->getChromaQpOffset() );5711 #endif5712 5583 5713 5584 Int scalingListType = 3 + g_eTTable[(Int)TEXT_CHROMA_U]; … … 5794 5665 if( !uiAbsSumU ) 5795 5666 { 5796 #if H0736_AVC_STYLE_QP_RANGE5797 5667 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getSPS()->getQpBDOffsetC(), pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() ); 5798 #else5799 m_pcTrQuant->setQPforQuant( pcCU->getQP( 0 ), false, pcCU->getSlice()->getSliceType(), TEXT_CHROMA, pcCU->getSlice()->getPPS()->getChromaQpOffset2nd() );5800 #endif5801 5668 } 5802 5669 Int scalingListType = 3 + g_eTTable[(Int)TEXT_CHROMA_V]; -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncSearch.h
r292 r294 464 464 TComMv& rcMvPred, 465 465 Bool bFilled = false 466 #if H0111_MVD_L1_ZERO467 466 , UInt* puiDistBiP = NULL 468 #endif469 467 #if ZERO_MVD_EST 470 468 , UInt* puiDist = NULL -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncSlice.cpp
r292 r294 185 185 rpcSlice->initSlice(); 186 186 rpcSlice->initTiles(); 187 #if H0388188 187 rpcSlice->setPicOutputFlag( true ); 189 #endif190 188 rpcSlice->setPOC( uiPOCCurr ); 191 189 … … 262 260 { 263 261 #if LOSSLESS_CODING 264 #if H0736_AVC_STYLE_QP_RANGE265 262 if (!(( m_pcCfg->getMaxDeltaQP() == 0 ) && (dQP == -rpcSlice->getSPS()->getQpBDOffsetY() ) && (rpcSlice->getSPS()->getUseLossless()))) 266 #else267 if (!(( m_pcCfg->getMaxDeltaQP() == 0 ) && (dQP == 0 ) && (rpcSlice->getSPS()->getUseLossless())))268 #endif269 263 #endif 270 264 { … … 334 328 } 335 329 336 #if H0736_AVC_STYLE_QP_RANGE337 330 iQP = max( -pSPS->getQpBDOffsetY(), min( MAX_QP, (Int) floor( dQP + 0.5 ) ) ); 338 #else339 iQP = max( MIN_QP, min( MAX_QP, (Int)floor( dQP + 0.5 ) ) );340 #endif341 331 342 332 m_pdRdPicLambda[iDQpIdx] = dLambda; … … 360 350 // for RDO 361 351 // in RdCost there is only one lambda because the luma and chroma bits are not separated, instead we weight the distortion of chroma. 362 #if H0736_AVC_STYLE_QP_RANGE363 352 Double weight = 1.0; 364 353 if(iQP >= 0) … … 366 355 weight = pow( 2.0, (iQP-g_aucChromaScale[iQP])/3.0 ); // takes into account of the chroma qp mapping without chroma qp Offset 367 356 } 368 #else369 Double weight = pow( 2.0, (iQP-g_aucChromaScale[iQP])/3.0 ); // takes into account of the chroma qp mapping without chroma qp Offset370 #endif371 357 m_pcRdCost ->setChromaDistortionWeight( weight ); 372 358 #endif … … 432 418 433 419 rpcSlice->setLoopFilterOffsetInAPS( m_pcCfg->getLoopFilterOffsetInAPS() ); 434 #if DBL_CONTROL435 420 if (rpcSlice->getPPS()->getDeblockingFilterControlPresent()) 436 421 { 437 #endif438 422 rpcSlice->setInheritDblParamFromAPS( m_pcCfg->getLoopFilterOffsetInAPS() ? 1 : 0 ); 439 423 rpcSlice->setLoopFilterDisable( m_pcCfg->getLoopFilterDisable() ); … … 443 427 rpcSlice->setLoopFilterTcOffset( m_pcCfg->getLoopFilterTcOffset() ); 444 428 } 445 #if DBL_CONTROL 446 } 447 #endif 429 } 448 430 449 431 rpcSlice->setDepth ( iDepth ); … … 455 437 } 456 438 rpcSlice->setTLayer( pcPic->getTLayer() ); 457 #if !H0566_TLA458 rpcSlice->setTLayerSwitchingFlag( pPPS->getTLayerSwitchingFlag( pcPic->getTLayer() ) );459 #endif460 439 461 440 assert( m_apcPicYuvPred ); … … 558 537 // in RdCost there is only one lambda because the luma and chroma bits are not separated, instead we weight the distortion of chroma. 559 538 int iQP = m_piRdPicQp [uiQpIdx]; 560 #if H0736_AVC_STYLE_QP_RANGE561 539 Double weight = 1.0; 562 540 if(iQP >= 0) … … 564 542 weight = pow( 2.0, (iQP-g_aucChromaScale[iQP])/3.0 ); // takes into account of the chroma qp mapping without chroma qp Offset 565 543 } 566 #else567 Double weight = pow( 2.0, (iQP-g_aucChromaScale[iQP])/3.0 ); // takes into account of the chroma qp mapping without chroma qp Offset568 #endif569 544 m_pcRdCost ->setChromaDistortionWeight( weight ); 570 545 #endif … … 614 589 // in RdCost there is only one lambda because the luma and chroma bits are not separated, instead we weight the distortion of chroma. 615 590 int iQP = m_piRdPicQp [uiQpIdxBest]; 616 #if H0736_AVC_STYLE_QP_RANGE617 591 Double weight = 1.0; 618 592 if(iQP >= 0) … … 620 594 weight = pow( 2.0, (iQP-g_aucChromaScale[iQP])/3.0 ); // takes into account of the chroma qp mapping without chroma qp Offset 621 595 } 622 #else623 Double weight = pow( 2.0, (iQP-g_aucChromaScale[iQP])/3.0 ); // takes into account of the chroma qp mapping without chroma qp Offset624 #endif625 596 m_pcRdCost ->setChromaDistortionWeight( weight ); 626 597 #endif … … 832 803 //UInt uiHeightInLCUs = rpcPic->getPicSym()->getFrameHeightInCU(); 833 804 UInt uiCol=0, uiLin=0, uiSubStrm=0; 834 #if !REMOVE_TILE_DEPENDENCE835 Int iBreakDep = 0;836 #endif837 805 UInt uiTileCol = 0; 838 806 UInt uiTileStartLCU = 0; … … 869 837 if( m_pcCfg->getUseSBACRD() ) 870 838 { 871 #if !REMOVE_TILE_DEPENDENCE872 iBreakDep = rpcPic->getPicSym()->getTileBoundaryIndependenceIdr();873 #endif874 839 uiTileCol = rpcPic->getPicSym()->getTileIdxMap(uiCUAddr) % (rpcPic->getPicSym()->getNumColumnsMinus1()+1); // what column of tiles are we in? 875 840 uiTileStartLCU = rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))->getFirstCUAddr(); … … 878 843 uiCol = uiCUAddr % uiWidthInLCUs; 879 844 uiLin = uiCUAddr / uiWidthInLCUs; 880 #if !REMOVE_TILE_DEPENDENCE881 #if WPP_SIMPLIFICATION882 if (iBreakDep && pcSlice->getPPS()->getNumSubstreams() > 1)883 #else884 if (iBreakDep && pcSlice->getPPS()->getEntropyCodingSynchro())885 #endif886 #else887 #if WPP_SIMPLIFICATION888 845 if (pcSlice->getPPS()->getNumSubstreams() > 1) 889 #else890 if (pcSlice->getPPS()->getEntropyCodingSynchro())891 #endif892 #endif893 846 { 894 847 // independent tiles => substreams are "per tile". iNumSubstreams has already been multiplied. … … 902 855 uiSubStrm = uiLin % iNumSubstreams; 903 856 } 904 #if WPP_SIMPLIFICATION905 857 if ( pcSlice->getPPS()->getNumSubstreams() > 1 && (uiCol == uiTileLCUX) ) 906 #else907 if ( pcSlice->getPPS()->getEntropyCodingSynchro() && (uiCol == uiTileLCUX) )908 #endif909 858 { 910 859 // We'll sync if the TR is available. … … 913 862 UInt uiMaxParts = 1<<(pcSlice->getSPS()->getMaxCUDepth()<<1); 914 863 TComDataCU *pcCUTR = NULL; 915 #if WPP_SIMPLIFICATION916 864 if ( pcCUUp && ((uiCUAddr%uiWidthInCU+1) < uiWidthInCU) ) 917 865 { 918 866 pcCUTR = rpcPic->getCU( uiCUAddr - uiWidthInCU + 1 ); 919 867 } 920 #else921 if ( pcCUUp && ((uiCUAddr%uiWidthInCU+pcSlice->getPPS()->getEntropyCodingSynchro()) < uiWidthInCU) )922 {923 pcCUTR = rpcPic->getCU( uiCUAddr - uiWidthInCU + pcSlice->getPPS()->getEntropyCodingSynchro() );924 }925 #endif926 868 if ( ((pcCUTR==NULL) || (pcCUTR->getSlice()==NULL) || 927 869 (pcCUTR->getSCUAddr()+uiMaxParts-1 < pcSlice->getSliceCurStartCUAddr()) || 928 #if !REMOVE_TILE_DEPENDENCE929 (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr() && (rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(uiCUAddr)))930 #else931 870 ((rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))) 932 #endif933 871 )|| 934 872 ((pcCUTR==NULL) || (pcCUTR->getSlice()==NULL) || 935 873 (pcCUTR->getSCUAddr()+uiMaxParts-1 < pcSlice->getEntropySliceCurStartCUAddr()) || 936 #if !REMOVE_TILE_DEPENDENCE937 (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr() && (rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(uiCUAddr)))938 #else939 874 ((rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))) 940 #endif941 875 ) 942 876 ) … … 975 909 #endif 976 910 } 977 #if !REMOVE_TILE_DEPENDENCE978 if( (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr()==0) && (rpcPic->getPicSym()->getNumColumnsMinus1()!=0) )979 {980 // Synchronize cabac probabilities with LCU among Tiles981 if( (uiTileLCUX != 0) &&982 (uiCUAddr == rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))->getFirstCUAddr()) )983 {984 TComDataCU *pcCULeft = pcCU->getCULeft();985 UInt uiMaxParts = 1<<(pcSlice->getSPS()->getMaxCUDepth()<<1);986 987 if ( (true/*bEnforceSliceRestriction*/ &&988 ((pcCULeft==NULL) || (pcCULeft->getSlice()==NULL) ||989 ((pcCULeft->getSCUAddr()+uiMaxParts-1) < pcSlice->getSliceCurStartCUAddr())990 )991 )||992 (true/*bEnforceEntropySliceRestriction*/ &&993 ((pcCULeft==NULL) || (pcCULeft->getSlice()==NULL) ||994 ((pcCULeft->getSCUAddr()+uiMaxParts-1) < pcSlice->getEntropySliceCurStartCUAddr())995 )996 )997 )998 {999 // Left not available.1000 }1001 else1002 {1003 // Left is available, we use it.1004 ppppcRDSbacCoders[uiSubStrm][0][CI_CURR_BEST]->loadContexts( &m_pcBufferLowLatSbacCoders[uiTileCol-1] );1005 m_pppcRDSbacCoder[0][CI_CURR_BEST]->loadContexts( ppppcRDSbacCoders[uiSubStrm][0][CI_CURR_BEST] ); //this load is used to simplify the code1006 }1007 }1008 }1009 #endif1010 911 // if RD based on SBAC is used 1011 912 if( m_pcCfg->getUseSBACRD() ) … … 1045 946 1046 947 //Store probabilties of second LCU in line into buffer 1047 #if WPP_SIMPLIFICATION1048 948 if (pcSlice->getPPS()->getNumSubstreams() > 1 && uiCol == uiTileLCUX+1) 1049 #else1050 if (pcSlice->getPPS()->getEntropyCodingSynchro() && uiCol == uiTileLCUX+pcSlice->getPPS()->getEntropyCodingSynchro())1051 #endif1052 949 { 1053 950 m_pcBufferSbacCoders[uiTileCol].loadContexts(ppppcRDSbacCoders[uiSubStrm][0][CI_CURR_BEST]); 1054 951 } 1055 952 } 1056 #if !REMOVE_TILE_DEPENDENCE1057 if( (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr()==0) && (rpcPic->getPicSym()->getNumColumnsMinus1()!=0) )1058 {1059 //Store probabilties for next tile1060 if( (uiLin == (rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))->getFirstCUAddr() / uiWidthInLCUs )) &&1061 (uiCol == rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))->getRightEdgePosInCU()) )1062 {1063 m_pcBufferLowLatSbacCoders[uiTileCol].loadContexts(ppppcRDSbacCoders[uiSubStrm][0][CI_CURR_BEST]);1064 }1065 }1066 #endif1067 953 } 1068 954 // other case: encodeCU is not called … … 1148 1034 UInt uiWidthInLCUs = rpcPic->getPicSym()->getFrameWidthInCU(); 1149 1035 UInt uiCol=0, uiLin=0, uiSubStrm=0; 1150 #if !REMOVE_TILE_DEPENDENCE1151 Int iBreakDep = 0;1152 #endif1153 1036 UInt uiTileCol = 0; 1154 1037 UInt uiTileStartLCU = 0; … … 1166 1049 if( m_pcCfg->getUseSBACRD() ) 1167 1050 { 1168 #if !REMOVE_TILE_DEPENDENCE1169 iBreakDep = rpcPic->getPicSym()->getTileBoundaryIndependenceIdr();1170 #endif1171 1051 uiTileCol = rpcPic->getPicSym()->getTileIdxMap(uiCUAddr) % (rpcPic->getPicSym()->getNumColumnsMinus1()+1); // what column of tiles are we in? 1172 1052 uiTileStartLCU = rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))->getFirstCUAddr(); … … 1175 1055 uiCol = uiCUAddr % uiWidthInLCUs; 1176 1056 uiLin = uiCUAddr / uiWidthInLCUs; 1177 #if !REMOVE_TILE_DEPENDENCE1178 #if WPP_SIMPLIFICATION1179 if (iBreakDep && pcSlice->getPPS()->getNumSubstreams() > 1)1180 #else1181 if (iBreakDep && pcSlice->getPPS()->getEntropyCodingSynchro())1182 #endif1183 #else1184 #if WPP_SIMPLIFICATION1185 1057 if (pcSlice->getPPS()->getNumSubstreams() > 1) 1186 #else1187 if (pcSlice->getPPS()->getEntropyCodingSynchro())1188 #endif1189 #endif1190 1058 { 1191 1059 // independent tiles => substreams are "per tile". iNumSubstreams has already been multiplied. … … 1203 1071 1204 1072 // Synchronize cabac probabilities with upper-right LCU if it's available and we're at the start of a line. 1205 #if WPP_SIMPLIFICATION1206 1073 if (pcSlice->getPPS()->getNumSubstreams() > 1 && (uiCol == uiTileLCUX)) 1207 #else1208 if (pcSlice->getPPS()->getEntropyCodingSynchro() && (uiCol == uiTileLCUX))1209 #endif1210 1074 { 1211 1075 // We'll sync if the TR is available. … … 1214 1078 UInt uiMaxParts = 1<<(pcSlice->getSPS()->getMaxCUDepth()<<1); 1215 1079 TComDataCU *pcCUTR = NULL; 1216 #if WPP_SIMPLIFICATION1217 1080 if ( pcCUUp && ((uiCUAddr%uiWidthInCU+1) < uiWidthInCU) ) 1218 1081 { 1219 1082 pcCUTR = rpcPic->getCU( uiCUAddr - uiWidthInCU + 1 ); 1220 1083 } 1221 #else1222 if ( pcCUUp && ((uiCUAddr%uiWidthInCU+pcSlice->getPPS()->getEntropyCodingSynchro()) < uiWidthInCU) )1223 {1224 pcCUTR = rpcPic->getCU( uiCUAddr - uiWidthInCU + pcSlice->getPPS()->getEntropyCodingSynchro() );1225 }1226 #endif1227 1084 if ( (true/*bEnforceSliceRestriction*/ && 1228 1085 ((pcCUTR==NULL) || (pcCUTR->getSlice()==NULL) || 1229 1086 (pcCUTR->getSCUAddr()+uiMaxParts-1 < pcSlice->getSliceCurStartCUAddr()) || 1230 #if !REMOVE_TILE_DEPENDENCE1231 (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr() && (rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(uiCUAddr)))1232 #else1233 1087 ((rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))) 1234 #endif1235 1088 ))|| 1236 1089 (true/*bEnforceEntropySliceRestriction*/ && 1237 1090 ((pcCUTR==NULL) || (pcCUTR->getSlice()==NULL) || 1238 1091 (pcCUTR->getSCUAddr()+uiMaxParts-1 < pcSlice->getEntropySliceCurStartCUAddr()) || 1239 #if !REMOVE_TILE_DEPENDENCE1240 (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr() && (rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(uiCUAddr)))1241 #else1242 1092 ((rpcPic->getPicSym()->getTileIdxMap( pcCUTR->getAddr() ) != rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))) 1243 #endif1244 1093 )) 1245 1094 ) … … 1275 1124 // When tiles are independent, we have "substreams per tile". Each substream has already been terminated, and we no longer 1276 1125 // have to perform it here. 1277 #if WPP_SIMPLIFICATION1278 1126 if (pcSlice->getPPS()->getNumSubstreams() > 1) 1279 #else1280 if (pcSlice->getPPS()->getEntropyCodingSynchro())1281 #endif1282 1127 { 1283 1128 ; // do nothing. … … 1329 1174 1330 1175 TComDataCU*& pcCU = rpcPic->getCU( uiCUAddr ); 1331 #if !REMOVE_TILE_DEPENDENCE 1332 if( (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr()==0) && (rpcPic->getPicSym()->getNumColumnsMinus1()!=0) ) 1333 { 1334 // Synchronize cabac probabilities with LCU among Tiles 1335 if( (uiTileLCUX != 0) && 1336 (uiCUAddr == rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))->getFirstCUAddr()) ) 1337 { 1338 TComDataCU *pcCULeft = pcCU->getCULeft(); 1339 UInt uiMaxParts = 1<<(pcSlice->getSPS()->getMaxCUDepth()<<1); 1340 1341 if ( (true/*bEnforceSliceRestriction*/ && 1342 ((pcCULeft==NULL) || (pcCULeft->getSlice()==NULL) || 1343 ((pcCULeft->getSCUAddr()+uiMaxParts-1) < pcSlice->getSliceCurStartCUAddr()) 1344 ) 1345 )|| 1346 (true/*bEnforceEntropySliceRestriction*/ && 1347 ((pcCULeft==NULL) || (pcCULeft->getSlice()==NULL) || 1348 ((pcCULeft->getSCUAddr()+uiMaxParts-1) < pcSlice->getEntropySliceCurStartCUAddr()) 1349 ) 1350 ) 1351 ) 1352 { 1353 // Left not available. 1354 } 1355 else 1356 { 1357 // Left is available, we use it. 1358 pcSbacCoders[uiSubStrm].loadContexts( &m_pcBufferLowLatSbacCoders[uiTileCol-1] ); 1359 m_pcSbacCoder->loadContexts(&pcSbacCoders[uiSubStrm]); //this load is used to simplify the code (avoid to change all the call to m_pcSbacCoder) 1360 } 1361 } 1362 } 1363 #endif 1364 1365 #if SAO_UNIT_INTERLEAVING 1176 1366 1177 if ( pcSlice->getSPS()->getUseSAO() && pcSlice->getAPS()->getSaoInterleavingFlag() && pcSlice->getSaoEnabledFlag() ) 1367 1178 { … … 1373 1184 m_pcEntropyCoder->encodeSaoUnitInterleaving( rx, ry, pcSlice->getAPS()->getSaoParam(),pcCU, iCUAddrInSlice, iCUAddrUpInSlice, pcSlice->getSPS()->getLFCrossSliceBoundaryFlag()); 1374 1185 } 1375 #endif1376 1186 #if ENC_DEC_TRACE 1377 1187 g_bJustDoIt = g_bEncDecTraceEnable; … … 1395 1205 1396 1206 //Store probabilties of second LCU in line into buffer 1397 #if WPP_SIMPLIFICATION1398 1207 if (pcSlice->getPPS()->getNumSubstreams() > 1 && (uiCol == uiTileLCUX+1)) 1399 #else1400 if (pcSlice->getPPS()->getEntropyCodingSynchro() && (uiCol == uiTileLCUX+pcSlice->getPPS()->getEntropyCodingSynchro()))1401 #endif1402 1208 { 1403 1209 m_pcBufferSbacCoders[uiTileCol].loadContexts( &pcSbacCoders[uiSubStrm] ); 1404 1210 } 1405 1211 } 1406 #if !REMOVE_TILE_DEPENDENCE1407 if( (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr()==0) && (rpcPic->getPicSym()->getNumColumnsMinus1()!=0) )1408 {1409 pcSbacCoders[uiSubStrm].load(m_pcSbacCoder); //load back status of the entropy coder after encoding the LCU into relevant bitstream entropy coder1410 //Store probabilties for next tile1411 if( (uiLin == (rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))->getFirstCUAddr() / uiWidthInLCUs )) &&1412 (uiCol == rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(uiCUAddr))->getRightEdgePosInCU()) )1413 {1414 m_pcBufferLowLatSbacCoders[uiTileCol].loadContexts( &pcSbacCoders[uiSubStrm] );1415 }1416 }1417 #endif1418 1212 1419 1213 #if OL_QTLIMIT_PREDCODING_B0068 … … 1445 1239 TComSlice* pcSlice = rpcPic->getSlice(getSliceIdx()); 1446 1240 UInt uiStartCUAddrSlice, uiBoundingCUAddrSlice; 1447 #if FIXED_NUMBER_OF_TILES_SLICE_MODE1448 1241 UInt tileIdxIncrement; 1449 1242 UInt tileIdx; … … 1451 1244 UInt tileHeightInLcu; 1452 1245 UInt tileTotalCount; 1453 #endif1454 1246 1455 1247 uiStartCUAddrSlice = pcSlice->getSliceCurStartCUAddr(); … … 1469 1261 uiBoundingCUAddrSlice = pcSlice->getSliceCurEndCUAddr(); 1470 1262 break; 1471 #if FIXED_NUMBER_OF_TILES_SLICE_MODE1472 1263 case AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE: 1473 1264 tileIdx = rpcPic->getPicSym()->getTileIdxMap( … … 1489 1280 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1490 1281 break; 1491 #endif1492 1282 default: 1493 1283 uiCUAddrIncrement = rpcPic->getNumCUsInFrame(); … … 1506 1296 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1507 1297 break; 1508 #if FIXED_NUMBER_OF_TILES_SLICE_MODE1509 1298 case AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE: 1510 1299 tileIdx = rpcPic->getPicSym()->getTileIdxMap( … … 1526 1315 uiBoundingCUAddrSlice = ((uiStartCUAddrSlice + uiCUAddrIncrement) < uiNumberOfCUsInFrame*rpcPic->getNumPartInCU()) ? (uiStartCUAddrSlice + uiCUAddrIncrement) : uiNumberOfCUsInFrame*rpcPic->getNumPartInCU(); 1527 1316 break; 1528 #endif1529 1317 default: 1530 1318 uiCUAddrIncrement = rpcPic->getNumCUsInFrame(); … … 1535 1323 } 1536 1324 1537 #if COMPLETE_SLICES_IN_TILE1538 1325 Bool tileBoundary = false; 1539 1326 if ((m_pcCfg->getSliceMode() == AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE || m_pcCfg->getSliceMode() == AD_HOC_SLICES_FIXED_NUMBER_OF_BYTES_IN_SLICE) && … … 1558 1345 } 1559 1346 } 1560 #endif1561 1347 1562 1348 // Entropy slice … … 1663 1449 || (m_pcCfg->getSliceMode()==0 && m_pcCfg->getEntropySliceMode()==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE) 1664 1450 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_LCU_IN_SLICE && m_pcCfg->getEntropySliceMode()==0) 1665 #if FIXED_NUMBER_OF_TILES_SLICE_MODE1666 1451 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE && m_pcCfg->getEntropySliceMode()==SHARP_FIXED_NUMBER_OF_LCU_IN_ENTROPY_SLICE) 1667 1452 || (m_pcCfg->getSliceMode()==AD_HOC_SLICES_FIXED_NUMBER_OF_TILES_IN_SLICE && m_pcCfg->getEntropySliceMode()==0) 1668 #endif1669 #if COMPLETE_SLICES_IN_TILE1670 1453 || tileBoundary 1671 #endif1672 1454 ) 1673 1455 { -
branches/HTM-5.1-dev0/source/Lib/TLibEncoder/TEncTop.cpp
r292 r294 103 103 if (m_bUseSAO) 104 104 { 105 #if SAO_UNIT_INTERLEAVING106 105 m_cEncSAO.setSaoInterleavingFlag(getSaoInterleavingFlag()); 107 106 m_cEncSAO.setMaxNumOffsetsPerPic(getMaxNumOffsetsPerPic()); 108 #endif109 107 m_cEncSAO.create( getSourceWidth(), getSourceHeight(), g_uiMaxCUWidth, g_uiMaxCUHeight, g_uiMaxCUDepth ); 110 108 m_cEncSAO.createEncBuffer(); … … 128 126 if(m_bUseALF) 129 127 { 130 #if LCU_SYNTAX_ALF131 128 m_cAdaptiveLoopFilter.setAlfCoefInSlice(m_bALFParamInSlice); 132 129 m_cAdaptiveLoopFilter.createAlfGlobalBuffers(); 133 #else134 m_cAdaptiveLoopFilter.setGOPSize( getGOPSize() );135 m_cAdaptiveLoopFilter.createAlfGlobalBuffers(m_iALFEncodePassReduction);136 #endif137 130 } 138 131 … … 333 326 // initialize PPS 334 327 m_cPPS.setSPS(&m_cSPS); 335 #if RPS_IN_SPS336 328 m_cSPS.setRPSList(&m_RPSList); 337 #else338 m_cPPS.setRPSList(&m_RPSList);339 #endif340 329 xInitPPS(); 341 330 xInitRPS(); … … 384 373 m_cAdaptiveLoopFilter.setALFEncodePassReduction( m_iALFEncodePassReduction ); 385 374 m_cAdaptiveLoopFilter.setALFMaxNumberFilters( m_iALFMaxNumberFilters ); 386 #if LCU_SYNTAX_ALF387 375 m_cAdaptiveLoopFilter.initPicQuadTreePartition(m_bALFPicBasedEncode ); 388 #endif389 376 } 390 377 … … 553 540 TComSlice::sortPicList(m_cListPic); 554 541 555 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER556 542 if (m_cListPic.size() >= (UInt)(m_iGOPSize + getMaxDecPicBuffering(MAX_TLAYER-1) + 2) ) 557 #else558 if (m_cListPic.size() >= (UInt)(m_iGOPSize + getMaxNumberOfReferencePictures() + 2) )559 #endif560 543 { 561 544 TComList<TComPic*>::iterator iterPic = m_cListPic.begin(); … … 611 594 m_cSPS.setPicWidthInLumaSamples ( m_iSourceWidth ); 612 595 m_cSPS.setPicHeightInLumaSamples ( m_iSourceHeight ); 613 #if PIC_CROPPING614 596 m_cSPS.setPicCroppingFlag( m_croppingMode!= 0 ); 615 597 if (m_croppingMode != 0) … … 620 602 m_cSPS.setPicCropBottomOffset( m_cropBottom ); 621 603 } 622 #else623 m_cSPS.setPad ( m_aiPad );624 #endif625 604 m_cSPS.setMaxCUWidth ( g_uiMaxCUWidth ); 626 605 m_cSPS.setMaxCUHeight ( g_uiMaxCUHeight ); … … 629 608 m_cSPS.setMaxTrDepth ( 1 ); 630 609 631 #if !H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER632 m_cSPS.setMaxNumberOfReferencePictures(m_maxNumberOfReferencePictures);633 m_cSPS.setNumReorderFrames(m_numReorderFrames);634 #endif635 610 m_cSPS.setPCMLog2MinSize (m_uiPCMLog2MinSize); 636 611 m_cSPS.setUsePCM ( m_usePCM ); … … 638 613 639 614 m_cSPS.setUseALF ( m_bUseALF ); 640 #if LCU_SYNTAX_ALF641 615 if(m_bUseALF) 642 616 { 643 617 m_cSPS.setUseALFCoefInSlice(m_bALFParamInSlice); 644 618 } 645 #endif646 619 647 620 #if RWTH_SDC_DLT_B0036 … … 657 630 m_cSPS.setUseLossless ( m_useLossless ); 658 631 #endif 659 #if !PIC_CROPPING660 m_cSPS.setUsePAD ( m_bUsePAD );661 #endif662 632 m_cSPS.setUseLMChroma ( m_bUseLMChroma ); 663 633 … … 696 666 m_cSPS.setBitDepth ( g_uiBitDepth ); 697 667 m_cSPS.setBitIncrement( g_uiBitIncrement ); 698 #if H0736_AVC_STYLE_QP_RANGE699 668 m_cSPS.setQpBDOffsetY ( (Int)(6*(g_uiBitDepth + g_uiBitIncrement - 8)) ); 700 669 m_cSPS.setQpBDOffsetC ( (Int)(6*(g_uiBitDepth + g_uiBitIncrement - 8)) ); 701 #endif702 670 703 671 m_cSPS.setLFCrossSliceBoundaryFlag( m_bLFCrossSliceBoundaryFlag ); 704 672 m_cSPS.setUseSAO( m_bUseSAO ); 705 673 706 #if !H0566_TLA707 if ( m_bTLayering )708 {709 Int iMaxTLayers = 1;710 for ( i = 1; ; i++)711 {712 iMaxTLayers = i;713 if ( (m_iGOPSize >> i) == 0 )714 {715 break;716 }717 }718 719 m_cSPS.setMaxTLayers( (UInt)iMaxTLayers );720 721 Bool bTemporalIdNestingFlag = true;722 for ( i = 0; i < m_cSPS.getMaxTLayers()-1; i++ )723 {724 if ( !m_abTLayerSwitchingFlag[i] )725 {726 bTemporalIdNestingFlag = false;727 break;728 }729 }730 731 m_cSPS.setTemporalIdNestingFlag( bTemporalIdNestingFlag );732 }733 else734 {735 m_cSPS.setMaxTLayers( 1 );736 m_cSPS.setTemporalIdNestingFlag( false );737 }738 #else739 674 m_cSPS.setMaxTLayers( m_maxTempLayer ); 740 675 m_cSPS.setTemporalIdNestingFlag( false ); 741 #endif742 #if H0567_DPB_PARAMETERS_PER_TEMPORAL_LAYER743 676 for ( i = 0; i < m_cSPS.getMaxTLayers(); i++ ) 744 677 { … … 746 679 m_cSPS.setNumReorderPics(m_numReorderPics[i], i); 747 680 } 748 #endif749 681 m_cSPS.setPCMBitDepthLuma (g_uiPCMBitDepthLuma); 750 682 m_cSPS.setPCMBitDepthChroma (g_uiPCMBitDepthChroma); … … 753 685 m_cSPS.setLFCrossTileBoundaryFlag( m_bLFCrossTileBoundaryFlag ); 754 686 m_cSPS.setUniformSpacingIdr( m_iUniformSpacingIdr ); 755 #if !REMOVE_TILE_DEPENDENCE756 m_cSPS.setTileBoundaryIndependenceIdr( m_iTileBoundaryIndependenceIdr );757 #endif758 687 m_cSPS.setNumColumnsMinus1( m_iNumColumnsMinus1 ); 759 688 m_cSPS.setNumRowsMinus1( m_iNumRowsMinus1 ); … … 827 756 m_cPPS.setConstrainedIntraPred( m_bUseConstrainedIntraPred ); 828 757 m_cPPS.setSliceGranularity(m_iSliceGranularity); 829 #if !H0566_TLA830 if ( m_cSPS.getTemporalIdNestingFlag() )831 {832 m_cPPS.setNumTLayerSwitchingFlags( 0 );833 for ( UInt i = 0; i < m_cSPS.getMaxTLayers() - 1; i++ )834 {835 m_cPPS.setTLayerSwitchingFlag( i, true );836 }837 }838 else839 {840 m_cPPS.setNumTLayerSwitchingFlags( m_cSPS.getMaxTLayers() - 1 );841 for ( UInt i = 0; i < m_cPPS.getNumTLayerSwitchingFlags(); i++ )842 {843 m_cPPS.setTLayerSwitchingFlag( i, m_abTLayerSwitchingFlag[i] );844 }845 }846 #endif847 758 Bool bUseDQP = (getMaxCuDQPDepth() > 0)? true : false; 848 759 849 760 #if LOSSLESS_CODING 850 #if H0736_AVC_STYLE_QP_RANGE851 761 Int lowestQP = - m_cSPS.getQpBDOffsetY(); 852 #else853 Int lowestQP = 0;854 #endif855 762 856 763 if(getUseLossless()) … … 903 810 904 811 m_cPPS.setEntropyCodingMode( 1 ); // In the PPS now, but also remains in slice header! 905 #if !WPP_SIMPLIFICATION906 m_cPPS.setEntropyCodingSynchro(m_iWaveFrontSynchro);907 m_cPPS.setCabacIstateReset(m_iWaveFrontFlush != 0);908 #endif909 812 m_cPPS.setNumSubstreams(m_iWaveFrontSubstreams); 910 813 m_cPPS.setUseWP( m_bUseWeightPred ); 911 814 m_cPPS.setWPBiPredIdc( m_uiBiPredIdc ); 912 815 m_cPPS.setEnableTMVPFlag( m_bEnableTMVP ); 913 #if H0388914 816 m_cPPS.setOutputFlagPresentFlag( false ); 915 #endif916 #if MULTIBITS_DATA_HIDING917 817 m_cPPS.setSignHideFlag(getSignHideFlag()); 918 818 m_cPPS.setTSIG(getTSIG()); 919 #endif920 #if DBL_CONTROL921 819 m_cPPS.setDeblockingFilterControlPresent (m_DeblockingFilterControlPresent ); 922 #endif923 #if PARALLEL_MERGE924 820 m_cPPS.setLog2ParallelMergeLevelMinus2 (LOG2_PARALLEL_MERGE_LEVEL_MINUS2); 925 #endif926 821 #if CABAC_INIT_FLAG 927 822 m_cPPS.setCabacInitPresentFlag(CABAC_INIT_PRESENT_FLAG); … … 1102 997 m_cPPS.setColumnRowInfoPresent( m_iColumnRowInfoPresent ); 1103 998 m_cPPS.setUniformSpacingIdr( m_iUniformSpacingIdr ); 1104 #if !REMOVE_TILE_DEPENDENCE1105 m_cPPS.setTileBoundaryIndependenceIdr( m_iTileBoundaryIndependenceIdr );1106 #endif1107 999 m_cPPS.setNumColumnsMinus1( m_iNumColumnsMinus1 ); 1108 1000 m_cPPS.setNumRowsMinus1( m_iNumRowsMinus1 ); -
branches/HTM-5.1-dev0/source/Lib/TLibExtractor/TExtrTop.cpp
r280 r294 77 77 { 78 78 TComSPS cSPS; 79 #if RPS_IN_SPS80 79 TComRPSList cRPS; 81 80 cSPS.setRPSList( &cRPS ); 82 #endif83 81 #if HHI_MPI || OL_QTLIMIT_PREDCODING_B0068 84 82 #if VIDYO_VPS_INTEGRATION -
branches/HTM-5.1-dev0/source/Lib/TLibVideoIO/TVideoIOYuv.cpp
r56 r294 413 413 * @return true for success, false in case of error 414 414 */ 415 #if PIC_CROPPING416 415 Bool TVideoIOYuv::write( TComPicYuv* pPicYuv, Int cropLeft, Int cropRight, Int cropTop, Int cropBottom ) 417 #else418 bool TVideoIOYuv::write( TComPicYuv* pPicYuv, Int aiPad[2] )419 #endif420 416 { 421 417 // compute actual YUV frame size excluding padding size 422 418 Int iStride = pPicYuv->getStride(); 423 #if PIC_CROPPING424 419 UInt width = pPicYuv->getWidth() - cropLeft - cropRight; 425 420 UInt height = pPicYuv->getHeight() - cropTop - cropBottom; 426 #else427 unsigned int width = pPicYuv->getWidth() - aiPad[0];428 unsigned int height = pPicYuv->getHeight() - aiPad[1];429 #endif430 421 bool is16bit = m_fileBitdepth > 8; 431 422 TComPicYuv *dstPicYuv = NULL; … … 456 447 dstPicYuv = pPicYuv; 457 448 } 458 #if PIC_CROPPING459 449 // location of upper left pel in a plane 460 450 Int planeOffset = 0; //cropLeft + cropTop * iStride; 461 451 462 452 if (! writePlane(m_cHandle, dstPicYuv->getLumaAddr() + planeOffset, is16bit, iStride, width, height)) 463 #else464 if (! writePlane(m_cHandle, dstPicYuv->getLumaAddr(), is16bit, iStride, width, height))465 #endif466 453 { 467 454 retval=false; … … 472 459 height >>= 1; 473 460 iStride >>= 1; 474 #if PIC_CROPPING475 461 cropLeft >>= 1; 476 462 cropRight >>= 1; … … 479 465 480 466 if (! writePlane(m_cHandle, dstPicYuv->getCbAddr() + planeOffset, is16bit, iStride, width, height)) 481 #else482 if (! writePlane(m_cHandle, dstPicYuv->getCbAddr(), is16bit, iStride, width, height))483 #endif484 467 { 485 468 retval=false; 486 469 goto exit; 487 470 } 488 #if PIC_CROPPING489 471 if (! writePlane(m_cHandle, dstPicYuv->getCrAddr() + planeOffset, is16bit, iStride, width, height)) 490 #else491 if (! writePlane(m_cHandle, dstPicYuv->getCrAddr(), is16bit, iStride, width, height))492 #endif493 472 { 494 473 retval=false; -
branches/HTM-5.1-dev0/source/Lib/TLibVideoIO/TVideoIOYuv.h
r56 r294 69 69 70 70 bool read ( TComPicYuv* pPicYuv, Int aiPad[2], Bool bRewind = false ); ///< read one YUV frame with padding parameter 71 #if PIC_CROPPING72 71 Bool write( TComPicYuv* pPicYuv, Int cropLeft=0, Int cropRight=0, Int cropTop=0, Int cropBottom=0 ); 73 #else74 bool write ( TComPicYuv* pPicYuv, Int aiPad[2] ); ///< write one YUV frame with padding parameter75 #endif76 72 77 73 bool isEof (); ///< check for end-of-file
Note: See TracChangeset for help on using the changeset viewer.