Ticket #57: AssertsForPTL.patch
File AssertsForPTL.patch, 10.4 KB (added by fhendry, 9 years ago) |
---|
-
App/TAppEncoder/TAppEncCfg.cpp
1998 1998 Int olsToLsIndex = (olsCtr >= (m_numLayerSets + m_numAddLayerSets)) ? m_outputLayerSetIdx[olsCtr - (m_numLayerSets + m_numAddLayerSets)] : olsCtr; 1999 1999 scanStringToArray( cfg_listOfLayerPTLOfOlss[olsCtr], m_numLayerInIdList[olsToLsIndex], "List of PTL for each layers in OLS", m_listOfLayerPTLofOlss[olsCtr] ); 2000 2000 #endif 2001 /* The assert here is moved to a more appropriate place so it can also incorporate case for additional layer set & independent non-base layers 2001 2002 //For conformance checking 2002 2003 //Conformance of a layer in an output operation point associated with an OLS in a bitstream to the Scalable Main profile is indicated as follows: 2003 2004 //If OpTid of the output operation point is equal to vps_max_sub_layer_minus1, the conformance is indicated by general_profile_idc being equal to 7 or general_profile_compatibility_flag[ 7 ] being equal to 1 … … 2020 2021 #if R0235_SMALLEST_LAYER_ID 2021 2022 } 2022 2023 #endif 2024 */ 2023 2025 #endif 2024 2026 } 2025 2027 #if MULTIPLE_PTL_SUPPORT -
Lib/TLibCommon/TypeDef.h
72 72 #define O0137_MAX_LAYERID 1 ///< JCTVC-O0137, JCTVC-O0200, JCTVC-O0223: restrict nuh_layer_id and vps_max_layers_minus1 73 73 74 74 #define MULTIPLE_PTL_SUPPORT 1 ///< Fixing profile, tier and level signalling 75 #define ASSERT_PTL 1 75 76 76 77 #define R0226_CONSTRAINT_TMVP_SEI 1 ///< JCTVC-R0226, Modification to semantics in temporal motion vector prediction constraints SEI message 77 78 #define R0226_SLICE_TMVP 1 ///< JCTVC-R0226, Regarding slice_temporal_mvp_enabled_flag -
Lib/TLibDecoder/TDecCAVLC.cpp
1233 1233 READ_CODE( 16, uiCode, "vps_reserved_ffff_16bits" ); assert(uiCode == 0xffff); 1234 1234 #endif 1235 1235 parsePTL ( pcVPS->getPTL(), true, pcVPS->getMaxTLayers()-1); 1236 #if ASSERT_PTL 1237 if (pcVPS->getBaseLayerInternalFlag()) 1238 { 1239 assert(pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::MAIN || 1240 pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::MAIN10 || 1241 pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::MAINSTILLPICTURE || 1242 pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::RANGEEXTENSION || 1243 pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::RANGEEXTENSIONHIGH); 1244 } 1245 #endif 1236 1246 UInt subLayerOrderingInfoPresentFlag; 1237 1247 READ_FLAG(subLayerOrderingInfoPresentFlag, "vps_sub_layer_ordering_info_present_flag"); 1238 1248 for(UInt i = 0; i <= pcVPS->getMaxTLayers()-1; i++) … … 1377 1387 vps->setProfilePresentFlag(1, false); 1378 1388 #if MULTIPLE_PTL_SUPPORT 1379 1389 parsePTL( vps->getPTL(1), vps->getProfilePresentFlag(1), vps->getMaxTLayers() - 1 ); 1390 vps->getPTL(1)->copyProfileInfo( vps->getPTL( 0 ) ); 1380 1391 #else 1381 1392 vps->getPTLForExtnPtr()->empty(); 1382 1393 vps->getPTLForExtnPtr()->resize(2); … … 1807 1818 vps->setProfileLevelTierIdx(i, j, uiCode ); 1808 1819 #if MULTIPLE_PTL_SUPPORT 1809 1820 //For conformance checking 1821 //When the layer conforms to the Scalable Main profile, the base layer sub-bitstream baseBitstream shall be indicated to conform to the Main profile. 1822 //When the layer conforms to the Scalable Main 10 profile, the base layer sub-bitstream baseBitstream shall be indicated to conform to the Main 10 profile or the Main profile. 1823 1810 1824 //Conformance of a layer in an output operation point associated with an OLS in a bitstream to the Scalable Main profile is indicated as follows: 1811 1825 //If OpTid of the output operation point is equal to vps_max_sub_layer_minus1, the conformance is indicated by general_profile_idc being equal to 7 or general_profile_compatibility_flag[ 7 ] being equal to 1 1812 1826 //Conformance of a layer in an output operation point associated with an OLS in a bitstream to the Scalable Main 10 profile is indicated as follows: 1813 1827 //If OpTid of the output operation point is equal to vps_max_sub_layer_minus1, the conformance is indicated by general_profile_idc being equal to 7 or general_profile_compatibility_flag[ 7 ] being equal to 1 1814 1828 //The following assert may be updated / upgraded to take care of general_profile_compatibility_flag. 1829 #if !ASSERT_PTL 1815 1830 #if R0235_SMALLEST_LAYER_ID 1816 1831 // The assertion below is not valid for independent non-base layers 1817 1832 if (vps->getNumAddLayerSets() == 0) 1818 1833 { 1819 1834 #endif 1835 #endif 1836 #if ASSERT_PTL 1837 if (vps->getBaseLayerInternalFlag() && j > 0) 1838 { 1839 if (vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == Profile::SCALABLEMAIN) 1840 { 1841 assert(vps->getPTL(vps->getProfileLevelTierIdx(i, 0))->getGeneralPTL()->getProfileIdc() == Profile::MAIN || 1842 vps->getPTL(vps->getProfileLevelTierIdx(i, 0))->getGeneralPTL()->getProfileCompatibilityFlag(1)); 1843 } 1844 else if (vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == Profile::SCALABLEMAIN10) 1845 { 1846 assert(vps->getPTL(vps->getProfileLevelTierIdx(i, 0))->getGeneralPTL()->getProfileIdc() == Profile::MAIN10 || 1847 vps->getPTL(vps->getProfileLevelTierIdx(i, 0))->getGeneralPTL()->getProfileCompatibilityFlag(2)); 1848 } 1849 if ( j > 1 ) 1850 { 1851 assert(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc() || 1852 vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc()) || 1853 vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc()) ); 1854 } 1855 } 1856 1857 if ( j > 1 ) 1858 #else 1820 1859 if (j > 0 && vps->getLayerSetLayerIdList(layerSetIdxForOutputLayerSet, j) != 0 && vps->getLayerSetLayerIdList(layerSetIdxForOutputLayerSet, j - 1) != 0) 1860 #endif 1821 1861 { 1822 1862 assert(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc() || 1823 1863 vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc()) || 1824 1864 vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc()) ); 1825 1865 } 1866 #if !ASSERT_PTL 1826 1867 #if R0235_SMALLEST_LAYER_ID 1827 1868 } 1828 1869 #endif 1829 1870 #endif 1871 #endif 1830 1872 } 1831 1873 } 1832 1874 #else -
Lib/TLibEncoder/TEncCavlc.cpp
958 958 WRITE_CODE( 0xffff, 16, "vps_reserved_ffff_16bits" ); 959 959 #endif 960 960 codePTL( pcVPS->getPTL(), true, pcVPS->getMaxTLayers() - 1 ); 961 #if ASSERT_PTL 962 if (pcVPS->getBaseLayerInternalFlag()) 963 { 964 assert(pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::MAIN || 965 pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::MAIN10 || 966 pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::MAINSTILLPICTURE || 967 pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::RANGEEXTENSION || 968 pcVPS->getPTL()->getGeneralPTL()->getProfileIdc() == Profile::RANGEEXTENSIONHIGH); 969 } 970 #endif 961 971 const Bool subLayerOrderingInfoPresentFlag = 1; 962 972 WRITE_FLAG(subLayerOrderingInfoPresentFlag, "vps_sub_layer_ordering_info_present_flag"); 963 973 for(UInt i=0; i <= pcVPS->getMaxTLayers()-1; i++) … … 1391 1401 #endif 1392 1402 { 1393 1403 WRITE_CODE( vps->getProfileLevelTierIdx(i, j), numBitsForPtlIdx, "profile_level_tier_idx[i]" ); 1404 #if ASSERT_PTL 1405 if (vps->getBaseLayerInternalFlag() && j > 0) 1406 { 1407 if (vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == Profile::SCALABLEMAIN) 1408 { 1409 assert(vps->getPTL(vps->getProfileLevelTierIdx(i, 0))->getGeneralPTL()->getProfileIdc() == Profile::MAIN || 1410 vps->getPTL(vps->getProfileLevelTierIdx(i, 0))->getGeneralPTL()->getProfileCompatibilityFlag(1)); 1411 } 1412 else if (vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == Profile::SCALABLEMAIN10) 1413 { 1414 assert(vps->getPTL(vps->getProfileLevelTierIdx(i, 0))->getGeneralPTL()->getProfileIdc() == Profile::MAIN10 || 1415 vps->getPTL(vps->getProfileLevelTierIdx(i, 0))->getGeneralPTL()->getProfileCompatibilityFlag(2)); 1416 } 1417 if ( j > 1 ) 1418 { 1419 assert(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc() || 1420 vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc()) || 1421 vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc()) ); 1422 } 1423 } 1424 #endif 1394 1425 } 1395 1426 } 1396 1427 #else -
Lib/TLibEncoder/TEncTop.cpp
323 323 // initialize SPS 324 324 xInitSPS(); 325 325 326 #if !MULTIPLE_PTL_SUPPORT 326 327 /* set the VPS profile information */ 327 328 *m_cVPS.getPTL() = *m_cSPS.getPTL(); 329 #endif 328 330 #if VPS_VUI_BSP_HRD_PARAMS 329 331 m_cVPS.getTimingInfo()->setTimingInfoPresentFlag ( true ); 330 332 #else