Changeset 951 in SHVCSoftware for branches


Ignore:
Timestamp:
3 Jan 2015, 01:49:56 (10 years ago)
Author:
qualcomm
Message:

Some fixes for implementation of support for profile tier and level for each layer in an output layer set.
Additionally, add conformance checking such that enhancement layers of an output layer set support the same profile.

submitted by Hendry (fhendry@…)

Location:
branches/SHM-dev
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/cfg/encoder_intra_main.cfg

    r941 r951  
    77NumProfileTierLevel           : 3
    88#Profile for the whole bitstream
    9 Profile0                      : main       
     9Profile0                      : scalable-main       
    1010#Profile for the base layer --- this will be ignored when BL is not HEVC
    1111Profile1                      : main
    1212#Profile for the enhancement layer
    13 Profile2                      : main
     13Profile2                      : scalable-main
    1414
    1515#======== Unit definition ================
  • branches/SHM-dev/cfg/encoder_intra_main10.cfg

    r941 r951  
    77NumProfileTierLevel           : 3
    88#Profile for the whole bitstream
    9 Profile0                      : main10       
     9Profile0                      : scalable-main10       
    1010#Profile for the base layer --- this will be ignored when BL is not HEVC
    1111Profile1                      : main10
    1212#Profile for the enhancement layer
    13 Profile2                      : main10
     13Profile2                      : scalable-main10
    1414
    1515#======== Unit definition ================
  • branches/SHM-dev/cfg/encoder_lowdelay_main.cfg

    r941 r951  
    77NumProfileTierLevel           : 3
    88#Profile for the whole bitstream
    9 Profile0                      : main       
     9Profile0                      : scalable-main       
    1010#Profile for the base layer --- this will be ignored when BL is not HEVC
    1111Profile1                      : main
    1212#Profile for the enhancement layer
    13 Profile2                      : main
     13Profile2                      : scalable-main
    1414
    1515#======== Unit definition ================
  • branches/SHM-dev/cfg/encoder_lowdelay_main10.cfg

    r941 r951  
    77NumProfileTierLevel           : 3
    88#Profile for the whole bitstream
    9 Profile0                      : main10
     9Profile0                      : scalable-main10
    1010#Profile for the base layer --- this will be ignored when BL is not HEVC
    1111Profile1                      : main10
    1212#Profile for the enhancement layer
    13 Profile2                      : main10
     13Profile2                      : scalable-main10
    1414
    1515#======== Unit definition ================
  • branches/SHM-dev/cfg/encoder_randomaccess_main.cfg

    r941 r951  
    77NumProfileTierLevel           : 3
    88#Profile for the whole bitstream
    9 Profile0                      : main       
     9Profile0                      : scalable-main       
    1010#Profile for the base layer --- this will be ignored when BL is not HEVC
    1111Profile1                      : main
    1212#Profile for the enhancement layer
    13 Profile2                      : main
     13Profile2                      : scalable-main
    1414
    1515#======== Unit definition ================
  • branches/SHM-dev/cfg/encoder_randomaccess_main10.cfg

    r941 r951  
    77NumProfileTierLevel           : 3
    88#Profile for the whole bitstream
    9 Profile0                      : main10       
     9Profile0                      : scalable-main10       
    1010#Profile for the base layer --- this will be ignored when BL is not HEVC
    1111Profile1                      : main10
    1212#Profile for the enhancement layer
    13 Profile2                      : main10
     13Profile2                      : scalable-main10
    1414
    1515#======== Unit definition ================
  • branches/SHM-dev/source/App/TAppEncoder/TAppEncCfg.cpp

    r950 r951  
    290290  {"main10", Profile::MAIN10},
    291291  {"main-still-picture", Profile::MAINSTILLPICTURE},
     292#if MULTIPLE_PTL_SUPPORT
     293  {"range-extension", Profile::RANGEEXTENSION},       //This is not used in this software
     294  {"range-extension-high", Profile::RANGEEXTENSIONHIGH},       //This is not used in this software
     295  {"multiview-main", Profile::MULTIVIEWMAIN},       //This is not used in this software
     296  {"scalable-main", Profile::SCALABLEMAIN},
     297  {"scalable-main10", Profile::SCALABLEMAIN10},
     298#endif
    292299};
    293300
     
    841848  // Profile and level
    842849#if SVC_EXTENSION && MULTIPLE_PTL_SUPPORT
    843   ("NumProfileTierLevel", m_numPTLInfo, 2, "Number of Profile, Tier and Level information")
    844   ("Profile%d", m_profileList,   Profile::NONE, NUM_POSSIBLE_LEVEL, "Profile to be used when encoding (Incomplete)")
    845   ("Level%d",   m_levelList,     Level::NONE, NUM_POSSIBLE_LEVEL, "Level limit to be used, eg 5.1 (Incomplete)")
    846   ("Tier%d",    m_levelTierList, Level::MAIN, NUM_POSSIBLE_LEVEL, "Tier to use for interpretation of --Level")
    847 
    848   ("ProgressiveSource%d", m_progressiveSourceFlagList, false, MAX_VPS_LAYER_ID_PLUS1, "Indicate that source is progressive")
    849   ("InterlacedSource%d",  m_interlacedSourceFlagList,  false, MAX_VPS_LAYER_ID_PLUS1, "Indicate that source is interlaced")
    850   ("NonPackedSource%d",   m_nonPackedConstraintFlagList, false, MAX_VPS_LAYER_ID_PLUS1, "Indicate that source does not contain frame packing")
    851   ("FrameOnly%d",         m_frameOnlyConstraintFlagList, false, MAX_VPS_LAYER_ID_PLUS1, "Indicate that the bitstream contains only frames")
     850  ("NumProfileTierLevel", m_numPTLInfo, 1, "Number of Profile, Tier and Level information")
     851  ("Profile%d", m_profileList,   Profile::NONE, MAX_NUM_LAYER_IDS + 1, "Profile to be used when encoding (Incomplete)")
     852  ("Level%d",   m_levelList,     Level::NONE, MAX_NUM_LAYER_IDS + 1, "Level limit to be used, eg 5.1 (Incomplete)")
     853  ("Tier%d",    m_levelTierList, Level::MAIN, MAX_NUM_LAYER_IDS + 1, "Tier to use for interpretation of --Level")
     854  ("ProfileCompatibility%d", m_profileCompatibility,   Profile::NONE, MAX_NUM_LAYER_IDS + 1, "Compatible profile to be used when encoding")
     855  ("ProgressiveSource%d", m_progressiveSourceFlagList, false, MAX_NUM_LAYER_IDS + 1, "Indicate that source is progressive")
     856  ("InterlacedSource%d",  m_interlacedSourceFlagList,  false, MAX_NUM_LAYER_IDS + 1, "Indicate that source is interlaced")
     857  ("NonPackedSource%d",   m_nonPackedConstraintFlagList, false, MAX_NUM_LAYER_IDS + 1, "Indicate that source does not contain frame packing")
     858  ("FrameOnly%d",         m_frameOnlyConstraintFlagList, false, MAX_NUM_LAYER_IDS + 1, "Indicate that the bitstream contains only frames")
    852859   
    853860  ("LayerPTLIndex%d", m_layerPTLIdx, 0, MAX_VPS_LAYER_ID_PLUS1, "Index of PTL for each layer")
    854   ("ListOfProfileTierLevelOls%d", cfg_listOfLayerPTLOfOlss, string(""), MAX_VPS_LAYER_ID_PLUS1, "PTL Index for each layer in each OLS except the first OLS. The PTL index for layer in the first OLS is set to 1")
     861  ("ListOfProfileTierLevelOls%d", cfg_listOfLayerPTLOfOlss, string(""), MAX_VPS_OUTPUT_LAYER_SETS_PLUS1, "PTL Index for each layer in each OLS except the first OLS. The PTL index for layer in the first OLS is set to 1")
    855862#else
    856863  ("Profile", m_profile,   Profile::NONE, "Profile to be used when encoding (Incomplete)")
     
    19651972    }
    19661973#if MULTIPLE_PTL_SUPPORT
    1967     if (olsCtr > startOlsCtr) // Non-default OLS
    1968     {
    1969       scanStringToArray( cfg_listOfLayerPTLOfOlss[olsCtr], m_numLayerInIdList[m_outputLayerSetIdx[olsCtr - startOlsCtr - 1]], "List of PTL for each layer in OLS", m_listOfLayerPTLofOlss[olsCtr] );
    1970     }
    1971     else
    1972     {
    1973       scanStringToArray( cfg_listOfLayerPTLOfOlss[olsCtr], m_numLayerInIdList[olsCtr], "List of PTL for each layer in OLS", m_listOfLayerPTLofOlss[olsCtr] );
    1974     }
     1974    Int olsToLsIndex = (olsCtr > startOlsCtr) ? m_outputLayerSetIdx[olsCtr - m_numLayerSets] : olsCtr;
     1975    scanStringToArray( cfg_listOfLayerPTLOfOlss[olsCtr], m_numLayerInIdList[olsToLsIndex], "List of PTL for each layers in OLS", m_listOfLayerPTLofOlss[olsCtr] );
     1976    //For conformance checking
     1977    //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:
     1978    //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
     1979    //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:
     1980    //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
     1981    //The following assert may be updated / upgraded to take care of general_profile_compatibility_flag.
     1982    for ( Int ii = 1; ii < m_numLayerInIdList[olsToLsIndex]; ii++)
     1983    {
     1984      if (m_layerSetLayerIdList[ii - 1] != 0 && m_layerSetLayerIdList[ii] != 0)  //Profile / profile compatibility of enhancement layers must indicate the same profile.
     1985      {
     1986        assert( (m_profileList[m_listOfLayerPTLofOlss[olsCtr][ii]] == m_profileList[m_listOfLayerPTLofOlss[olsCtr][ii - 1]]) ||
     1987                (m_profileList[m_listOfLayerPTLofOlss[olsCtr][ii]] == m_profileCompatibility[m_listOfLayerPTLofOlss[olsCtr][ii - 1]]) ||   
     1988                (m_profileCompatibility[m_listOfLayerPTLofOlss[olsCtr][ii]] == m_profileList[m_listOfLayerPTLofOlss[olsCtr][ii - 1]]) );
     1989      }
     1990    }   
    19751991#endif
    19761992  }
  • branches/SHM-dev/source/App/TAppEncoder/TAppEncCfg.h

    r950 r951  
    123123  Int           m_numPTLInfo;
    124124  Int           m_layerPTLIdx[MAX_VPS_LAYER_ID_PLUS1]; ///< scalability_mask
    125   Profile::Name m_profileList[NUM_POSSIBLE_LEVEL];
    126   Level::Tier   m_levelTierList[NUM_POSSIBLE_LEVEL];
    127   Level::Name   m_levelList[NUM_POSSIBLE_LEVEL];
    128   Bool          m_progressiveSourceFlagList[NUM_POSSIBLE_LEVEL];
    129   Bool          m_interlacedSourceFlagList[NUM_POSSIBLE_LEVEL];
    130   Bool          m_nonPackedConstraintFlagList[NUM_POSSIBLE_LEVEL];
    131   Bool          m_frameOnlyConstraintFlagList[NUM_POSSIBLE_LEVEL];
     125  Profile::Name m_profileList[MAX_NUM_LAYER_IDS + 1];
     126  Level::Tier   m_levelTierList[MAX_NUM_LAYER_IDS + 1];
     127  Level::Name   m_levelList[MAX_NUM_LAYER_IDS + 1];
     128  Profile::Name m_profileCompatibility[MAX_NUM_LAYER_IDS + 1];
     129  Bool          m_progressiveSourceFlagList[MAX_NUM_LAYER_IDS + 1];
     130  Bool          m_interlacedSourceFlagList[MAX_NUM_LAYER_IDS + 1];
     131  Bool          m_nonPackedConstraintFlagList[MAX_NUM_LAYER_IDS + 1];
     132  Bool          m_frameOnlyConstraintFlagList[MAX_NUM_LAYER_IDS + 1];
    132133
    133134  std::vector< std::vector<Int> > m_listOfLayerPTLofOlss;
  • branches/SHM-dev/source/App/TAppEncoder/TAppEncTop.cpp

    r949 r951  
    211211    profileTierLevel.setTierFlag(m_levelTierList[ii]);
    212212    profileTierLevel.setProfileIdc(m_profileList[ii]);
    213     profileTierLevel.setProfileCompatibilityFlag(m_profileList[ii], 1);
     213    profileTierLevel.setProfileCompatibilityFlag(m_profileCompatibility[ii], 1);
    214214    profileTierLevel.setProgressiveSourceFlag(m_progressiveSourceFlagList[ii]);
    215215    profileTierLevel.setInterlacedSourceFlag(m_interlacedSourceFlagList[ii]);
  • branches/SHM-dev/source/Lib/TLibCommon/TComSlice.h

    r942 r951  
    589589#if SVC_EXTENSION
    590590#if MULTIPLE_PTL_SUPPORT
    591   TComPTL     m_pcPTLList[NUM_POSSIBLE_LEVEL];
     591  TComPTL     m_pcPTLList[MAX_NUM_LAYER_IDS + 1];
    592592#endif
    593593#if DERIVE_LAYER_ID_LIST_VARIABLES
  • branches/SHM-dev/source/Lib/TLibCommon/TypeDef.h

    r944 r951  
    7171
    7272#define MULTIPLE_PTL_SUPPORT             1      ///< Fixing profile, tier and level signalling
    73 #define NUM_POSSIBLE_LEVEL               13     ///< Number of possible level as described in R1013
    7473
    7574#define R0226_CONSTRAINT_TMVP_SEI        1      ///< JCTVC-R0226, Modification to semantics in temporal motion vector prediction constraints SEI message
     
    805804    MAIN10 = 2,
    806805    MAINSTILLPICTURE = 3,
     806#if MULTIPLE_PTL_SUPPORT
     807    RANGEEXTENSION = 4,
     808    RANGEEXTENSIONHIGH = 5,
     809    MULTIVIEWMAIN = 6,
     810    SCALABLEMAIN = 7,
     811    SCALABLEMAIN10 = 7,
     812#endif
    807813  };
    808814}
  • branches/SHM-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r943 r951  
    17891789        READ_CODE( numBitsForPtlIdx, uiCode, "profile_level_tier_idx[i]" );
    17901790        vps->setProfileLevelTierIdx(i, j, uiCode );
     1791#if MULTIPLE_PTL_SUPPORT
     1792        //For conformance checking
     1793        //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:
     1794        //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
     1795        //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:
     1796        //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
     1797        //The following assert may be updated / upgraded to take care of general_profile_compatibility_flag.
     1798        if (j > 0 && vps->getLayerSetLayerIdList(layerSetIdxForOutputLayerSet, j) != 0 && vps->getLayerSetLayerIdList(layerSetIdxForOutputLayerSet, j - 1) != 0)
     1799        {
     1800          assert(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc() == vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc() ||
     1801                 vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileIdc()) || 
     1802                 vps->getPTL(vps->getProfileLevelTierIdx(i, j))->getGeneralPTL()->getProfileCompatibilityFlag(vps->getPTL(vps->getProfileLevelTierIdx(i, j - 1))->getGeneralPTL()->getProfileIdc())  );
     1803        }
     1804#endif
    17911805      }
    17921806    }
Note: See TracChangeset for help on using the changeset viewer.