Changeset 951 in SHVCSoftware for branches/SHM-dev/source/App/TAppEncoder


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/source/App/TAppEncoder
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • 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]);
Note: See TracChangeset for help on using the changeset viewer.