Ticket #57: AssertsForPTL.patch

File AssertsForPTL.patch, 10.4 KB (added by fhendry, 9 years ago)
  • App/TAppEncoder/TAppEncCfg.cpp

     
    19981998    Int olsToLsIndex = (olsCtr >= (m_numLayerSets + m_numAddLayerSets)) ? m_outputLayerSetIdx[olsCtr - (m_numLayerSets + m_numAddLayerSets)] : olsCtr;
    19991999    scanStringToArray( cfg_listOfLayerPTLOfOlss[olsCtr], m_numLayerInIdList[olsToLsIndex], "List of PTL for each layers in OLS", m_listOfLayerPTLofOlss[olsCtr] );
    20002000#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
    20012002    //For conformance checking
    20022003    //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:
    20032004    //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
     
    20202021#if R0235_SMALLEST_LAYER_ID
    20212022    }
    20222023#endif
     2024*/
    20232025#endif
    20242026  }
    20252027#if MULTIPLE_PTL_SUPPORT
  • Lib/TLibCommon/TypeDef.h

     
    7272#define O0137_MAX_LAYERID                1      ///< JCTVC-O0137, JCTVC-O0200, JCTVC-O0223: restrict nuh_layer_id and vps_max_layers_minus1
    7373
    7474#define MULTIPLE_PTL_SUPPORT             1      ///< Fixing profile, tier and level signalling
     75#define ASSERT_PTL                       1
    7576
    7677#define R0226_CONSTRAINT_TMVP_SEI        1      ///< JCTVC-R0226, Modification to semantics in temporal motion vector prediction constraints SEI message
    7778#define R0226_SLICE_TMVP                 1      ///< JCTVC-R0226, Regarding slice_temporal_mvp_enabled_flag
  • Lib/TLibDecoder/TDecCAVLC.cpp

     
    12331233  READ_CODE( 16, uiCode,  "vps_reserved_ffff_16bits" );           assert(uiCode == 0xffff);
    12341234#endif
    12351235  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
    12361246  UInt subLayerOrderingInfoPresentFlag;
    12371247  READ_FLAG(subLayerOrderingInfoPresentFlag, "vps_sub_layer_ordering_info_present_flag");
    12381248  for(UInt i = 0; i <= pcVPS->getMaxTLayers()-1; i++)
     
    13771387    vps->setProfilePresentFlag(1, false);
    13781388#if MULTIPLE_PTL_SUPPORT
    13791389    parsePTL( vps->getPTL(1), vps->getProfilePresentFlag(1), vps->getMaxTLayers() - 1 );
     1390    vps->getPTL(1)->copyProfileInfo( vps->getPTL( 0 ) );
    13801391#else
    13811392    vps->getPTLForExtnPtr()->empty();
    13821393    vps->getPTLForExtnPtr()->resize(2);
     
    18071818        vps->setProfileLevelTierIdx(i, j, uiCode );
    18081819#if MULTIPLE_PTL_SUPPORT
    18091820        //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
    18101824        //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:
    18111825        //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
    18121826        //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:
    18131827        //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
    18141828        //The following assert may be updated / upgraded to take care of general_profile_compatibility_flag.
     1829#if !ASSERT_PTL
    18151830#if R0235_SMALLEST_LAYER_ID
    18161831        // The assertion below is not valid for independent non-base layers
    18171832        if (vps->getNumAddLayerSets() == 0)
    18181833        {
    18191834#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
    18201859        if (j > 0 && vps->getLayerSetLayerIdList(layerSetIdxForOutputLayerSet, j) != 0 && vps->getLayerSetLayerIdList(layerSetIdxForOutputLayerSet, j - 1) != 0)
     1860#endif
    18211861        {
    18221862          assert(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc() ||
    18231863                 vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc()) || 
    18241864                 vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc())  );
    18251865        }
     1866#if !ASSERT_PTL
    18261867#if R0235_SMALLEST_LAYER_ID
    18271868        }
    18281869#endif
    18291870#endif
     1871#endif
    18301872      }
    18311873    }
    18321874#else
  • Lib/TLibEncoder/TEncCavlc.cpp

     
    958958  WRITE_CODE( 0xffff,                              16,        "vps_reserved_ffff_16bits" );
    959959#endif
    960960  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
    961971  const Bool subLayerOrderingInfoPresentFlag = 1;
    962972  WRITE_FLAG(subLayerOrderingInfoPresentFlag,              "vps_sub_layer_ordering_info_present_flag");
    963973  for(UInt i=0; i <= pcVPS->getMaxTLayers()-1; i++)
     
    13911401#endif
    13921402      {
    13931403        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
    13941425      }
    13951426    }
    13961427#else
  • Lib/TLibEncoder/TEncTop.cpp

     
    323323  // initialize SPS
    324324  xInitSPS();
    325325 
     326#if !MULTIPLE_PTL_SUPPORT
    326327  /* set the VPS profile information */
    327328  *m_cVPS.getPTL() = *m_cSPS.getPTL();
     329#endif
    328330#if VPS_VUI_BSP_HRD_PARAMS
    329331  m_cVPS.getTimingInfo()->setTimingInfoPresentFlag       ( true );
    330332#else