Changeset 534 in 3DVCSoftware for branches/HTM-DEV-0.3-dev2/source/Lib
- Timestamp:
- 13 Jul 2013, 10:26:41 (12 years ago)
- Location:
- branches/HTM-DEV-0.3-dev2/source/Lib
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-DEV-0.3-dev2/source/Lib/TAppCommon/program_options_lite.cpp
r324 r534 39 39 #include <map> 40 40 #include "program_options_lite.h" 41 41 #include "../TLibCommon/TypeDef.h" 42 42 using namespace std; 43 43 … … 146 146 for(Options::NamesPtrList::iterator it = opts.opt_list.begin(); it != opts.opt_list.end(); it++) 147 147 { 148 #if H_MV 149 if ( (*it)->opt->opt_duplicate ) continue; 150 #endif 148 151 ostringstream line(ios_base::out); 149 152 doHelpOpt(line, **it, pad_short); … … 161 164 for(Options::NamesPtrList::iterator it = opts.opt_list.begin(); it != opts.opt_list.end(); it++) 162 165 { 166 #if H_MV 167 if ( (*it)->opt->opt_duplicate ) continue; 168 #endif 163 169 ostringstream line(ios_base::out); 164 170 line << " "; -
branches/HTM-DEV-0.3-dev2/source/Lib/TAppCommon/program_options_lite.h
r446 r534 36 36 #include <list> 37 37 #include <map> 38 #include "../TLibCommon/TypeDef.h" 38 39 39 40 #if H_MV … … 85 86 struct OptionBase 86 87 { 88 #if H_MV 89 OptionBase(const std::string& name, const std::string& desc, bool duplicate = false) 90 : opt_string(name), opt_desc(desc), opt_duplicate(duplicate) 91 #else 87 92 OptionBase(const std::string& name, const std::string& desc) 88 93 : opt_string(name), opt_desc(desc) 94 #endif 89 95 {}; 90 96 … … 98 104 std::string opt_string; 99 105 std::string opt_desc; 106 #if H_MV 107 bool opt_duplicate; 108 #endif 100 109 }; 101 110 … … 104 113 struct Option : public OptionBase 105 114 { 115 #if H_MV 116 Option(const std::string& name, T& storage, T default_val, const std::string& desc, bool duplicate = false) 117 : OptionBase(name, desc, duplicate), opt_storage(storage), opt_default_val(default_val) 118 #else 106 119 Option(const std::string& name, T& storage, T default_val, const std::string& desc) 107 120 : OptionBase(name, desc), opt_storage(storage), opt_default_val(default_val) 121 #endif 108 122 {} 109 123 … … 362 376 { 363 377 std::string cNameBuffer; 364 std::string cDesc riptionBuffer;378 std::string cDescBuffer; 365 379 366 380 cNameBuffer .resize( name.size() + 10 ); 367 cDesc riptionBuffer.resize( desc.size() + 10 );381 cDescBuffer.resize( desc.size() + 10 ); 368 382 369 383 storage.resize(uiMaxNum); 370 384 for ( unsigned int uiK = 0; uiK < uiMaxNum; uiK++ ) 371 385 { 386 Bool duplicate = (uiK != 0); 372 387 // isn't there are sprintf function for string?? 373 388 sprintf((char*) cNameBuffer.c_str() ,name.c_str(),uiK,uiK); 374 sprintf((char*) cDescriptionBuffer.c_str(),desc.c_str(),uiK,uiK); 375 376 parent.addOption(new Option<T>( cNameBuffer, (storage[uiK]), default_val, cDescriptionBuffer )); 389 390 if ( !duplicate ) 391 { 392 sprintf((char*) cDescBuffer.c_str(),desc.c_str(),uiK,uiK); 393 } 394 395 cNameBuffer.resize( std::strlen(cNameBuffer.c_str()) ); 396 cDescBuffer.resize( std::strlen(cDescBuffer.c_str()) ); 397 398 399 parent.addOption(new Option<T>( cNameBuffer, (storage[uiK]), default_val, cDescBuffer, duplicate )); 377 400 } 378 401 -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComDataCU.cpp
r532 r534 4321 4321 4322 4322 // use coldir. 4323 #if H_MV 4324 TComPic *pColPic; 4325 if (getSlice()->getAltCollocatedIndicationFlag() ) 4326 { 4327 pColPic = getSlice()->getPicFromRefPicSetInterLayer( getSlice()->getActiveMotionPredRefLayerId( getSlice()->getCollocatedRefLayerIdx() )); 4328 } 4329 else 4330 { 4331 pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx()); 4332 } 4333 #else 4323 4334 TComPic *pColPic = getSlice()->getRefPic( RefPicList(getSlice()->isInterB() ? 1-getSlice()->getColFromL0Flag() : 0), getSlice()->getColRefIdx()); 4335 #endif 4324 4336 TComDataCU *pColCU = pColPic->getCU( uiCUAddr ); 4325 4337 if(pColCU->getPic()==0||pColCU->getPartitionSize(uiPartUnitIdx)==SIZE_NONE) -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComSlice.cpp
r532 r534 108 108 , m_enableTMVPFlag ( true ) 109 109 #if H_MV 110 , m_refPicSetInterLayer ( NULL ) 110 111 , m_layerId (0) 111 112 , m_viewId (0) … … 114 115 , m_isDepth (false) 115 116 #endif 117 , m_discardableFlag (false) 118 , m_interLayerPredEnabledFlag (false) 119 , m_numInterLayerRefPicsMinus1 (0) 120 , m_interLayerSamplePredOnlyFlag (false) 121 , m_altCollocatedIndicationFlag (0) 122 , m_collocatedRefLayerIdx (0) 116 123 #if H_3D_IC 117 124 , m_bApplyIC ( false ) … … 162 169 initWpAcDcParam(); 163 170 m_saoEnabledFlag = false; 171 #if H_MV 172 for (Int i = 0; i < MAX_NUM_LAYERS; i++ ) 173 { 174 m_interLayerPredLayerIdc[ i ] = 0; 175 } 176 #endif 164 177 } 165 178 … … 492 505 UInt NumPocStCurr1 = 0; 493 506 UInt NumPocLtCurr = 0; 494 #if H_MV495 Int numDirectRefLayers = getVPS()->getNumDirectRefLayers( getLayerIdInVps() );496 assert( numDirectRefLayers == refPicSetInterLayer.size() );497 #endif498 507 Int i; 499 508 for(i=0; i < m_pcRPS->getNumberOfNegativePictures(); i++) … … 544 553 TComPic* rpsCurrList1[MAX_NUM_REF+1]; 545 554 #if H_MV 546 Int numPocTotalCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr + numDirectRefLayers; 555 Int numPocInterCurr = NumPocStCurr0 + NumPocStCurr1 + NumPocLtCurr; 556 assert( numPocInterCurr == 0 || getInterRefEnabledInRPLFlag() ); 557 Int numPocTotalCurr = numPocInterCurr + getNumActiveRefLayerPics( ); 547 558 assert( numPocTotalCurr == getNumRpsCurrTempList() ); 548 559 #else … … 582 593 583 594 Int cIdx = 0; 595 #if H_MV 596 if ( getInterRefEnabledInRPLFlag() ) 597 { 598 #endif 584 599 for ( i=0; i<NumPocStCurr0; i++, cIdx++) 585 600 { … … 595 610 } 596 611 #if H_MV 597 for ( i=0; i<numDirectRefLayers; i++, cIdx++)598 {599 if( cIdx <= MAX_NUM_REF )600 {612 } 613 for ( i=0; i < getNumActiveRefLayerPics( ); i++, cIdx++) 614 { 615 assert( cIdx < MAX_NUM_REF ); 601 616 rpsCurrList0[cIdx] = refPicSetInterLayer[i]; 602 617 } 603 }604 618 #endif 605 619 … … 607 621 { 608 622 cIdx = 0; 623 #if H_MV 624 if ( getInterRefEnabledInRPLFlag() ) 625 { 626 #endif 609 627 for ( i=0; i<NumPocStCurr1; i++, cIdx++) 610 628 { … … 620 638 } 621 639 #if H_MV 622 for ( i=0; i<numDirectRefLayers; i++, cIdx++)623 {624 if( cIdx <= MAX_NUM_REF )625 {640 } 641 for ( i=0; i < getNumActiveRefLayerPics( ); i++, cIdx++) 642 { 643 assert( cIdx < MAX_NUM_REF ); 626 644 rpsCurrList1[cIdx] = refPicSetInterLayer[i]; 627 645 } 628 }629 646 #endif 630 647 } 631 648 632 649 ::memset(m_bIsUsedAsLongTerm, 0, sizeof(m_bIsUsedAsLongTerm)); 650 651 #if H_MV 652 Int numPocSt = NumPocStCurr0 + NumPocStCurr1; 653 assert( getInterRefEnabledInRPLFlag( ) || numPocSt == 0 ); 654 655 for (Int li = 0; li < 2; li++) 656 { 657 if ( m_eSliceType == P_SLICE && li == 1 ) 658 { 659 m_aiNumRefIdx[1] = 0; 660 ::memset( m_apcRefPicList[1], 0, sizeof(m_apcRefPicList[1])); 661 } 662 else 663 { 664 for (Int rIdx = 0; rIdx <= (m_aiNumRefIdx[ li ] - 1 ); rIdx ++) 665 { 666 Bool listModified = m_RefPicListModification.getRefPicListModificationFlagL( li ); 667 Int orgIdx = listModified ? m_RefPicListModification.getRefPicSetIdxL(li, rIdx) : (rIdx % numPocTotalCurr); 668 669 m_apcRefPicList [li][rIdx] = ( li == 0 ) ? rpsCurrList0[ orgIdx ] : rpsCurrList1[ orgIdx ]; 670 m_bIsUsedAsLongTerm[li][rIdx] = ( orgIdx >= numPocSt ) ; 671 } 672 } 673 } 674 #else 633 675 634 676 for (Int rIdx = 0; rIdx <= (m_aiNumRefIdx[0]-1); rIdx ++) … … 652 694 } 653 695 } 696 #endif 654 697 } 655 698 … … 687 730 } 688 731 #if H_MV 689 numRpsCurrTempList = numRpsCurrTempList + getVPS()->getNumDirectRefLayers( getLayerIdInVps() ); 732 assert( ( numRpsCurrTempList == 0 ) || getInterRefEnabledInRPLFlag() ); 733 numRpsCurrTempList = numRpsCurrTempList + getNumActiveRefLayerPics(); 690 734 #endif 691 735 return numRpsCurrTempList; … … 1022 1066 m_enableTMVPFlag = pSrc->m_enableTMVPFlag; 1023 1067 m_maxNumMergeCand = pSrc->m_maxNumMergeCand; 1068 1069 #if H_MV 1070 // Additional slice header syntax elements 1071 m_discardableFlag = pSrc->m_discardableFlag; 1072 m_interLayerPredEnabledFlag = pSrc->m_interLayerPredEnabledFlag; 1073 m_numInterLayerRefPicsMinus1 = pSrc->m_numInterLayerRefPicsMinus1; 1074 1075 for (Int layer = 0; layer < MAX_NUM_LAYERS; layer++ ) 1076 { 1077 m_interLayerPredLayerIdc[ layer ] = pSrc->m_interLayerPredLayerIdc[ layer ]; 1078 } 1079 1080 m_interLayerSamplePredOnlyFlag = pSrc->m_interLayerSamplePredOnlyFlag; 1081 m_altCollocatedIndicationFlag = pSrc->m_altCollocatedIndicationFlag ; 1082 m_collocatedRefLayerIdx = pSrc->m_collocatedRefLayerIdx ; 1083 m_numActiveMotionPredRefLayers = pSrc->m_numActiveMotionPredRefLayers; 1084 1085 for (Int layer = 0; layer < MAX_NUM_LAYER_IDS; layer++) 1086 { 1087 m_interLayerPredLayerIdc[layer] = pSrc->m_interLayerPredLayerIdc[layer]; 1088 } 1089 #endif 1024 1090 #if H_3D_IC 1025 1091 m_bApplyIC = pSrc->m_bApplyIC; … … 1489 1555 , m_numHrdParameters ( 0) 1490 1556 #if H_MV 1491 , m_max NuhLayerId ( 0)1557 , m_maxLayerId ( 0) 1492 1558 #else 1493 1559 , m_maxNuhReservedZeroLayerId ( 0) … … 1508 1574 } 1509 1575 #if H_MV 1576 for (Int lsIdx = 0; lsIdx < MAX_VPS_OP_SETS_PLUS1; lsIdx++ ) 1577 { 1578 for( Int layerId = 0; layerId < MAX_VPS_NUH_LAYER_ID_PLUS1; layerId++ ) 1579 { 1580 m_layerIdIncludedFlag[lsIdx][layerId] = false; 1581 } 1582 } 1583 1584 m_vpsNumberLayerSetsMinus1 = -1; 1585 m_vpsNumProfileTierLevelMinus1 = -1; 1586 1587 for ( Int i = 0; i < MAX_VPS_PROFILE_TIER_LEVEL; i++) 1588 { 1589 m_profileRefMinus1[ i ] = -1; 1590 } 1591 1592 m_moreOutputLayerSetsThanDefaultFlag = false; 1593 m_numAddOutputLayerSetsMinus1 = -1; 1594 m_defaultOneTargetOutputLayerFlag = false; 1595 1596 for ( Int i = 0; i < MAX_VPS_OUTPUTLAYER_SETS; i++) 1597 { 1598 m_outputLayerSetIdxMinus1[i] = -1; 1599 m_profileLevelTierIdx[i] = 0; 1600 for ( Int j = 0; j < MAX_VPS_NUH_LAYER_ID_PLUS1; j++) 1601 { 1602 m_outputLayerFlag[i][j] = false; 1603 } 1604 } 1605 1606 m_maxOneActiveRefLayerFlag = false; 1607 m_directDepTypeLenMinus2 = 0; 1608 1609 1510 1610 m_avcBaseLayerFlag = false; 1511 1611 m_splittingFlag = false; … … 1518 1618 1519 1619 m_vpsNuhLayerIdPresentFlag = false; 1520 m_numOutputLayerSets = 0;1521 1620 1522 1621 for( Int i = 0; i < MAX_VPS_OP_SETS_PLUS1; i++ ) 1523 1622 { 1524 1623 m_vpsProfilePresentFlag [i] = false; 1525 m_profile LayerSetRefMinus1[i] = 0;1526 m_outputLayerSetIdx [i] = 0;1624 m_profileRefMinus1[i] = 0; 1625 m_outputLayerSetIdxMinus1 [i] = 0; 1527 1626 for( Int j = 0; j < MAX_VPS_NUH_LAYER_ID_PLUS1; j++ ) 1528 1627 { … … 1540 1639 m_layerIdInNuh [i] = ( i == 0 ) ? 0 : -1; 1541 1640 m_numDirectRefLayers[i] = 0; 1641 m_maxTidIlRefPicPlus1[i] = -1; 1542 1642 #if H_3D 1543 1643 m_viewIndex [i] = -1; … … 1566 1666 { 1567 1667 m_directDependencyFlag[i][j] = false; 1668 m_directDependencyType[i][j] = -1; 1568 1669 m_refLayerId[i][j] = -1; 1569 1670 } … … 1686 1787 Bool TComVPS::checkVPSExtensionSyntax() 1687 1788 { 1688 // check splitting flag constraint1689 if ( getSplittingFlag() )1690 {1691 // Derive dimBitOffset[j]1692 Int dimBitOffset[MAX_NUM_SCALABILITY_TYPES+1];1693 Int numScalabilityTypes = getNumScalabilityTypes();1694 dimBitOffset[0] = 0;1695 1696 for (Int type = 1; type <= numScalabilityTypes; type++ )1697 {1698 dimBitOffset[ type ] = 0;1699 for (Int dimIdx = 0; dimIdx <= type - 1; dimIdx++)1700 dimBitOffset[ type ] += ( getDimensionIdLen( dimIdx ) );1701 }1702 1703 for (Int type = 0; type < getNumScalabilityTypes(); type++ )1704 {1705 for( Int layer = 1; layer < getMaxLayers(); layer++ )1706 {1707 assert( getDimensionId( layer, type ) == ( ( getLayerIdInNuh( layer ) & ( (1 << dimBitOffset[ type + 1 ] ) - 1) ) >> dimBitOffset[ type ] ) );1708 };1709 };1710 }1711 1712 1789 for( Int layer = 1; layer < getMaxLayers(); layer++ ) 1713 1790 { … … 1737 1814 } 1738 1815 1739 1740 1741 1816 Void TComVPS::setScalabilityMask( UInt val ) 1742 1817 { … … 1745 1820 } 1746 1821 1747 Void TComVPS:: calcIvRefLayers()1748 { 1749 for( Int i = 1; i <= getMaxLayers(); i++ )1822 Void TComVPS::setRefLayers() 1823 { 1824 for( Int i = 0; i < MAX_NUM_LAYERS; i++ ) 1750 1825 { 1826 m_numSamplePredRefLayers[ i ] = 0; 1827 m_numMotionPredRefLayers[ i ] = 0; 1751 1828 m_numDirectRefLayers[ i ] = 0; 1829 for( Int j = 0; j < MAX_NUM_LAYERS; j++ ) { 1830 m_samplePredEnabledFlag[ i ][ j ] = 0; 1831 m_motionPredEnabledFlag[ i ][ j ] = 0; 1832 m_refLayerId[ i ][ j ] = 0; 1833 m_samplePredRefLayerId[ i ][ j ] = 0; 1834 m_motionPredRefLayerId[ i ][ j ] = 0; 1835 } 1836 } 1837 1838 for( Int i = 1; i <= getMaxLayers()- 1; i++ ) 1839 { 1840 for( Int j = 0; j < i; j++ ) 1841 { 1842 if( getDirectDependencyFlag(i,j) ) 1843 { 1844 m_refLayerId[ i ][m_numDirectRefLayers[ i ]++ ] = getLayerIdInNuh( j ); 1845 1846 m_samplePredEnabledFlag [ i ][ j ] = ( ( getDirectDependencyType( i , j ) + 1 ) & 1 ) == 1; 1847 m_numSamplePredRefLayers[ i ] += m_samplePredEnabledFlag [ i ][ j ] ? 1 : 0; 1848 m_motionPredEnabledFlag [ i ][ j ] = ( ( ( getDirectDependencyType( i , j ) + 1 ) & 2 ) >> 1 ) == 1; 1849 m_numMotionPredRefLayers[ i ] += m_motionPredEnabledFlag [ i][ j ] ? 1 : 0; 1850 } 1851 } 1852 } 1853 1854 for( Int i = 1, mIdx = 0, sIdx = 0; i <= getMaxLayers()- 1; i++ ) 1855 { 1752 1856 for( Int j = 0 ; j < i; j++ ) 1753 if( m_directDependencyFlag[ i ][ j ]) 1754 m_refLayerId[ i ][ m_numDirectRefLayers[ i ]++ ] = m_layerIdInNuh[ j ]; 1857 { 1858 if( m_motionPredEnabledFlag[ i ][ j ] ) 1859 { 1860 m_motionPredRefLayerId[ i ][ mIdx++ ] = getLayerIdInNuh( j ); 1861 } 1862 1863 if( m_samplePredEnabledFlag[ i ][ j ] ) 1864 { 1865 m_samplePredRefLayerId[ i ][ sIdx++ ] = getLayerIdInNuh( j ); 1866 } 1867 } 1755 1868 } 1756 1869 } … … 1814 1927 return getLayerIdInNuh( foundlayerId ); 1815 1928 } 1929 1816 1930 #endif // H_3D 1931 1932 Int TComVPS::xCeilLog2( Int val ) 1933 { 1934 assert( val > 0 ); 1935 Int ceilLog2 = 0; 1936 while( val > ( 1 << ceilLog2 ) ) ceilLog2++; 1937 return ceilLog2; 1938 } 1939 1940 1941 Int TComVPS::xGetDimBitOffset( Int j ) 1942 { 1943 Int dimBitOffset = 0; 1944 if ( getSplittingFlag() && j == getNumScalabilityTypes() ) 1945 { 1946 dimBitOffset = 6; 1947 } 1948 else 1949 { 1950 for (Int dimIdx = 0; dimIdx <= j-1; dimIdx++) 1951 { 1952 dimBitOffset += getDimensionIdLen( dimIdx ); 1953 } 1954 } 1955 return dimBitOffset; 1956 } 1957 1958 Int TComVPS::inferDimensionId( Int i, Int j ) 1959 { 1960 return ( ( getLayerIdInNuh( i ) & ( (1 << xGetDimBitOffset( j + 1 ) ) - 1) ) >> xGetDimBitOffset( j ) ); 1961 } 1962 1963 Int TComVPS::inferLastDimsionIdLenMinus1() 1964 { 1965 return ( 5 - xGetDimBitOffset( getNumScalabilityTypes() - 1 ) ); 1966 } 1967 1968 Int TComVPS::getNumLayersInIdList( Int lsIdx ) 1969 { 1970 assert( lsIdx >= 0 ); 1971 assert( lsIdx <= getVpsNumLayerSetsMinus1() ); 1972 Int numLayersInIdList = 0; 1973 for (Int layerId = 0; layerId < getVpsMaxLayerId(); layerId++ ) 1974 { 1975 numLayersInIdList += ( getLayerIdIncludedFlag( lsIdx, layerId ) ); 1976 } 1977 return numLayersInIdList; 1978 } 1817 1979 #endif // H_MV 1818 1980 … … 1865 2027 #if H_MV 1866 2028 , m_interViewMvVertConstraintFlag (false) 2029 , m_numIlpRestrictedRefLayers ( 0 ) 2030 1867 2031 #endif 1868 2032 #if H_3D … … 1883 2047 ::memset(m_ltRefPicPocLsbSps, 0, sizeof(m_ltRefPicPocLsbSps)); 1884 2048 ::memset(m_usedByCurrPicLtSPSFlag, 0, sizeof(m_usedByCurrPicLtSPSFlag)); 2049 #if H_MV 2050 for (Int i = 0; i < MAX_NUM_LAYERS; i++ ) 2051 { 2052 m_minSpatialSegmentOffsetPlus1[ i ] = 0; 2053 m_ctuBasedOffsetEnabledFlag [ i ] = false; 2054 m_minHorizontalCtuOffsetPlus1 [ i ] = 0; 2055 } 2056 #endif 1885 2057 } 1886 2058 … … 2361 2533 refPicSetInterLayer.clear(); 2362 2534 2363 for( Int i = 0; i < get VPS()->getNumDirectRefLayers( getLayerIdInVps()); i++ )2364 { 2365 Int layerIdRef = get VPS()->getRefLayerId( getLayerIdInVps(),i );2535 for( Int i = 0; i < getNumActiveRefLayerPics(); i++ ) 2536 { 2537 Int layerIdRef = getRefPicLayerId( i ); 2366 2538 TComPic* picRef = ivPicLists->getPic( layerIdRef, getPOC() ) ; 2367 2539 assert ( picRef != 0 ); … … 2371 2543 picRef->getSlice(0)->setReferenced( true ); 2372 2544 2545 // Consider to check here: 2546 // "If the current picture is a RADL picture, there shall be no entry in the RefPicSetInterLayer that is a RASL picture. " 2373 2547 refPicSetInterLayer.push_back( picRef ); 2374 2548 } … … 2441 2615 } 2442 2616 } 2617 } 2618 Int TComSlice::xCeilLog2( Int val ) 2619 { 2620 assert( val > 0 ); 2621 Int ceilLog2 = 0; 2622 while( val > ( 1 << ceilLog2 ) ) ceilLog2++; 2623 return ceilLog2; 2624 } 2625 2626 Void TComSlice::markCurrPic( TComPic* currPic ) 2627 { 2628 if ( !currPic->getSlice(0)->getDiscardableFlag() ) 2629 { 2630 currPic->getSlice(0)->setReferenced( true ) ; 2631 currPic->setIsLongTerm( false ); 2632 } 2633 else 2634 { 2635 currPic->getSlice(0)->setReferenced( false ) ; 2636 } 2637 } 2638 2639 Void TComSlice::setRefPicSetInterLayer( std::vector<TComPic*>* refPicSetInterLayer ) 2640 { 2641 m_refPicSetInterLayer = refPicSetInterLayer; 2642 } 2643 2644 TComPic* TComSlice::getPicFromRefPicSetInterLayer( Int layerId ) 2645 { 2646 assert( m_refPicSetInterLayer != 0 ); 2647 assert( (*m_refPicSetInterLayer).size() == getNumActiveRefLayerPics() ); 2648 TComPic* pcPic = NULL; 2649 for ( Int i = 0; i < getNumActiveRefLayerPics(); i++ ) 2650 { 2651 if ((*m_refPicSetInterLayer)[ i ]->getLayerId() == layerId) 2652 { 2653 pcPic = (*m_refPicSetInterLayer)[ i ]; 2654 } 2655 } 2656 assert(pcPic != NULL); 2657 return pcPic; 2658 } 2659 2660 Int TComSlice::getNumActiveRefLayerPics() 2661 { 2662 Int numActiveRefLayerPics; 2663 2664 if( getLayerId() == 0 || getVPS()->getNumDirectRefLayers( getLayerIdInVps() ) == 0 || !getInterLayerPredEnabledFlag() ) 2665 { 2666 numActiveRefLayerPics = 0; 2667 } 2668 else if( getVPS()->getMaxOneActiveRefLayerFlag() || getVPS()->getNumDirectRefLayers( getLayerIdInVps() ) == 1 ) 2669 { 2670 numActiveRefLayerPics = 1; 2671 } 2672 else 2673 { 2674 numActiveRefLayerPics = getNumInterLayerRefPicsMinus1() + 1; 2675 } 2676 return numActiveRefLayerPics; 2677 } 2678 2679 Int TComSlice::getRefPicLayerId( Int i ) 2680 { 2681 return getVPS()->getRefLayerId( getLayerIdInVps(), getInterLayerPredLayerIdc( i ) ); 2682 } 2683 2684 Void TComSlice::setActiveMotionPredRefLayers() 2685 { 2686 Int j = 0; 2687 for( Int i = 0; i < getNumActiveRefLayerPics(); i++) 2688 { 2689 if( getVPS()->getMotionPredEnabledFlag( getLayerIdInVps(), getInterLayerPredLayerIdc( i )) ) 2690 { 2691 m_activeMotionPredRefLayerId[ j++ ] = getVPS()->getRefLayerId( getLayerIdInVps(), i ); 2692 } 2693 } 2694 m_numActiveMotionPredRefLayers = j; 2695 2696 // Consider incorporating bitstream conformance tests on derived variables here. 2697 } 2698 2699 Bool TComSlice::getInterRefEnabledInRPLFlag() 2700 { 2701 Bool interRefEnabledInRPLFlag; 2702 if ( getVPS()->getNumSamplePredRefLayers( getLayerIdInVps() ) > 0 && getNumActiveRefLayerPics() > 0 ) 2703 { 2704 interRefEnabledInRPLFlag = !getInterLayerSamplePredOnlyFlag(); 2705 } 2706 else 2707 { 2708 interRefEnabledInRPLFlag = 1; 2709 } 2710 return interRefEnabledInRPLFlag; 2443 2711 } 2444 2712 #if H_3D_ARP -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TComSlice.h
r532 r534 487 487 UInt m_numHrdParameters; 488 488 #if H_MV 489 UInt m_max NuhLayerId;489 UInt m_maxLayerId; 490 490 #else 491 491 UInt m_maxNuhReservedZeroLayerId; … … 494 494 UInt* m_hrdOpSetIdx; 495 495 Bool* m_cprmsPresentFlag; 496 UInt m_numOpSets; 497 #if H_MV 496 #if H_MV 497 UInt m_vpsNumLayerSetsMinus1; 498 498 Bool m_layerIdIncludedFlag[MAX_VPS_OP_SETS_PLUS1][MAX_VPS_NUH_LAYER_ID_PLUS1]; 499 499 #else 500 UInt m_numOpSets; 500 501 Bool m_layerIdIncludedFlag[MAX_VPS_OP_SETS_PLUS1][MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1]; 501 502 #endif … … 514 515 515 516 #if H_MV 517 /// VPS EXTENSION SYNTAX ELEMENTS 516 518 Bool m_avcBaseLayerFlag; 517 519 Bool m_splittingFlag; … … 520 522 Bool m_vpsNuhLayerIdPresentFlag; 521 523 Int m_layerIdInNuh [MAX_NUM_LAYER_IDS]; 524 Int m_dimensionId [MAX_NUM_LAYER_IDS][MAX_NUM_SCALABILITY_TYPES]; 525 Bool m_directDependencyFlag [MAX_NUM_LAYER_IDS][MAX_NUM_LAYER_IDS]; 526 Int m_maxTidIlRefPicPlus1 [MAX_NUM_LAYERS]; 527 Int m_vpsNumberLayerSetsMinus1; 528 Int m_vpsNumProfileTierLevelMinus1; 529 Bool m_vpsProfilePresentFlag [MAX_VPS_OP_SETS_PLUS1]; 530 Int m_profileRefMinus1 [MAX_VPS_PROFILE_TIER_LEVEL]; 531 Bool m_moreOutputLayerSetsThanDefaultFlag; 532 Int m_numAddOutputLayerSetsMinus1; 533 Bool m_defaultOneTargetOutputLayerFlag; 534 Int m_outputLayerSetIdxMinus1 [MAX_VPS_OUTPUTLAYER_SETS]; 535 Bool m_outputLayerFlag [MAX_VPS_OUTPUTLAYER_SETS][MAX_VPS_NUH_LAYER_ID_PLUS1]; 536 Int m_profileLevelTierIdx [MAX_VPS_OUTPUTLAYER_SETS ]; 537 Bool m_maxOneActiveRefLayerFlag; 538 Int m_directDepTypeLenMinus2; 539 Int m_directDependencyType [MAX_NUM_LAYERS] [MAX_NUM_LAYERS]; 540 541 // VPS EXTENSION SEMANTICS VARIABLES 522 542 Int m_layerIdInVps [MAX_NUM_LAYERS ]; 523 Int m_dimensionId [MAX_NUM_LAYER_IDS][MAX_NUM_SCALABILITY_TYPES]; 543 544 Int m_numDirectRefLayers [MAX_NUM_LAYERS]; 545 Int m_refLayerId [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 546 547 Int m_numSamplePredRefLayers [MAX_NUM_LAYERS]; 548 Bool m_samplePredEnabledFlag [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 549 Int m_samplePredRefLayerId [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 550 551 Int m_numMotionPredRefLayers [MAX_NUM_LAYERS]; 552 Bool m_motionPredEnabledFlag [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 553 Int m_motionPredRefLayerId [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 524 554 #if H_3D 525 555 Int m_viewIndex [MAX_NUM_LAYERS ]; 556 #endif 557 558 Int xCeilLog2 ( Int val ); 559 Int xGetDimBitOffset( Int j ); 560 526 561 #if H_3D_ARP 527 562 UInt m_uiUseAdvResPred [MAX_NUM_LAYERS ]; … … 549 584 Bool m_ivMvScalingFlag; 550 585 #endif 551 552 #endif553 554 555 Bool m_vpsProfilePresentFlag [MAX_VPS_OP_SETS_PLUS1];556 Int m_profileLayerSetRefMinus1 [MAX_VPS_OP_SETS_PLUS1];557 Int m_numOutputLayerSets;558 Int m_outputLayerSetIdx [MAX_VPS_OP_SETS_PLUS1];559 Bool m_outputLayerFlag [MAX_VPS_OP_SETS_PLUS1][MAX_VPS_NUH_LAYER_ID_PLUS1];560 Bool m_directDependencyFlag [MAX_NUM_LAYER_IDS][MAX_NUM_LAYER_IDS];561 562 Int m_numDirectRefLayers [ MAX_NUM_LAYERS ];563 Int m_refLayerId [ MAX_NUM_LAYERS ][MAX_NUM_LAYERS];564 586 565 587 #endif … … 606 628 607 629 #if H_MV 608 UInt getMaxNuhLayerId() { return m_maxNuhLayerId; } 609 Void setMaxNuhLayerId(UInt v) { m_maxNuhLayerId = v; } 630 UInt getVpsMaxLayerId() { return m_maxLayerId; } 631 Void setVpsMaxLayerId(UInt v) { m_maxLayerId = v; } 632 633 UInt getVpsNumLayerSetsMinus1() { return m_vpsNumLayerSetsMinus1; } 634 Void setVpsNumLayerSetsMinus1(UInt v) { m_vpsNumLayerSetsMinus1 = v; } 610 635 #else 611 636 UInt getMaxNuhReservedZeroLayerId() { return m_maxNuhReservedZeroLayerId; } 612 637 Void setMaxNuhReservedZeroLayerId(UInt v) { m_maxNuhReservedZeroLayerId = v; } 613 #endif614 638 615 639 UInt getMaxOpSets() { return m_numOpSets; } 616 640 Void setMaxOpSets(UInt v) { m_numOpSets = v; } 641 #endif 617 642 Bool getLayerIdIncludedFlag(UInt opsIdx, UInt id) { return m_layerIdIncludedFlag[opsIdx][id]; } 618 643 Void setLayerIdIncludedFlag(Bool v, UInt opsIdx, UInt id) { m_layerIdIncludedFlag[opsIdx][id] = v; } … … 652 677 Int getLayerIdInNuh( Int layerIdInVps ) { assert( m_layerIdInNuh[layerIdInVps] >= 0 ); return m_layerIdInNuh[layerIdInVps]; } 653 678 679 Bool nuhLayerIdIncluded( Int layerIdinNuh ) { return ( m_layerIdInVps[ layerIdinNuh ] > 0 ); } 680 681 Void setDimensionId( Int layerIdInVps, Int scalIdx, Int val ) { m_dimensionId[layerIdInVps][scalIdx] = val; } 682 Int getDimensionId( Int layerIdInVps, Int scalIdx ) { return m_dimensionId[layerIdInVps][scalIdx]; } 683 684 Void setDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps, Bool val ) { m_directDependencyFlag[depLayeridInVps][refLayeridInVps] = val; } 685 Bool getDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps ) { return m_directDependencyFlag[depLayeridInVps][refLayeridInVps]; } 686 687 Void setMaxTidIlRefPicPlus1( Int layerIdInVps, Int val ) { m_maxTidIlRefPicPlus1[ layerIdInVps ] = val; } 688 Int getMaxTidIlRefPicPlus1( Int layerIdInVps ) { return m_maxTidIlRefPicPlus1[ layerIdInVps ]; } 689 690 Void setVpsNumberLayerSetsMinus1( Int val ) { m_vpsNumberLayerSetsMinus1 = val; } 691 Int getVpsNumberLayerSetsMinus1( ) { return m_vpsNumberLayerSetsMinus1; } 692 693 Void setVpsNumProfileTierLevelMinus1( Int val ) { m_vpsNumProfileTierLevelMinus1 = val; } 694 Int getVpsNumProfileTierLevelMinus1( ) { return m_vpsNumProfileTierLevelMinus1; } 695 696 Void setVpsProfilePresentFlag( Int idx, Bool val ) { m_vpsProfilePresentFlag[idx] = val; } 697 Bool getVpsProfilePresentFlag( Int idx ) { return m_vpsProfilePresentFlag[idx]; } 698 699 Void setProfileRefMinus1( Int profileTierLevelIdx, Int val ) { m_profileRefMinus1[ profileTierLevelIdx ] = val; } 700 Int getProfileRefMinus1( Int profileTierLevelIdx ) { return m_profileRefMinus1[ profileTierLevelIdx ]; } 701 702 Void setMoreOutputLayerSetsThanDefaultFlag( Bool flag ) { m_moreOutputLayerSetsThanDefaultFlag = flag; } 703 Bool getMoreOutputLayerSetsThanDefaultFlag() { return m_moreOutputLayerSetsThanDefaultFlag; } 704 705 Void setNumAddOutputLayerSetsMinus1( Int val ) { m_numAddOutputLayerSetsMinus1 = val; } 706 Int getNumAddOutputLayerSetsMinus1( ) { return m_numAddOutputLayerSetsMinus1; } 707 708 Void setDefaultOneTargetOutputLayerFlag( Bool flag ) { m_defaultOneTargetOutputLayerFlag = flag; } 709 Bool getDefaultOneTargetOutputLayerFlag( ) { return m_defaultOneTargetOutputLayerFlag; } 710 711 Void setOutputLayerSetIdxMinus1( Int outLayerSetIdx, Int val ) { m_outputLayerSetIdxMinus1[ outLayerSetIdx ] = val; } 712 Int getOutputLayerSetIdxMinus1( Int outLayerSetIdx ) { return m_outputLayerSetIdxMinus1[ outLayerSetIdx ]; } 713 714 Void setOutputLayerFlag( Int outLayerSetIdx, Int i, Bool flag ) { m_outputLayerFlag[ outLayerSetIdx ][ i ] = flag; } 715 Bool getOutputLayerFlag( Int outLayerSetIdx, Int i ) { return m_outputLayerFlag[ outLayerSetIdx ][ i ]; } 716 717 Void setProfileLevelTierIdx( Int outLayerSetIdx, Int val ) { m_profileLevelTierIdx[ outLayerSetIdx = val ]; } 718 Int getProfileLevelTierIdx( Int outLayerSetIdx ) { return m_profileLevelTierIdx[ outLayerSetIdx ]; } 719 720 Void setMaxOneActiveRefLayerFlag( Bool flag) { m_maxOneActiveRefLayerFlag = flag; } 721 Bool getMaxOneActiveRefLayerFlag( ) { return m_maxOneActiveRefLayerFlag; } 722 723 Void setDirectDepTypeLenMinus2( Int val) { m_directDepTypeLenMinus2 = val; } 724 Int getDirectDepTypeLenMinus2( ) { return m_directDepTypeLenMinus2; } 725 726 Void setDirectDependencyType( Int depLayeridInVps, Int refLayeridInVps, Int val) { m_directDependencyType[ depLayeridInVps ][ refLayeridInVps ] = val; } 727 Int getDirectDependencyType( Int depLayeridInVps, Int refLayeridInVps) { return m_directDependencyType[ depLayeridInVps ][ refLayeridInVps ]; } 728 729 730 // VPS EXTENSION SEMANTICS VARIABLES 654 731 Void setLayerIdInVps( Int layerIdInNuh, Int val ) { m_layerIdInVps[layerIdInNuh] = val; } 655 732 Int getLayerIdInVps( Int layerIdInNuh ) { assert( m_layerIdInVps[layerIdInNuh] >= 0 ); return m_layerIdInVps[layerIdInNuh]; } 656 733 657 Bool nuhLayerIdIncluded( Int layerIdinNuh ) { return ( m_layerIdInVps[ layerIdinNuh ] > 0 ); }658 659 Void setDimensionId( Int layerIdInVps, Int scalIdx, Int val ) { m_dimensionId[layerIdInVps][scalIdx] = val; }660 Int getDimensionId( Int layerIdInVps, Int scalIdx ) { return m_dimensionId[layerIdInVps][scalIdx]; }661 662 734 Int getScalabilityId ( Int layerIdInVps, ScalabilityType scalType ); 663 664 735 Int getViewId ( Int layerIdInVps ) { return getScalabilityId( layerIdInVps, VIEW_ID ); } 736 737 Void setRefLayers(); 738 739 Int getNumDirectRefLayers( Int layerIdInVps ) { return m_numDirectRefLayers[ layerIdInVps ]; }; 740 Int getRefLayerId ( Int layerIdInVps, Int idx );; 741 742 Int getNumSamplePredRefLayers( Int layerIdInVps ) { return m_numSamplePredRefLayers[layerIdInVps]; } 743 Bool getSamplePredEnabledFlag ( Int layerIdInVps, Int idx ) { return m_samplePredEnabledFlag [layerIdInVps][idx]; } 744 Int getSamplePredRefLayerId ( Int layerIdInVps, Int idx ) { return m_samplePredRefLayerId [layerIdInVps][idx]; } 745 746 Int getNumMotionPredRefLayers( Int layerIdInVps ) { return m_numMotionPredRefLayers[layerIdInVps]; } 747 Bool getMotionPredEnabledFlag ( Int layerIdInVps, Int idx ) { return m_motionPredEnabledFlag [layerIdInVps][idx]; } 748 Int getMotionPredRefLayerId ( Int layerIdInVps, Int idx ) { return m_motionPredRefLayerId [layerIdInVps][idx]; } 749 750 Bool checkVPSExtensionSyntax(); 751 Int scalTypeToScalIdx ( ScalabilityType scalType ); 752 753 Int getProfileLevelTierIdxLen() { return xCeilLog2( getVpsNumProfileTierLevelMinus1() + 1 ); }; 754 Int getNumLayersInIdList ( Int lsIdx );; 755 756 // inference 757 Int inferDimensionId ( Int i, Int j ); 758 Int inferLastDimsionIdLenMinus1(); 759 665 760 #if H_3D 666 761 Void initViewIndex(); 667 762 Int getViewIndex ( Int layerIdInVps ) { return m_viewIndex[ layerIdInVps ]; } 668 763 Int getDepthId ( Int layerIdInVps ) { return getScalabilityId( layerIdInVps, DEPTH_ID ); } 669 Int getLayerIdInNuh( Int viewIndex, Bool depthFlag ); 764 Int getLayerIdInNuh( Int viewIndex, Bool depthFlag ); 765 670 766 #if H_3D_ARP 671 767 UInt getUseAdvRP ( Int layerIdInVps ) { return m_uiUseAdvResPred[layerIdInVps]; } … … 703 799 Void setIvMvScalingFlag ( Bool b ) { m_ivMvScalingFlag = b; } 704 800 #endif 705 #endif 706 707 Void setVpsProfilePresentFlag( Int layerSet, Bool val ) { m_vpsProfilePresentFlag[layerSet] = val; } 708 Bool getVpsProfilePresentFlag( Int layerSet ) { return m_vpsProfilePresentFlag[layerSet]; } 709 710 Void setProfileLayerSetRefMinus1( Int layerSet, Int val ) { m_profileLayerSetRefMinus1[layerSet] = val; } 711 Bool getProfileLayerSetRefMinus1( Int layerSet ) { return m_profileLayerSetRefMinus1[layerSet]; } 712 713 Void setNumOutputLayerSets( Int val ) { m_numOutputLayerSets = val; } 714 Int getNumOutputLayerSets() { return m_numOutputLayerSets; } 715 716 Void setOutputLayerSetIdx( Int layerSet, Int val ) { m_outputLayerSetIdx[layerSet] = val; } 717 Int getOutputLayerSetIdx( Int layerSet ) { return m_outputLayerSetIdx[layerSet]; } 718 719 Void setOutputLayerFlag( Int layerSet, Int layer, Bool val ) { m_outputLayerFlag[layerSet][layer] = val; } 720 Bool getOutputLayerFlag( Int layerSet, Int layer ) { return m_outputLayerFlag[layerSet][layer]; } 721 722 Void setDirectDependencyFlag( Int layerHigh, Int layerLow, Bool val ) { m_directDependencyFlag[layerHigh][layerLow] = val; } 723 Bool getDirectDependencyFlag( Int layerHigh, Int layerLow ) { return m_directDependencyFlag[layerHigh][layerLow]; } 724 725 Void calcIvRefLayers(); 726 727 Int getNumDirectRefLayers( Int layerIdInVps ) { return m_numDirectRefLayers[ layerIdInVps ]; }; 728 Int getRefLayerId ( Int layerIdInVps, Int idx );; 729 730 Bool checkVPSExtensionSyntax(); 731 Int scalTypeToScalIdx ( ScalabilityType scalType ); 801 802 #endif 732 803 #endif 733 804 }; … … 813 884 Int m_numTicksPocDiffOneMinus1; 814 885 #endif 815 886 #if H_MV 887 Bool m_tileBoundariesAlignedFlag; 888 #endif 816 889 public: 817 890 TComVUI() … … 849 922 ,m_numTicksPocDiffOneMinus1(0) 850 923 #endif 924 #if H_MV 925 ,m_tileBoundariesAlignedFlag(true) 926 #endif 851 927 {} 852 928 … … 950 1026 Int getNumTicksPocDiffOneMinus1() {return m_numTicksPocDiffOneMinus1;} 951 1027 Void setNumTicksPocDiffOneMinus1(Int x) { m_numTicksPocDiffOneMinus1 = x;} 1028 #endif 1029 #if H_MV 1030 Bool getTileBoundariesAlignedFlag( ) { return m_tileBoundariesAlignedFlag; } 1031 Void setTileBoundariesAlignedFlag( Bool flag ) { m_tileBoundariesAlignedFlag = flag; } 952 1032 #endif 953 1033 }; … … 1035 1115 #if H_MV 1036 1116 Bool m_interViewMvVertConstraintFlag; 1117 Int m_numIlpRestrictedRefLayers ; 1118 Int m_minSpatialSegmentOffsetPlus1[MAX_NUM_LAYERS]; 1119 Bool m_ctuBasedOffsetEnabledFlag [MAX_NUM_LAYERS]; 1120 Int m_minHorizontalCtuOffsetPlus1 [MAX_NUM_LAYERS]; 1037 1121 #endif 1038 1122 #if H_3D … … 1041 1125 Int m_aaiCodedScale [2][MAX_NUM_LAYERS]; 1042 1126 Int m_aaiCodedOffset[2][MAX_NUM_LAYERS]; 1127 #endif 1128 #if H_MV 1129 Int m_layerId; 1043 1130 #endif 1044 1131 public: … … 1175 1262 Void setInterViewMvVertConstraintFlag(Bool val) { m_interViewMvVertConstraintFlag = val; } 1176 1263 Bool getInterViewMvVertConstraintFlag() { return m_interViewMvVertConstraintFlag;} 1264 1265 //// sps_extension_vui_parameters( ) 1266 Void setNumIlpRestrictedRefLayers ( Int val ) { m_numIlpRestrictedRefLayers = val;} 1267 Int getNumIlpRestrictedRefLayers ( ) { return m_numIlpRestrictedRefLayers ;} 1268 1269 Void setMinSpatialSegmentOffsetPlus1( Int i, Int val ) { m_minSpatialSegmentOffsetPlus1[ i ] = val;} 1270 Int getMinSpatialSegmentOffsetPlus1( Int i ) { return m_minSpatialSegmentOffsetPlus1[ i ];} 1271 1272 Void setCtuBasedOffsetEnabledFlag ( Int i, Bool flag ) { m_ctuBasedOffsetEnabledFlag [ i ] = flag;} 1273 Bool getCtuBasedOffsetEnabledFlag ( Int i ) { return m_ctuBasedOffsetEnabledFlag [ i ];} 1274 1275 Void setMinHorizontalCtuOffsetPlus1 ( Int i, Int val ) { m_minHorizontalCtuOffsetPlus1 [ i ] = val;} 1276 Int getMinHorizontalCtuOffsetPlus1 ( Int i ) { return m_minHorizontalCtuOffsetPlus1 [ i ];} 1177 1277 #endif 1178 1278 #if H_3D … … 1185 1285 Int* getInvCodedOffset () { return m_aaiCodedOffset[1]; } 1186 1286 #endif 1287 #if H_MV 1288 Int getLayerId () { return m_layerId; } 1289 Void setLayerId ( Int val ) { m_layerId = val; } 1290 #endif 1291 1187 1292 }; 1188 1293 … … 1213 1318 #if H_MV 1214 1319 // Why not an listIdx for all members, would avoid code duplication?? 1215 Void setRefPicSetIdxL(UInt li, UInt idx, UInt refPicSetIdx) {( li==0 ? m_RefPicSetIdxL0[idx] : m_RefPicSetIdxL1[idx] ) = refPicSetIdx; }; 1216 Void setRefPicListModificationFlagL(UInt li, Bool flag) { ( li==0 ? m_bRefPicListModificationFlagL0 : m_bRefPicListModificationFlagL1 ) = flag; }; 1320 Void setRefPicSetIdxL(UInt li, UInt idx, UInt refPicSetIdx) {( li==0 ? m_RefPicSetIdxL0[idx] : m_RefPicSetIdxL1[idx] ) = refPicSetIdx; } 1321 UInt getRefPicSetIdxL(UInt li, UInt idx ) { return ( li == 0 ) ? m_RefPicSetIdxL0[idx] : m_RefPicSetIdxL1[idx] ; } 1322 Void setRefPicListModificationFlagL(UInt li, Bool flag) { ( li==0 ? m_bRefPicListModificationFlagL0 : m_bRefPicListModificationFlagL1 ) = flag; } 1323 Bool getRefPicListModificationFlagL(UInt li ) { return ( li== 0) ? m_bRefPicListModificationFlagL0 : m_bRefPicListModificationFlagL1; } 1217 1324 #endif 1218 1325 }; … … 1539 1646 Bool m_enableTMVPFlag; 1540 1647 #if H_MV 1648 std::vector<TComPic*>* m_refPicSetInterLayer; 1541 1649 Int m_layerId; 1542 1650 Int m_viewId; … … 1565 1673 #endif 1566 1674 #endif 1675 #if H_MV 1676 // Additional slice header syntax elements 1677 Bool m_discardableFlag; 1678 Bool m_interLayerPredEnabledFlag; 1679 Int m_numInterLayerRefPicsMinus1; 1680 Int m_interLayerPredLayerIdc [MAX_NUM_LAYERS]; 1681 Bool m_interLayerSamplePredOnlyFlag; 1682 Bool m_altCollocatedIndicationFlag; 1683 Int m_collocatedRefLayerIdx; 1684 // Additional slice header semantics variables 1685 Int m_numActiveMotionPredRefLayers; 1686 Int m_activeMotionPredRefLayerId [ MAX_NUM_LAYER_IDS ]; 1687 1688 #endif 1689 1567 1690 public: 1568 1691 TComSlice(); … … 1757 1880 Void createAndApplyIvReferencePictureSet( TComPicLists* ivPicLists, std::vector<TComPic*>& refPicSetInterLayer ); 1758 1881 static Void markIvRefPicsAsShortTerm ( std::vector<TComPic*> refPicSetInterLayer ); 1882 static Void markCurrPic ( TComPic* currPic );; 1759 1883 static Void markIvRefPicsAsUnused ( TComPicLists* ivPicLists, std::vector<Int> targetDecLayerIdSet, TComVPS* vps, Int curLayerId, Int curPoc ); 1760 1884 … … 1873 1997 1874 1998 #endif 1999 #if H_MV 2000 // Additional slice header syntax elements 2001 Void setDiscardableFlag( Bool flag ) { m_discardableFlag = flag; } 2002 Bool getDiscardableFlag( ) { return m_discardableFlag; } 2003 2004 Void setInterLayerPredEnabledFlag( Bool flag ) { m_interLayerPredEnabledFlag = flag; } 2005 Bool getInterLayerPredEnabledFlag( ) { return m_interLayerPredEnabledFlag; } 2006 2007 Void setNumInterLayerRefPicsMinus1( Int val ) { m_numInterLayerRefPicsMinus1 = val; } 2008 Int getNumInterLayerRefPicsMinus1( ) { return m_numInterLayerRefPicsMinus1; } 2009 2010 Void setInterLayerPredLayerIdc( Int i, Int val ) { m_interLayerPredLayerIdc[i] = val; } 2011 Int getInterLayerPredLayerIdc( Int i ) { return m_interLayerPredLayerIdc[i]; } 2012 2013 Void setInterLayerSamplePredOnlyFlag( Bool flag ) { m_interLayerSamplePredOnlyFlag = flag; } 2014 Bool getInterLayerSamplePredOnlyFlag( ) { return m_interLayerSamplePredOnlyFlag; } 2015 2016 Void setAltCollocatedIndicationFlag( Bool flag ) { m_altCollocatedIndicationFlag = flag; } 2017 Bool getAltCollocatedIndicationFlag( ) { return m_altCollocatedIndicationFlag; } 2018 2019 Void setCollocatedRefLayerIdx( Int val ) { m_collocatedRefLayerIdx = val; } 2020 Int getCollocatedRefLayerIdx( ) { return m_collocatedRefLayerIdx; } 2021 2022 // Additional variables derived in slice header semantics 2023 Int getNumInterLayerRefPicsMinus1Len( ) { return xCeilLog2( getVPS()->getNumDirectRefLayers( getLayerIdInVps() )); } 2024 Int getInterLayerPredLayerIdcLen ( ) { return xCeilLog2( getVPS()->getNumDirectRefLayers( getLayerIdInVps() )); } 2025 2026 Int getNumActiveRefLayerPics( ); 2027 Int getRefPicLayerId ( Int i ); 2028 2029 Void setActiveMotionPredRefLayers ( ); 2030 2031 Int getNumActiveMotionPredRefLayers( ) { return m_numActiveMotionPredRefLayers; } 2032 Int getActiveMotionPredRefLayerId ( Int i ) { return m_activeMotionPredRefLayerId[i]; } 2033 2034 Bool getInterRefEnabledInRPLFlag( ); 2035 2036 Void setRefPicSetInterLayer ( std::vector<TComPic*>* m_refPicSetInterLayer ); 2037 TComPic* getPicFromRefPicSetInterLayer( Int layerId ); 2038 2039 #endif 1875 2040 1876 2041 protected: … … 1879 2044 TComPic* xGetLongTermRefPic(TComList<TComPic*>& rcListPic, Int poc, Bool pocHasMsb); 1880 2045 #if H_MV 2046 Int xCeilLog2( Int val ); 1881 2047 TComPic* xGetInterLayerRefPic( std::vector<TComPic*>& rcListIlPic, Int layerId ); 1882 2048 #endif -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibCommon/TypeDef.h
r532 r534 260 260 #if H_MV 261 261 #define MAX_NUM_LAYERS 64 262 #define MAX_VPS_PROFILE_TIER_LEVEL 64 263 #define MAX_VPS_ADD_OUTPUT_LAYER_SETS 1024 264 #define MAX_VPS_OUTPUTLAYER_SETS ( MAX_VPS_ADD_OUTPUT_LAYER_SETS + MAX_VPS_OP_SETS_PLUS1 ) 262 265 #endif 263 266 -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibDecoder/TDecCAVLC.cpp
r532 r534 456 456 { 457 457 READ_FLAG( uiCode, "tiles_fixed_structure_flag"); pcVUI->setTilesFixedStructureFlag(uiCode); 458 #if H_MV 459 if ( pcSPS->getLayerId() > 0 ) 460 { 461 READ_FLAG( uiCode, "tile_boundaries_aligned_flag" ); pcVUI->setTileBoundariesAlignedFlag( uiCode == 1 ); 462 } 463 #endif 458 464 READ_FLAG( uiCode, "motion_vectors_over_pic_boundaries_flag"); pcVUI->setMotionVectorsOverPicBoundariesFlag(uiCode); 459 465 READ_FLAG( uiCode, "restricted_ref_pic_lists_flag"); pcVUI->setRestrictedRefPicListsFlag(uiCode); … … 577 583 UInt uiCode; 578 584 READ_CODE( 4, uiCode, "sps_video_parameter_set_id"); pcSPS->setVPSId ( uiCode ); 585 #if H_MV 586 if ( pcSPS->getLayerId() == 0 ) 587 { 588 #endif 579 589 READ_CODE( 3, uiCode, "sps_max_sub_layers_minus1" ); pcSPS->setMaxTLayers ( uiCode+1 ); 580 590 READ_FLAG( uiCode, "sps_temporal_id_nesting_flag" ); pcSPS->setTemporalIdNestingFlag ( uiCode > 0 ? true : false ); … … 584 594 assert( uiCode == 1 ); 585 595 } 586 587 596 parsePTL(pcSPS->getPTL(), 1, pcSPS->getMaxTLayers() - 1); 597 #if H_MV 598 } 599 #endif 588 600 READ_UVLC( uiCode, "sps_seq_parameter_set_id" ); pcSPS->setSPSId( uiCode ); 589 601 READ_UVLC( uiCode, "chroma_format_idc" ); pcSPS->setChromaFormatIdc( uiCode ); … … 743 755 #else 744 756 READ_FLAG( uiCode, "inter_view_mv_vert_constraint_flag" ); pcSPS->setInterViewMvVertConstraintFlag(uiCode == 1 ? true : false); 757 //// sps_extension_vui_parameters( ) 758 if( pcSPS->getVuiParameters()->getBitstreamRestrictionFlag() ) 759 { 760 READ_UVLC( uiCode, "num_ilp_restricted_ref_layers" ); pcSPS->setNumIlpRestrictedRefLayers( uiCode ); 761 for( Int i = 0; i < pcSPS->getNumIlpRestrictedRefLayers( ); i++ ) 762 { 763 READ_UVLC( uiCode, "min_spatial_segment_offset_plus1" ); pcSPS->setMinSpatialSegmentOffsetPlus1( i, uiCode ); 764 if( pcSPS->getMinSpatialSegmentOffsetPlus1( i ) > 0 ) 765 { 766 READ_FLAG( uiCode, "ctu_based_offset_enabled_flag[ i ]"); pcSPS->setCtuBasedOffsetEnabledFlag(i, uiCode == 1 ); 767 if( pcSPS->getCtuBasedOffsetEnabledFlag( i ) ) 768 { 769 READ_UVLC( uiCode, "min_horizontal_ctu_offset_plus1[ i ]"); pcSPS->setMinHorizontalCtuOffsetPlus1( i, uiCode ); 770 } 771 } 772 } 773 } 774 775 //// sps_extension_vui_parameters( ) END 776 READ_UVLC( uiCode, "sps_shvc_reserved_zero_idc" ); 745 777 READ_FLAG( uiCode, "sps_extension2_flag"); 746 778 if ( uiCode ) … … 752 784 } 753 785 #else 786 754 787 UInt uiCamParPrecision = 0; 755 788 Bool bCamParSlice = false; … … 834 867 assert( pcVPS->getNumHrdParameters() < MAX_VPS_OP_SETS_PLUS1 ); 835 868 #if H_MV 836 assert( pcVPS->getMaxNuhLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 ); 837 READ_CODE( 6, uiCode, "vps_max_nuh_layer_id" ); pcVPS->setMaxNuhLayerId( uiCode ); 869 assert( pcVPS->getVpsMaxLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 ); 870 READ_CODE( 6, uiCode, "vps_max_layer_id" ); pcVPS->setVpsMaxLayerId( uiCode ); 871 872 READ_UVLC( uiCode, "vps_max_num_layer_sets_minus1" ); pcVPS->setVpsNumLayerSetsMinus1( uiCode ); 873 for( UInt opsIdx = 1; opsIdx <= pcVPS->getVpsNumLayerSetsMinus1(); opsIdx ++ ) 874 { 875 for( UInt i = 0; i <= pcVPS->getVpsMaxLayerId(); i ++ ) 838 876 #else 839 877 assert( pcVPS->getMaxNuhReservedZeroLayerId() < MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 ); 840 878 READ_CODE( 6, uiCode, "vps_max_nuh_reserved_zero_layer_id" ); pcVPS->setMaxNuhReservedZeroLayerId( uiCode ); 841 #endif 879 842 880 READ_UVLC( uiCode, "vps_max_op_sets_minus1" ); pcVPS->setMaxOpSets( uiCode + 1 ); 843 881 for( UInt opsIdx = 1; opsIdx <= ( pcVPS->getMaxOpSets() - 1 ); opsIdx ++ ) 844 882 { 845 883 // Operation point set 846 #if H_MV847 for( UInt i = 0; i <= pcVPS->getMaxNuhLayerId(); i ++ )848 #else849 884 for( UInt i = 0; i <= pcVPS->getMaxNuhReservedZeroLayerId(); i ++ ) 850 885 #endif … … 893 928 READ_FLAG( uiCode, "splitting_flag" ); pcVPS->setSplittingFlag( uiCode == 1 ? true : false ); 894 929 895 // Parse scalability_mask[i]896 930 for( Int sIdx = 0; sIdx < MAX_NUM_SCALABILITY_TYPES; sIdx++ ) 897 931 { … … 899 933 } 900 934 901 Int numScalabilityTypes = pcVPS->getNumScalabilityTypes(); 902 903 // Parse dimension_id_len_minus1[j] 904 for( Int sIdx = 0; sIdx < numScalabilityTypes; sIdx++ ) 935 for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes( ) - ( pcVPS->getSplittingFlag() ? 1 : 0 ); sIdx++ ) 905 936 { 906 937 READ_CODE( 3, uiCode, "dimension_id_len_minus1[j]" ); pcVPS->setDimensionIdLen( sIdx, uiCode + 1 ); 907 938 } 908 939 909 // vps_nuh_layer_id_present_flag 940 if ( pcVPS->getSplittingFlag() ) 941 { 942 pcVPS->setDimensionIdLen( pcVPS->getNumScalabilityTypes( ) - 1, pcVPS->inferLastDimsionIdLenMinus1() ); 943 } 944 910 945 READ_FLAG( uiCode, "vps_nuh_layer_id_present_flag" ); pcVPS->setVpsNuhLayerIdPresentFlag( uiCode == 1 ? true : false ); 911 946 912 // parse layer_id_in_nuh[i] and derive LayerIdInVps 913 // already updated to JCT3V-D0220 914 for( Int layer = 0; layer <= pcVPS->getMaxLayers() - 1; layer++ ) 915 { 916 UInt layerIdInNuh; 917 if ( pcVPS->getVpsNuhLayerIdPresentFlag() && ( layer != 0 ) ) 918 { 919 READ_CODE( 6, uiCode, "layer_id_in_nuh[i]" ); layerIdInNuh = uiCode; 947 for( Int i = 0; i <= pcVPS->getMaxLayers() - 1; i++ ) 948 { 949 if ( pcVPS->getVpsNuhLayerIdPresentFlag() && ( i > 0 ) ) 950 { 951 READ_CODE( 6, uiCode, "layer_id_in_nuh[i]" ); pcVPS->setLayerIdInNuh( i, uiCode ); 920 952 } 921 953 else 922 954 { 923 layerIdInNuh = layer; 924 } 925 926 pcVPS->setLayerIdInNuh( layer, layerIdInNuh ); 927 pcVPS->setLayerIdInVps( layerIdInNuh, layer ); 928 929 // parse dimension_id[i][j] 930 for( Int sIdx = 0; sIdx < numScalabilityTypes; sIdx++ ) 931 { 932 READ_CODE( pcVPS->getDimensionIdLen( sIdx ), uiCode, "dimension_id[i][j]" ); pcVPS->setDimensionId( layer, sIdx, uiCode ); 933 } 934 } 935 936 for( Int layerSet = 1; layerSet <= pcVPS->getMaxOpSets() - 1; layerSet++ ) 937 { 938 READ_FLAG( uiCode, "vps_profile_present_flag[lsIdx]" ); pcVPS->setVpsProfilePresentFlag( layerSet, uiCode == 1 ? true : false ); 939 if( pcVPS->getVpsProfilePresentFlag( layerSet ) == false ) 940 { 941 READ_UVLC( uiCode, "profile_layer_set_ref_minus1[lsIdx]" ); pcVPS->setProfileLayerSetRefMinus1( layerSet, uiCode ); 942 } 943 944 parsePTL ( pcVPS->getPTL( layerSet ), pcVPS->getVpsProfilePresentFlag( layerSet ), pcVPS->getMaxTLayers()-1); 945 if( pcVPS->getVpsProfilePresentFlag( layerSet ) == false ) 946 { 947 TComPTL temp = *pcVPS->getPTL( layerSet ); 948 *pcVPS->getPTL( layerSet ) = *pcVPS->getPTL( pcVPS->getProfileLayerSetRefMinus1( layerSet ) + 1 ); 949 pcVPS->getPTL( layerSet )->copyLevelFrom( &temp ); 950 } 951 } 952 953 READ_UVLC( uiCode, "num_output_layer_sets" ); pcVPS->setNumOutputLayerSets( uiCode ); 955 pcVPS->setLayerIdInNuh( i, i );; 956 } 957 958 pcVPS->setLayerIdInVps( pcVPS->getLayerIdInNuh( i ), i ); 954 959 955 for( Int layerSet = 0; layerSet < pcVPS->getNumOutputLayerSets(); layerSet++ ) 956 { 957 READ_UVLC( uiCode, "output_layer_set_idx[i]" ); pcVPS->setOutputLayerSetIdx( layerSet, uiCode ); 958 for( Int layer = 0; layer <= pcVPS->getMaxNuhLayerId(); layer++ ) 959 { 960 if( pcVPS->getLayerIdIncludedFlag( pcVPS->getOutputLayerSetIdx( layerSet ), layer ) == true ) 961 { 962 READ_FLAG( uiCode, "output_layer_flag" ); pcVPS->setOutputLayerFlag( layerSet, layer, uiCode == 1 ? true : false ); 963 } 964 } 965 } 960 for( Int j = 0; j < pcVPS->getNumScalabilityTypes() ; j++ ) 961 { 962 if ( !pcVPS->getSplittingFlag() ) 963 { 964 READ_CODE( pcVPS->getDimensionIdLen( j ), uiCode, "dimension_id[i][j]" ); pcVPS->setDimensionId( i, j, uiCode ); 965 } 966 else 967 { 968 pcVPS->setDimensionId( i, j, pcVPS->inferDimensionId( i, j) ); 969 } 970 } 971 } 972 966 973 967 974 for( Int i = 1; i <= pcVPS->getMaxLayers() - 1; i++ ) … … 972 979 } 973 980 } 974 981 982 for( Int i = 0; i < pcVPS->getMaxLayers() - 1; i++ ) 983 { 984 READ_CODE( 3, uiCode, "max_tid_il_ref_pics_plus1[i]" ); pcVPS->setMaxTidIlRefPicPlus1( i , uiCode ); 985 } 986 987 READ_CODE( 10, uiCode, "vps_number_layer_sets_minus1" ); pcVPS->setVpsNumberLayerSetsMinus1 ( uiCode ); 988 READ_CODE( 6, uiCode, "vps_num_profile_tier_level_minus1" ); pcVPS->setVpsNumProfileTierLevelMinus1( uiCode ); 989 990 for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ ) 991 { 992 READ_FLAG( uiCode, "vps_profile_present_flag[i]" ); pcVPS->setVpsProfilePresentFlag( i, uiCode == 1 ); 993 if( !pcVPS->getVpsProfilePresentFlag( i ) ) 994 { 995 READ_CODE( 6, uiCode, "profile_ref_minus1[i]" ); pcVPS->setProfileRefMinus1( i, uiCode ); 996 } 997 parsePTL ( pcVPS->getPTL( i ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers()-1); 998 if( !pcVPS->getVpsProfilePresentFlag( i ) ) 999 { 1000 TComPTL temp = *pcVPS->getPTL( i ); 1001 *pcVPS->getPTL( i ) = *pcVPS->getPTL( pcVPS->getProfileRefMinus1( i ) + 1 ); 1002 pcVPS->getPTL( i )->copyLevelFrom( &temp ); 1003 } 1004 } 1005 1006 Int numOutputLayerSets = pcVPS->getVpsNumberLayerSetsMinus1( ) + 1; 1007 1008 READ_FLAG( uiCode, "more_output_layer_sets_than_default_flag" ); pcVPS->setMoreOutputLayerSetsThanDefaultFlag( uiCode == 1 ); 1009 1010 if ( pcVPS->getMoreOutputLayerSetsThanDefaultFlag( ) ) 1011 { 1012 READ_CODE( 10, uiCode, "num_add_output_layer_sets_minus1" ); pcVPS->setNumAddOutputLayerSetsMinus1( uiCode ); 1013 numOutputLayerSets += ( pcVPS->getNumAddOutputLayerSetsMinus1( ) + 1); 1014 } 1015 1016 if( numOutputLayerSets > 1) 1017 { 1018 READ_FLAG( uiCode, "default_one_target_output_layer_flag" ); pcVPS->setDefaultOneTargetOutputLayerFlag( uiCode == 1); 1019 } 1020 1021 for( Int i = 1; i < numOutputLayerSets; i++ ) 1022 { 1023 if( i > pcVPS->getVpsNumberLayerSetsMinus1( ) ) 1024 { 1025 READ_UVLC( uiCode, "output_layer_set_idx_minus1[i]" ); pcVPS->setOutputLayerSetIdxMinus1( i, uiCode ); 1026 for( Int j = 0; j < pcVPS->getNumLayersInIdList( j ) - 1; j++ ) 1027 { 1028 READ_FLAG( uiCode, "output_layer_flag" ); pcVPS->setOutputLayerFlag( i, j, uiCode == 1 ); 1029 } 1030 } 1031 if ( pcVPS->getProfileLevelTierIdxLen() > 0 ) 1032 { 1033 READ_CODE( pcVPS->getProfileLevelTierIdxLen(), uiCode,"profile_level_tier_idx[ i ]" ); pcVPS->setProfileLevelTierIdx( i , uiCode ); 1034 } 1035 } 1036 1037 READ_FLAG( uiCode , "max_one_active_ref_layer_flag" ); pcVPS->setMaxOneActiveRefLayerFlag( uiCode == 1 ); 1038 READ_UVLC( uiCode, "direct_dep_type_len_minus2"); pcVPS->setDirectDepTypeLenMinus2 ( uiCode ); 1039 1040 for( Int i = 1; i <= pcVPS->getMaxLayers() - 1; i++ ) 1041 { 1042 for( Int j = 0; j < i; j++ ) 1043 { 1044 if (pcVPS->getDirectDependencyFlag( i, j) ) 1045 { 1046 READ_CODE( pcVPS->getDirectDepTypeLenMinus2( ) + 2, uiCode, "direct_dependency_type[i][j]" ); pcVPS->setDirectDependencyType( i, j , uiCode); 1047 } 1048 } 1049 } 1050 1051 READ_FLAG ( uiCode, "vps_shvc_reserved_zero_flag" ); 1052 1053 #if H_3D 975 1054 READ_FLAG( uiCode, "vps_extension2_flag" ); 976 1055 if (uiCode) 977 1056 { 978 #if H_3D979 1057 m_pcBitstream->readOutTrailingBits(); 980 1058 … … 1039 1117 } 1040 1118 READ_FLAG( uiCode, "iv_mv_scaling_flag"); pcVPS->setIvMvScalingFlag( uiCode == 1 ? true : false ); 1041 #else1042 while ( xMoreRbspData() )1043 {1044 READ_FLAG( uiCode, "vps_extension2_data_flag");1045 }1046 1119 #endif 1047 1120 } … … 1049 1122 pcVPS->checkVPSExtensionSyntax(); 1050 1123 1051 pcVPS-> calcIvRefLayers();1124 pcVPS->setRefLayers(); 1052 1125 1053 1126 #else … … 1147 1220 if(!rpcSlice->getDependentSliceSegmentFlag()) 1148 1221 { 1222 #if H_MV 1223 if ( rpcSlice->getPPS()->getNumExtraSliceHeaderBits() > 0 ) 1224 { 1225 READ_FLAG( uiCode, "discardable_flag" ); rpcSlice->setDiscardableFlag( uiCode == 1 ); 1226 } 1227 1228 for (Int i = 1; i < rpcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++) 1229 #else 1149 1230 for (Int i = 0; i < rpcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++) 1231 #endif 1150 1232 { 1151 1233 READ_FLAG(uiCode, "slice_reserved_undetermined_flag[]"); // ignored … … 1175 1257 rps->setNumberOfPictures(0); 1176 1258 rpcSlice->setRPS(rps); 1259 #if H_MV 1260 rpcSlice->setEnableTMVPFlag(false); 1261 #endif 1177 1262 } 1178 1263 else … … 1332 1417 } 1333 1418 } 1419 #if H_MV 1420 Int layerIdInVps = rpcSlice->getLayerIdInVps(); 1421 if( rpcSlice->getLayerId() > 0 && vps->getNumDirectRefLayers( layerIdInVps ) > 0 ) 1422 { 1423 READ_FLAG( uiCode, "inter_layer_pred_enabled_flag" ); rpcSlice->setInterLayerPredEnabledFlag( uiCode == 1 ); 1424 if( rpcSlice->getInterLayerPredEnabledFlag() && vps->getNumDirectRefLayers( layerIdInVps ) > 1 ) 1425 { 1426 if( !vps->getMaxOneActiveRefLayerFlag()) 1427 { 1428 READ_CODE( rpcSlice->getNumInterLayerRefPicsMinus1Len( ), uiCode, "num_inter_layer_ref_pics_minus1" ); rpcSlice->setNumInterLayerRefPicsMinus1( uiCode ); 1429 } 1430 for( Int i = 0; i < rpcSlice->getNumActiveRefLayerPics(); i++ ) 1431 { 1432 READ_CODE( rpcSlice->getInterLayerPredLayerIdcLen( ), uiCode, "inter_layer_pred_layer_idc" ); rpcSlice->setInterLayerPredLayerIdc( i, uiCode ); 1433 } 1434 } 1435 } 1436 1437 rpcSlice->setActiveMotionPredRefLayers( ); 1438 1439 if( vps->getNumSamplePredRefLayers( layerIdInVps ) > 0 && rpcSlice->getNumActiveRefLayerPics() > 0 ) 1440 { 1441 READ_FLAG( uiCode, "inter_layer_sample_pred_only_flag" ); rpcSlice->setInterLayerSamplePredOnlyFlag( uiCode == 1 ); 1442 } 1443 1444 #endif 1334 1445 if(sps->getUseSAO()) 1335 1446 { … … 1472 1583 if ( rpcSlice->getEnableTMVPFlag() ) 1473 1584 { 1585 #if H_MV 1586 if( rpcSlice->getLayerId() > 0 && rpcSlice->getNumActiveMotionPredRefLayers() > 0 ) 1587 { 1588 READ_FLAG( uiCode, "alt_collocated_indication_flag" ); rpcSlice->setAltCollocatedIndicationFlag( uiCode == 1 ); 1589 } 1590 1591 if( rpcSlice->getAltCollocatedIndicationFlag() && rpcSlice->getNumActiveMotionPredRefLayers() > 1 ) 1592 { 1593 READ_UVLC( uiCode, "collocated_ref_layer_idx" ); rpcSlice->setCollocatedRefLayerIdx( uiCode ); 1594 } 1595 else 1596 { 1597 #endif 1474 1598 if ( rpcSlice->getSliceType() == B_SLICE ) 1475 1599 { … … 1493 1617 rpcSlice->setColRefIdx(0); 1494 1618 } 1619 #if H_MV 1620 } 1621 #endif 1495 1622 } 1496 1623 if ( (pps->getUseWP() && rpcSlice->getSliceType()==P_SLICE) || (pps->getWPBiPred() && rpcSlice->getSliceType()==B_SLICE) ) -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibDecoder/TDecTop.cpp
r532 r534 52 52 m_aaiCodedScale = new Int* [ MAX_NUM_LAYERS ]; 53 53 m_aiViewId = new Int [ MAX_NUM_LAYERS ]; 54 #if !H_3D_FIX55 m_aiLayerIdx = new Int [ MAX_NUM_LAYERS ];56 #endif57 54 58 55 m_bViewReceived = new Bool [ MAX_NUM_LAYERS ]; … … 520 517 #if H_MV 521 518 TComSlice::markIvRefPicsAsShortTerm( m_refPicSetInterLayer ); 519 TComSlice::markCurrPic( pcPic ); 522 520 TComSlice::markIvRefPicsAsUnused ( m_ivPicLists, targetDecLayerIdSet, m_parameterSetManagerDecoder.getActiveVPS(), m_layerId, poc ); 523 521 #endif … … 675 673 676 674 #if H_MV 675 m_apcSlicePilot->setRefPicSetInterLayer( & m_refPicSetInterLayer ); 677 676 m_apcSlicePilot->setLayerId( nalu.m_layerId ); 678 677 #endif … … 1036 1035 { 1037 1036 TComSPS* sps = new TComSPS(); 1037 #if H_MV 1038 sps->setLayerId( getLayerId() ); 1039 #endif 1038 1040 #if H_3D 1039 1041 // Preliminary fix. assuming that all sps refer to the same SPS. -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncCavlc.cpp
r533 r534 338 338 { 339 339 WRITE_FLAG(pcVUI->getTilesFixedStructureFlag(), "tiles_fixed_structure_flag"); 340 #if H_MV 341 if ( pcSPS->getLayerId() > 0 ) 342 { 343 WRITE_FLAG( pcVUI->getTileBoundariesAlignedFlag( ) ? 1 : 0 , "tile_boundaries_aligned_flag" ); 344 } 345 #endif 340 346 WRITE_FLAG(pcVUI->getMotionVectorsOverPicBoundariesFlag(), "motion_vectors_over_pic_boundaries_flag"); 341 347 WRITE_FLAG(pcVUI->getRestrictedRefPicListsFlag(), "restricted_ref_pic_lists_flag"); … … 452 458 #endif 453 459 WRITE_CODE( pcSPS->getVPSId (), 4, "sps_video_parameter_set_id" ); 460 #if H_MV 461 if ( pcSPS->getLayerId() == 0 ) 462 { 463 #endif 454 464 WRITE_CODE( pcSPS->getMaxTLayers() - 1, 3, "sps_max_sub_layers_minus1" ); 455 465 WRITE_FLAG( pcSPS->getTemporalIdNestingFlag() ? 1 : 0, "sps_temporal_id_nesting_flag" ); 456 466 codePTL(pcSPS->getPTL(), 1, pcSPS->getMaxTLayers() - 1); 467 #if H_MV 468 } 469 #endif 457 470 WRITE_UVLC( pcSPS->getSPSId (), "sps_seq_parameter_set_id" ); 458 471 WRITE_UVLC( pcSPS->getChromaFormatIdc (), "chroma_format_idc" ); … … 565 578 WRITE_FLAG( 1, "sps_extension_flag" ); 566 579 WRITE_FLAG( pcSPS->getInterViewMvVertConstraintFlag() ? 1 : 0, "inter_view_mv_vert_constraint_flag" ); 580 //// sps_extension_vui_parameters( ) 581 if( pcSPS->getVuiParameters()->getBitstreamRestrictionFlag() ) 582 { 583 WRITE_UVLC( pcSPS->getNumIlpRestrictedRefLayers( ), "num_ilp_restricted_ref_layers" ); 584 for( Int i = 0; i < pcSPS->getNumIlpRestrictedRefLayers( ); i++ ) 585 { 586 WRITE_UVLC( pcSPS->getMinSpatialSegmentOffsetPlus1( i ), "min_spatial_segment_offset_plus1" ); 587 if( pcSPS->getMinSpatialSegmentOffsetPlus1( i ) > 0 ) 588 { 589 WRITE_FLAG( pcSPS->getCtuBasedOffsetEnabledFlag( i ), "ctu_based_offset_enabled_flag[ i ]"); 590 if( pcSPS->getCtuBasedOffsetEnabledFlag( i ) ) 591 { 592 WRITE_UVLC( pcSPS->getMinHorizontalCtuOffsetPlus1( i ), "min_horizontal_ctu_offset_plus1[ i ]"); 593 } 594 } 595 } 596 } 597 //// sps_extension_vui_parameters( ) END 598 WRITE_UVLC( 0, "sps_shvc_reserved_zero_idc" ); 567 599 #if !H_3D 568 600 WRITE_FLAG( 0, "sps_extension2_flag" ); … … 632 664 assert( pcVPS->getNumHrdParameters() <= MAX_VPS_NUM_HRD_PARAMETERS ); 633 665 #if H_MV 634 assert( pcVPS->getMaxNuhLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 ); 635 WRITE_CODE( pcVPS->getMaxNuhLayerId(), 6, "vps_max_nuh_layer_id" ); 666 assert( pcVPS->getVpsMaxLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 ); 667 WRITE_CODE( pcVPS->getVpsMaxLayerId(), 6, "vps_max_layer_id" ); 668 669 WRITE_UVLC( pcVPS->getVpsNumLayerSetsMinus1(), "vps_max_num_layer_sets_minus1" ); 670 for( UInt opsIdx = 1; opsIdx <= pcVPS->getVpsNumLayerSetsMinus1(); opsIdx ++ ) 671 { 672 // Operation point set 673 for( UInt i = 0; i <= pcVPS->getVpsMaxLayerId(); i ++ ) 674 { 636 675 #else 637 676 assert( pcVPS->getMaxNuhReservedZeroLayerId() < MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 ); 638 677 WRITE_CODE( pcVPS->getMaxNuhReservedZeroLayerId(), 6, "vps_max_nuh_reserved_zero_layer_id" ); 639 #endif 678 640 679 pcVPS->setMaxOpSets(1); 641 680 WRITE_UVLC( pcVPS->getMaxOpSets() - 1, "vps_max_op_sets_minus1" ); … … 643 682 { 644 683 // Operation point set 645 #if H_MV646 for( UInt i = 0; i <= pcVPS->getMaxNuhLayerId(); i ++ )647 #else648 684 for( UInt i = 0; i <= pcVPS->getMaxNuhReservedZeroLayerId(); i ++ ) 649 #endif650 685 { 651 686 // Only applicable for version 1 652 687 pcVPS->setLayerIdIncludedFlag( true, opsIdx, i ); 688 #endif 653 689 WRITE_FLAG( pcVPS->getLayerIdIncludedFlag( opsIdx, i ) ? 1 : 0, "layer_id_included_flag[opsIdx][i]" ); 654 690 } … … 701 737 } 702 738 703 for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes( ) ; sIdx++ )739 for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes( ) - ( pcVPS->getSplittingFlag() ? 1 : 0 ); sIdx++ ) 704 740 { 705 741 WRITE_CODE( pcVPS->getDimensionIdLen( sIdx ) - 1 , 3, "dimension_id_len_minus1[j]"); 706 742 } 707 743 744 if ( pcVPS->getSplittingFlag() ) 745 { // Ignore old dimension id length 746 pcVPS->setDimensionIdLen( pcVPS->getNumScalabilityTypes( ) - 1 ,pcVPS->inferLastDimsionIdLenMinus1() + 1 ); 747 } 748 749 708 750 WRITE_FLAG( pcVPS->getVpsNuhLayerIdPresentFlag() ? 1 : 0, "vps_nuh_layer_id_present_flag"); 709 751 710 // already updated to JCT3V-D0220 711 for( Int layer = 0; layer <= pcVPS->getMaxLayers() - 1; layer++ ) 712 { 713 if ( ( layer != 0 ) && pcVPS->getVpsNuhLayerIdPresentFlag() ) 714 WRITE_CODE( pcVPS->getLayerIdInNuh( layer ), 6, "layer_id_in_nuh[i]"); 715 for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes() ; sIdx++ ) 752 for( Int i = 0; i <= pcVPS->getMaxLayers() - 1; i++ ) 753 { 754 if ( pcVPS->getVpsNuhLayerIdPresentFlag() && ( i > 0 ) ) 716 755 { 717 WRITE_CODE( pcVPS->getDimensionId( layer, sIdx ), pcVPS->getDimensionIdLen( sIdx ), "dimension_id[i][j]"); 718 } 719 } 720 721 for( Int layerSet = 1; layerSet <= pcVPS->getMaxOpSets() - 1; layerSet++ ) 722 { 723 WRITE_FLAG( pcVPS->getVpsProfilePresentFlag( layerSet ) ? 1 : 0, "vps_profile_present_flag[lsIdx]" ); 724 if( pcVPS->getVpsProfilePresentFlag( layerSet ) == false ) 725 { 726 WRITE_UVLC( pcVPS->getProfileLayerSetRefMinus1( layerSet ), "profile_layer_set_ref_minus1[lsIdx]" ); 727 } 728 codePTL( pcVPS->getPTL( layerSet ), pcVPS->getVpsProfilePresentFlag( layerSet ), pcVPS->getMaxTLayers() - 1 ); 729 } 730 731 WRITE_UVLC( pcVPS->getNumOutputLayerSets(), "num_output_layer_sets" ); 732 733 for( Int layerSet = 0; layerSet < pcVPS->getNumOutputLayerSets(); layerSet++ ) 734 { 735 WRITE_UVLC( pcVPS->getOutputLayerSetIdx( layerSet ), "output_layer_set_idx[i]" ); 736 for( Int layer = 0; layer <= pcVPS->getMaxNuhLayerId(); layer++ ) 737 { 738 if( pcVPS->getLayerIdIncludedFlag( pcVPS->getOutputLayerSetIdx( layerSet ), layer ) == true ) 739 { 740 WRITE_FLAG( pcVPS->getOutputLayerFlag( layerSet, layer ) ? 1 : 0, "output_layer_flag" ); 756 WRITE_CODE( pcVPS->getLayerIdInNuh( i ), 6, "layer_id_in_nuh[i]"); 757 } 758 else 759 { 760 assert( pcVPS->getLayerIdInNuh( i ) == i ); 761 } 762 763 assert( pcVPS->getLayerIdInVps( pcVPS->getLayerIdInNuh( i ) ) == i ); 764 765 for( Int j = 0; j < pcVPS->getNumScalabilityTypes() ; j++ ) 766 { 767 if ( !pcVPS->getSplittingFlag() ) 768 { 769 WRITE_CODE( pcVPS->getDimensionId( i, j ), pcVPS->getDimensionIdLen( j ), "dimension_id[i][j]"); 770 } 771 else 772 { 773 assert( pcVPS->getDimensionId( i, j ) == pcVPS->inferDimensionId( i, j ) ); 741 774 } 742 775 } … … 750 783 } 751 784 } 785 786 for( Int i = 0; i < pcVPS->getMaxLayers() - 1; i++ ) 787 { 788 WRITE_CODE( pcVPS->getMaxTidIlRefPicPlus1( i ), 3, "max_tid_il_ref_pics_plus1[i]" ); 789 } 790 791 WRITE_CODE( pcVPS->getVpsNumberLayerSetsMinus1( ) , 10, "vps_number_layer_sets_minus1" ); 792 WRITE_CODE( pcVPS->getVpsNumProfileTierLevelMinus1( ), 6, "vps_num_profile_tier_level_minus1" ); 793 794 for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ ) 795 { 796 WRITE_FLAG( pcVPS->getVpsProfilePresentFlag( i ) ? 1 : 0, "vps_profile_present_flag[i]" ); 797 if( !pcVPS->getVpsProfilePresentFlag( i ) ) 798 { 799 WRITE_CODE( pcVPS->getProfileRefMinus1( i ), 6, "profile_ref_minus1[i]" ); 800 } 801 codePTL( pcVPS->getPTL( i ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers() - 1 ); 802 } 803 804 Int numOutputLayerSets = pcVPS->getVpsNumberLayerSetsMinus1( ) + 1; 805 806 WRITE_FLAG( pcVPS->getMoreOutputLayerSetsThanDefaultFlag( ) ? 1 : 0, "more_output_layer_sets_than_default_flag" ); 807 808 if ( pcVPS->getMoreOutputLayerSetsThanDefaultFlag( ) ) 809 { 810 WRITE_CODE( pcVPS->getNumAddOutputLayerSetsMinus1( ) , 10, "num_add_output_layer_sets_minus1" ); 811 numOutputLayerSets += ( pcVPS->getNumAddOutputLayerSetsMinus1( ) + 1 ); 812 } 813 814 if( numOutputLayerSets > 1) 815 { 816 WRITE_FLAG( pcVPS->getDefaultOneTargetOutputLayerFlag( ) ? 1 : 0, "default_one_target_output_layer_flag" ); 817 } 818 819 for( Int i = 1; i < numOutputLayerSets; i++ ) 820 { 821 if( i > pcVPS->getVpsNumberLayerSetsMinus1( ) ) 822 { 823 WRITE_UVLC( pcVPS->getOutputLayerSetIdxMinus1( i ), "output_layer_set_idx_minus1[i]" ); 824 for( Int j = 0; j < pcVPS->getNumLayersInIdList( j ) - 1 ; j++ ) 825 { 826 WRITE_FLAG( pcVPS->getOutputLayerFlag( i, j) ? 1 : 0, "output_layer_flag" ); 827 } 828 } 829 if ( pcVPS->getProfileLevelTierIdxLen() > 0 ) 830 { 831 WRITE_CODE( pcVPS->getProfileLevelTierIdx( i ), pcVPS->getProfileLevelTierIdxLen() ,"profile_level_tier_idx[ i ]" ); 832 } 833 } 834 835 WRITE_FLAG( pcVPS->getMaxOneActiveRefLayerFlag( ) ? 1 : 0, "max_one_active_ref_layer_flag" ); 836 WRITE_UVLC( pcVPS->getDirectDepTypeLenMinus2 ( ), "direct_dep_type_len_minus2"); 837 838 for( Int i = 1; i <= pcVPS->getMaxLayers() - 1; i++ ) 839 { 840 for( Int j = 0; j < i; j++ ) 841 { 842 if (pcVPS->getDirectDependencyFlag( i, j) ) 843 { 844 assert ( pcVPS->getDirectDependencyType( i, j ) != -1 ); 845 WRITE_CODE( pcVPS->getDirectDependencyType( i, j ),pcVPS->getDirectDepTypeLenMinus2( ) + 2, "direct_dependency_type[i][j]" ); 846 } 847 } 848 } 849 850 WRITE_FLAG ( 0, "vps_shvc_reserved_zero_flag" ); 851 752 852 #if H_3D_GEN 753 853 WRITE_FLAG( 1, "vps_extension2_flag" ); … … 811 911 Void TEncCavlc::codeSliceHeader ( TComSlice* pcSlice ) 812 912 { 913 #if H_MV 914 TComVPS* vps = pcSlice->getVPS(); 915 #endif 813 916 #if ENC_DEC_TRACE 814 917 xTraceSliceHeader (pcSlice); … … 853 956 if ( !pcSlice->getDependentSliceSegmentFlag() ) 854 957 { 958 #if H_MV 959 if ( pcSlice->getPPS()->getNumExtraSliceHeaderBits() > 0 ) 960 { 961 WRITE_FLAG( pcSlice->getDiscardableFlag( ) ? 1 : 0 , "discardable_flag" ); 962 } 963 964 for (Int i = 1; i < pcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++) 965 #else 855 966 for (Int i = 0; i < pcSlice->getPPS()->getNumExtraSliceHeaderBits(); i++) 967 #endif 856 968 { 857 969 assert(!!"slice_reserved_undetermined_flag[]"); … … 1016 1128 } 1017 1129 } 1130 #if H_MV 1131 Int layerIdInVps = pcSlice->getLayerIdInVps(); 1132 if( pcSlice->getLayerId() > 0 && vps->getNumDirectRefLayers( layerIdInVps ) > 0 ) 1133 { 1134 WRITE_FLAG( pcSlice->getInterLayerPredEnabledFlag( ) ? 1 : 0 , "inter_layer_pred_enabled_flag" ); 1135 if( pcSlice->getInterLayerPredEnabledFlag() && vps->getNumDirectRefLayers( layerIdInVps ) > 1 ) 1136 { 1137 if( !vps->getMaxOneActiveRefLayerFlag()) 1138 { 1139 WRITE_CODE( pcSlice->getNumInterLayerRefPicsMinus1( ), pcSlice->getNumInterLayerRefPicsMinus1Len( ), "num_inter_layer_ref_pics_minus1" ); 1140 } 1141 for( Int i = 0; i < pcSlice->getNumActiveRefLayerPics(); i++ ) 1142 { 1143 WRITE_CODE( pcSlice->getInterLayerPredLayerIdc( i ), pcSlice->getInterLayerPredLayerIdcLen( ), "inter_layer_pred_layer_idc" ); 1144 } 1145 } 1146 } 1147 1148 if( vps->getNumSamplePredRefLayers( layerIdInVps ) > 0 && pcSlice->getNumActiveRefLayerPics() > 0 ) 1149 { 1150 WRITE_FLAG( pcSlice->getInterLayerSamplePredOnlyFlag( ) ? 1 : 0 , "inter_layer_sample_pred_only_flag" ); 1151 } 1152 1153 #endif 1018 1154 if(pcSlice->getSPS()->getUseSAO()) 1019 1155 { … … 1123 1259 if ( pcSlice->getEnableTMVPFlag() ) 1124 1260 { 1261 #if H_MV 1262 if( pcSlice->getLayerId() > 0 && pcSlice->getNumActiveMotionPredRefLayers() > 0 ) 1263 { 1264 WRITE_FLAG( pcSlice->getAltCollocatedIndicationFlag( ) ? 1 : 0 , "alt_collocated_indication_flag" ); 1265 } 1266 if( pcSlice->getAltCollocatedIndicationFlag() && pcSlice->getNumActiveMotionPredRefLayers() > 1 ) 1267 { 1268 WRITE_UVLC( pcSlice->getCollocatedRefLayerIdx( ), "collocated_ref_layer_idx" ); 1269 } 1270 else 1271 { 1272 #endif 1125 1273 if ( pcSlice->getSliceType() == B_SLICE ) 1126 1274 { … … 1135 1283 } 1136 1284 } 1285 #if H_MV 1286 } 1287 #endif 1137 1288 if ( (pcSlice->getPPS()->getUseWP() && pcSlice->getSliceType()==P_SLICE) || (pcSlice->getPPS()->getWPBiPred() && pcSlice->getSliceType()==B_SLICE) ) 1138 1289 { -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncCfg.h
r532 r534 74 74 Int m_refIdc[MAX_NUM_REF_PICS+1]; 75 75 #if H_MV 76 Int m_num InterViewRefPics;77 Int m_inter ViewRefs[MAX_NUM_REF_PICS];76 Int m_numActiveRefLayerPics; 77 Int m_interLayerPredLayerIdc [MAX_NUM_REF_PICS]; 78 78 Int m_interViewRefPosL[2][MAX_NUM_REF_PICS]; 79 Int m_collocatedRefLayerIdx; 79 80 #endif 80 81 GOPEntry() … … 93 94 , m_numRefIdc(0) 94 95 #if H_MV 95 , m_numInterViewRefPics(0) 96 , m_numActiveRefLayerPics(0) 97 , m_collocatedRefLayerIdx(-1) 96 98 #endif 97 99 { … … 100 102 ::memset( m_refIdc, 0, sizeof(m_refIdc) ); 101 103 #if H_MV 102 ::memset( m_inter ViewRefs, 0, sizeof(m_interViewRefs) );104 ::memset( m_interLayerPredLayerIdc, 0, sizeof(m_interLayerPredLayerIdc) ); 103 105 ::memset( m_interViewRefPosL[0], -1, sizeof(m_interViewRefPosL[0]) ); 104 106 ::memset( m_interViewRefPosL[1], -1, sizeof(m_interViewRefPosL[1]) ); … … 429 431 , m_viewIndex(-1) 430 432 , m_isDepth(false) 433 , m_bUseVSO(false) 431 434 #endif 432 435 #endif -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncGOP.cpp
r532 r534 502 502 pcSlice->setSliceIdx(0); 503 503 #if H_MV 504 pcSlice->setRefPicSetInterLayer ( &m_refPicSetInterLayer ); 504 505 pcPic ->setLayerId ( getLayerId() ); 505 506 pcPic ->setViewId ( getViewId() ); … … 669 670 refPicListModification->setRefPicListModificationFlagL1(0); 670 671 #if H_MV 672 if ( pcSlice->getPPS()->getNumExtraSliceHeaderBits() > 0 ) 673 { 674 pcSlice->setDiscardableFlag ( false ); 675 } 676 677 TComVPS* vps = pcSlice->getVPS(); 678 Int layerIdInVps = vps ->getLayerIdInVps( getLayerId()); 679 Int numDirectRefLayers = vps ->getNumDirectRefLayers( layerIdInVps ); 680 GOPEntry gopEntry = m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && getLayerId() > 0) ? MAX_GOP : iGOPid ); 681 682 if ( getLayerId() > 0 && numDirectRefLayers > 0 ) 683 { 684 pcSlice->setInterLayerPredEnabledFlag ( gopEntry.m_numActiveRefLayerPics > 0 ); 685 if ( pcSlice->getInterLayerPredEnabledFlag() && numDirectRefLayers > 1 ) 686 { 687 if ( !vps->getMaxOneActiveRefLayerFlag() ) 688 { 689 pcSlice->setNumInterLayerRefPicsMinus1( gopEntry.m_numActiveRefLayerPics - 1 ); 690 } 691 for (Int i = 0; i < gopEntry.m_numActiveRefLayerPics; i++ ) 692 { 693 pcSlice->setInterLayerPredLayerIdc( i, gopEntry.m_interLayerPredLayerIdc[ i ] ); 694 } 695 } 696 } 697 assert( pcSlice->getNumActiveRefLayerPics() == gopEntry.m_numActiveRefLayerPics ); 698 699 if ( vps->getNumSamplePredRefLayers( layerIdInVps ) > 0 && pcSlice->getNumActiveRefLayerPics() > 0) 700 { 701 pcSlice->setInterLayerSamplePredOnlyFlag( gopEntry.m_numRefPics == 0 ); 702 } 703 671 704 pcSlice->createAndApplyIvReferencePictureSet( m_ivPicLists, m_refPicSetInterLayer ); 672 pcSlice->setNumRefIdx(REF_PIC_LIST_0,min(m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && getLayerId() > 0) ? MAX_GOP : iGOPid ).m_numRefPicsActive,( pcSlice->getRPS()->getNumberOfPictures() + (Int) m_refPicSetInterLayer.size() ) ) ); 673 pcSlice->setNumRefIdx(REF_PIC_LIST_1,min(m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && getLayerId() > 0) ? MAX_GOP : iGOPid ).m_numRefPicsActive,( pcSlice->getRPS()->getNumberOfPictures() + (Int) m_refPicSetInterLayer.size() ) ) ); 674 xSetRefPicListModificationsMvc( pcSlice, pocCurr, iGOPid ); 705 pcSlice->setNumRefIdx(REF_PIC_LIST_0,min(gopEntry.m_numRefPicsActive,( pcSlice->getRPS()->getNumberOfPictures() + (Int) m_refPicSetInterLayer.size() ) ) ); 706 pcSlice->setNumRefIdx(REF_PIC_LIST_1,min(gopEntry.m_numRefPicsActive,( pcSlice->getRPS()->getNumberOfPictures() + (Int) m_refPicSetInterLayer.size() ) ) ); 707 708 xSetRefPicListModificationsMv( pcSlice, iGOPid ); 709 710 pcSlice->setActiveMotionPredRefLayers( ); 711 712 if ( getLayerId() > 0 && pcSlice->getNumActiveMotionPredRefLayers() > 0 && pcSlice->getEnableTMVPFlag() && 713 ( pcSlice->getSliceType() == B_SLICE || pcSlice->getSliceType() == P_SLICE )) 714 { 715 pcSlice->setAltCollocatedIndicationFlag( gopEntry.m_collocatedRefLayerIdx >= 0 ); 716 if ( pcSlice->getNumActiveRefLayerPics() && pcSlice->getNumActiveMotionPredRefLayers() > 0 ) 717 { 718 pcSlice->setCollocatedRefLayerIdx( gopEntry.m_collocatedRefLayerIdx ); 719 } 720 } 721 675 722 #else 676 723 pcSlice->setNumRefIdx(REF_PIC_LIST_0,min(m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive,pcSlice->getRPS()->getNumberOfPictures())); … … 827 874 pcSlice->setEnableTMVPFlag(0); 828 875 } 829 830 876 #if H_MV 831 877 if( pcSlice->getIdrPicFlag() ) … … 2120 2166 TComSlice::markIvRefPicsAsShortTerm( m_refPicSetInterLayer ); 2121 2167 std::vector<Int> temp; 2168 TComSlice::markCurrPic( pcPic ); 2122 2169 TComSlice::markIvRefPicsAsUnused ( m_ivPicLists, temp, pcPic->getSlice(0)->getVPS(), m_layerId, pcPic->getPOC() ); 2123 2170 #endif … … 2950 2997 #endif 2951 2998 #if H_MV 2952 Void TEncGOP::xSetRefPicListModificationsMv c( TComSlice* pcSlice, UInt uiPOCCurr, UInt iGOPid )2999 Void TEncGOP::xSetRefPicListModificationsMv( TComSlice* pcSlice, UInt iGOPid ) 2953 3000 { 2954 TComVPS* vps = pcSlice->getVPS();2955 3001 Int layer = pcSlice->getLayerIdInVps( ); 2956 3002 2957 if( pcSlice->getSliceType() == I_SLICE || !(pcSlice->getPPS()->getListsModificationPresentFlag()) || vps->getNumDirectRefLayers( layer) == 0 )3003 if( pcSlice->getSliceType() == I_SLICE || !(pcSlice->getPPS()->getListsModificationPresentFlag()) || pcSlice->getNumActiveRefLayerPics() == 0 ) 2958 3004 { 2959 3005 return; … … 2962 3008 // analyze inter-view modifications 2963 3009 GOPEntry ge = m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && ( layer > 0) ) ? MAX_GOP : iGOPid ); 2964 2965 TComRefPicListModification* refPicListModification = pcSlice->getRefPicListModification(); 3010 assert( ge.m_numActiveRefLayerPics == pcSlice->getNumActiveRefLayerPics() ); 2966 3011 2967 3012 Int maxRefListSize = pcSlice->getNumRpsCurrTempList(); 2968 Int numTemporalRefs = maxRefListSize - vps->getNumDirectRefLayers( layer ); 2969 3013 Int numTemporalRefs = maxRefListSize - pcSlice->getNumActiveRefLayerPics(); 2970 3014 2971 3015 for (Int li = 0; li < 2; li ++) // Loop over lists L0 and L1 2972 3016 { 2973 Int numModifications = 0; 2974 2975 for( Int k = 0; k < ge.m_numInterViewRefPics; k++ ) 2976 { 2977 numModifications += ( ge.m_interViewRefPosL[li][k] >= 0 ) ? 1 : 0; 2978 } 2979 2980 // set inter-view modifications 3017 // set inter-view modifications 3018 Int tempList[16]; 3019 for( Int k = 0; k < 16; k++ ) 3020 { 3021 tempList[ k ] = -1; 3022 } 3023 2981 3024 Bool isModified = false; 2982 Int tempList[16]; 2983 for( Int k = 0; k < 16; k++ ) { tempList[k] = -1; } 2984 2985 if( (maxRefListSize > 1) && (numModifications > 0) ) 2986 { 2987 for( Int k = 0; k < ge.m_numInterViewRefPics; k++ ) 2988 { 2989 if( ge.m_interViewRefPosL[li][k] >= 0 ) 2990 { 2991 Int orgIdx = numTemporalRefs; 3025 if ( maxRefListSize > 1 ) 3026 { 3027 for( Int k = 0, orgIdx = numTemporalRefs; k < ge.m_numActiveRefLayerPics; k++, orgIdx++ ) 3028 { 2992 3029 Int targetIdx = ge.m_interViewRefPosL[ li ][ k ]; 2993 for( Int idx = 0; idx < vps->getNumDirectRefLayers( layer ); idx++ ) 2994 { 2995 Int refLayer = vps->getLayerIdInVps( vps->getRefLayerId( layer, idx ) ); 2996 if( ( layer + ge.m_interViewRefs[ k ]) == refLayer ) 3030 3031 isModified = ( targetIdx != orgIdx ) && ( targetIdx >= 0 ); 3032 if ( isModified ) 2997 3033 { 3034 assert( tempList[ targetIdx ] == -1 ); // Assert when two inter layer reference pictures are sorted to the same position 2998 3035 tempList[ targetIdx ] = orgIdx; 2999 isModified = ( targetIdx != orgIdx ); 3000 } 3001 orgIdx++; 3002 } 3003 } 3004 } 3005 } 3006 3036 } 3037 } 3038 } 3039 3040 TComRefPicListModification* refPicListModification = pcSlice->getRefPicListModification(); 3007 3041 refPicListModification->setRefPicListModificationFlagL( li, isModified ); 3008 3042 -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncGOP.h
r479 r534 221 221 #endif 222 222 #if H_MV 223 Void xSetRefPicListModificationsMv c( TComSlice* pcSlice, UInt uiPOCCurr, UInt iGOPid );223 Void xSetRefPicListModificationsMv( TComSlice* pcSlice, UInt iGOPid ); 224 224 #endif 225 225 #if L0386_DB_METRIC -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncTop.cpp
r532 r534 525 525 #if H_MV 526 526 m_cSPS.setSPSId( getLayerIdInVps() ); 527 m_cSPS.setLayerId( getLayerId() ); 527 528 #endif 528 529 ProfileTierLevel& profileTierLevel = *m_cSPS.getPTL()->getGeneralPTL(); … … 746 747 m_cPPS.setWPBiPred( m_useWeightedBiPred ); 747 748 m_cPPS.setOutputFlagPresentFlag( false ); 749 #if H_MV 750 m_cPPS.setNumExtraSliceHeaderBits( 1 ); 751 #endif 748 752 m_cPPS.setSignHideFlag(getSignHideFlag()); 749 753 #if L0386_DB_METRIC -
branches/HTM-DEV-0.3-dev2/source/Lib/TLibExtractor/TExtrTop.cpp
r499 r534 101 101 { 102 102 rcVpsInfoHandle << "MaxLayers = " << m_cVPS.getMaxLayers() << std::endl; 103 rcVpsInfoHandle << "MaxNuhLayerId = " << m_cVPS.get MaxNuhLayerId() << std::endl;103 rcVpsInfoHandle << "MaxNuhLayerId = " << m_cVPS.getVpsMaxLayerId() << std::endl; 104 104 105 105 for ( Int layerIdxInVps = 0; layerIdxInVps < m_cVPS.getMaxLayers(); layerIdxInVps++ )
Note: See TracChangeset for help on using the changeset viewer.