Changeset 1066 in 3DVCSoftware for trunk/source


Ignore:
Timestamp:
13 Oct 2014, 12:19:36 (10 years ago)
Author:
tech
Message:

Merged 12.0-dev1@1065.

Location:
trunk/source
Files:
28 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/App/TAppDecoder/TAppDecCfg.cpp

    r872 r1066  
    9494  ("TarDecLayerIdSetFile,l", cfg_TargetDecLayerIdSetFile, string(""), "targetDecLayerIdSet file name. The file should include white space separated LayerId values to be decoded. Omitting the option or a value of -1 in the file decodes all layers.")
    9595  ("RespectDefDispWindow,w", m_respectDefDispWindow, 0, "Only output content inside the default display window\n")
     96#if H_MV
     97#if H_MV_HLS10_GEN_FIX
     98  ("OutputVpsInfo,v", m_outputVpsInfo, false, "Output information about the layer dependencies and layer sets")
     99#endif
     100#endif
    96101  ;
    97102  po::setDefaults(opts);
  • trunk/source/App/TAppDecoder/TAppDecCfg.h

    r964 r1066  
    8080
    8181#if H_MV
     82#if H_MV_HLS10_GEN_FIX
     83  Bool          m_outputVpsInfo;                     ///< Output VPS information
     84#endif
    8285  Void xAppendToFileNameEnd( Char* pchInputFileName, const Char* pchStringToAppend, Char*& rpchOutputFileName); ///< create filenames
    8386#endif
  • trunk/source/App/TAppDecoder/TAppDecTop.cpp

    r976 r1066  
    239239          {
    240240            TComVPS* vps = m_vps;
    241           if ( m_targetOptLayerSetIdx == -1 )
     241            if ( m_targetOptLayerSetIdx == -1 )
     242            {
     243              // Not normative! Corresponds to specification by "External Means". (Should be set equal to 0, when no external means available. )
     244              m_targetOptLayerSetIdx = vps->getVpsNumLayerSetsMinus1();
     245            }
     246
     247            for (Int dI = 0; dI < m_numDecoders; dI++ )
     248            {
     249              m_tDecTop[decIdx]->setTargetOptLayerSetIdx( m_targetOptLayerSetIdx );
     250            }
     251
     252            if ( m_targetOptLayerSetIdx < 0 || m_targetOptLayerSetIdx >= vps->getNumOutputLayerSets() )
     253            {
     254              fprintf(stderr, "\ntarget output layer set index must be in the range of 0 to %d, inclusive \n", vps->getNumOutputLayerSets() - 1 );           
     255              exit(EXIT_FAILURE);
     256            }
     257            m_targetDecLayerIdSet = vps->getTargetDecLayerIdList( m_targetOptLayerSetIdx );
     258          }
     259#if H_MV_HLS10_GEN_FIX
     260          if (m_outputVpsInfo )
    242261          {
    243             // Not normative! Corresponds to specification by "External Means". (Should be set equal to 0, when no external means available. )
    244             m_targetOptLayerSetIdx = vps->getVpsNumLayerSetsMinus1();
     262#if H_MV_HLS10_AUX
     263            m_vps->printScalabilityId();
     264#endif
     265            m_vps->printLayerDependencies();
     266            m_vps->printLayerSets();
     267            m_vps->printPTL();
    245268          }
    246 
    247           for (Int dI = 0; dI < m_numDecoders; dI++ )
    248           {
    249             m_tDecTop[decIdx]->setTargetOptLayerSetIdx( m_targetOptLayerSetIdx );
    250           }
    251 
    252           if ( m_targetOptLayerSetIdx < 0 || m_targetOptLayerSetIdx >= vps->getNumOutputLayerSets() )
    253           {
    254             fprintf(stderr, "\ntarget output layer set index must be in the range of 0 to %d, inclusive \n", vps->getNumOutputLayerSets() - 1 );           
    255             exit(EXIT_FAILURE);
    256           }
    257           m_targetDecLayerIdSet = vps->getTargetDecLayerIdList( m_targetOptLayerSetIdx );
    258         }
    259       }
     269#endif
     270        }
    260271#if H_3D
    261272        if (nalu.m_nalUnitType == NAL_UNIT_VPS )
     
    569580  Int dpbFullness = 0;
    570581#if H_MV
     582#if H_MV_HLS10_ADD_LAYERSETS
     583  TComSPS* activeSPS = m_tDecTop[ decIdx ]->getActiveSPS();
     584#else
    571585  // preliminary fix
    572586  TComSPS* activeSPS = m_tDecTop[0]->getActiveSPS();
     587#endif
    573588#else
    574589  TComSPS* activeSPS = m_cTDecTop.getActiveSPS();
     
    11401155    Int curLayerId = m_tDecTop[dIdx]->getLayerId();
    11411156    Int curLayerIdxInVps = m_vps->getLayerIdInNuh( curLayerId  );
     1157#if H_MV_HLS10_REF_PRED_LAYERS
     1158    if ( m_vps->getDependencyFlag(optLayerIdxInVps, curLayerIdxInVps ) )
     1159#else
    11421160    if ( m_vps->getInDirectDependencyFlag(optLayerIdxInVps, curLayerIdxInVps ) )
     1161#endif
    11431162    {
    11441163      TComPic* curPic = m_ivPicLists.getPic( curLayerId, pocLastPic );
  • trunk/source/App/TAppEncoder/TAppEncCfg.cpp

    r1039 r1066  
    241241  {"main-still-picture", Profile::MAINSTILLPICTURE},
    242242#if H_MV
     243#if H_MV_HLS10_PTL
     244  {"multiview-main", Profile::MULTIVIEWMAIN},
     245#if H_3D
     246  {"3d-main"       , Profile::MAIN3D},
     247#endif
     248
     249#else
    243250  {"main-stereo",    Profile::MAINSTEREO},
    244251  {"main-multiview", Profile::MAINMULTIVIEW},
    245252#if H_3D
    246253  {"main-3d"    , Profile::MAIN3D},
     254#endif
    247255#endif
    248256#endif
     
    333341#if H_MV
    334342  vector<Int>   cfg_dimensionLength;
     343#if H_MV_HLS10_PTL
     344  string        cfg_profiles;
     345  string        cfg_levels;
     346  string        cfg_tiers;
     347#endif
    335348#if H_3D
    336349  cfg_dimensionLength.push_back( 2  );  // depth
     
    367380  ("NumberOfLayers",        m_numberOfLayers     , 1,                     "Number of layers")
    368381#if !H_3D
     382#if H_MV_HLS10_AUX
     383  ("ScalabilityMask",       m_scalabilityMask    , 2                    , "Scalability Mask: 2: Multiview, 8: Auxiliary, 10: Multiview + Auxiliary")   
     384#else
    369385  ("ScalabilityMask",       m_scalabilityMask    , 2                    , "Scalability Mask")   
     386#endif
    370387#else
    371388  ("ScalabilityMask",       m_scalabilityMask    , 3                    , "Scalability Mask, 1: Texture 3: Texture + Depth ")   
     
    374391  ("ViewOrderIndex",        m_viewOrderIndex     , std::vector<Int>(1,0), "View Order Index per layer")
    375392  ("ViewId",                m_viewId             , std::vector<Int>(1,0), "View Id per View Order Index")
     393#if H_MV_HLS10_AUX
     394  ("AuxId",                 m_auxId              , std::vector<Int>(1,0), "AuxId per layer")
     395#endif
    376396#if H_3D
    377397  ("DepthFlag",             m_depthFlag          , std::vector<Int>(1,0), "Depth Flag")
     
    388408#endif
    389409#endif
    390   ("LayerIdInNuh",          m_layerIdInNuh       , std::vector<Int>(1,0), "LayerId in Nuh")
     410#if H_MV_HLS10_GEN_FIX
     411  ("TargetEncLayerIdList",  m_targetEncLayerIdList, std::vector<Int>(0,0), "LayerIds in Nuh to be encoded") 
     412#endif
     413  ("LayerIdInNuh",          m_layerIdInNuh       , std::vector<Int>(1,0), "LayerId in Nuh") 
    391414  ("SplittingFlag",         m_splittingFlag      , false                , "Splitting Flag")   
    392415
     
    394417  ("VpsNumLayerSets",       m_vpsNumLayerSets    , 1                    , "Number of layer sets")   
    395418  ("LayerIdsInSet_%d",      m_layerIdsInSets     , std::vector<Int>(1,0), MAX_VPS_OP_SETS_PLUS1 ,"LayerIds of Layer set") 
     419#if H_MV_HLS10_ADD_LAYERSETS
     420  ("NumAddLayerSets"     , m_numAddLayerSets     , 0                                              , "NumAddLayerSets     ")
     421  ("HighestLayerIdxPlus1_%d", m_highestLayerIdxPlus1, std::vector< Int  >(0,0)  ,MAX_VPS_NUM_ADD_LAYER_SETS, "HighestLayerIdxPlus1")
     422#endif
    396423  ("DefaultTargetOutputLayerIdc"     , m_defaultOutputLayerIdc     , 0, "Specifies output layers of layer sets, 0: output all layers, 1: output highest layer, 2: specified by LayerIdsInDefOutputLayerSet")
    397424  ("OutputLayerSetIdx",     m_outputLayerSetIdx  , std::vector<Int>(0,0), "Indices of layer sets used as additional output layer sets") 
     
    400427  ("LayerIdsInDefOutputLayerSet_%d", m_layerIdsInDefOutputLayerSet      , std::vector<Int>(0,0), MAX_VPS_OP_SETS_PLUS1, "Indices in VPS of output layers in layer set") 
    401428  ("AltOutputLayerFlag",    m_altOutputLayerFlag , std::vector<Bool>(1,0), "Alt output layer flag")
     429 
     430#if H_MV_HLS10_PTL
     431  ("ProfileTierLevelIdx_%d",  m_profileTierLevelIdx, std::vector<Int>(0), MAX_NUM_LAYERS, "Indices to profile level tier for ols")
     432#else
    402433  ("ProfileLevelTierIdx",   m_profileLevelTierIdx, std::vector<Int>(1,0), "Indices to profile level tier")
    403  
     434#endif
    404435  // Layer dependencies
    405436  ("DirectRefLayers_%d",    m_directRefLayers    , std::vector<Int>(0,0), MAX_NUM_LAYERS, "LayerIds of direct reference layers")
     
    431462 
    432463  // Profile and level
     464#if H_MV_HLS10_PTL
     465  ("Profile", cfg_profiles,   string(""),           "Profile in VpsProfileTierLevel (Indication only)")
     466  ("Level",   cfg_levels ,    string(""),           "Level indication in VpsProfileTierLevel (Indication only)")
     467  ("Tier",    cfg_tiers  ,    string(""),           "Tier indication in VpsProfileTierLevel (Indication only)")
     468  ("InblFlag",m_inblFlag ,    std::vector<Bool>(0), "InblFlags in VpsProfileTierLevel (Indication only)" )
     469#else
    433470  ("Profile", m_profile,   Profile::NONE, "Profile to be used when encoding (Incomplete)")
    434471  ("Level",   m_level,     Level::NONE,   "Level limit to be used, eg 5.1 (Incomplete)")
    435472  ("Tier",    m_levelTier, Level::MAIN,   "Tier to use for interpretation of --Level")
    436 
     473#endif
    437474  ("ProgressiveSource", m_progressiveSourceFlag, false, "Indicate that source is progressive")
    438475  ("InterlacedSource",  m_interlacedSourceFlag,  false, "Indicate that source is interlaced")
     
    613650#endif
    614651#if H_MV
    615 
     652#if H_MV_HLS10_GEN_FIX
     653// A lot of this stuff could should actually be derived by the encoder.
     654#endif // H_MV_HLS10_GEN
    616655  // VPS VUI
    617656  ("VpsVuiPresentFlag"           , m_vpsVuiPresentFlag           , false                                           , "VpsVuiPresentFlag           ")
     
    637676  ("CtuBasedOffsetEnabledFlag"   , m_ctuBasedOffsetEnabledFlag   , std::vector< Bool >(1,0)  ,MAX_NUM_LAYERS       , "CtuBasedOffsetEnabledFlag    per direct reference for the N-th layer")
    638677  ("MinHorizontalCtuOffsetPlus1" , m_minHorizontalCtuOffsetPlus1 , std::vector< Int  >(1,0)  ,MAX_NUM_LAYERS       , "MinHorizontalCtuOffsetPlus1  per direct reference for the N-th layer")
     678#if H_MV_HLS10_VPS_VUI
     679  ("SingleLayerForNonIrapFlag", m_singleLayerForNonIrapFlag, false                                          , "SingleLayerForNonIrapFlag")
     680  ("HigherLayerIrapSkipFlag"  , m_higherLayerIrapSkipFlag  , false                                          , "HigherLayerIrapSkipFlag  ")
     681#endif
    639682#endif
    640683
     
    742785  ("SEISubBitstreamAvgBitRate",               m_sbPropAvgBitRate,             std::vector< Int  >(1,0)  ,"Specifies average bit rate of the i-th sub-bitstream")
    743786  ("SEISubBitstreamMaxBitRate",               m_sbPropMaxBitRate,             std::vector< Int  >(1,0)  ,"Specifies maximum bit rate of the i-th sub-bitstream")
     787
     788#if H_MV_HLS10_GEN_FIX
     789  ("OutputVpsInfo",                           m_outputVpsInfo,                false                     ,"Output information about the layer dependencies and layer sets")
     790#endif
    744791#endif
    745792#if H_3D
     
    792839#endif //H_3D
    793840  ;
    794   #if H_MV
     841
     842#if H_MV
    795843  // parse coding structure
    796844  for( Int k = 0; k < MAX_NUM_LAYERS; k++ )
     
    10341082  }
    10351083  m_iNumberOfViews = (Int) uniqueViewOrderIndices.size();
     1084#if H_MV_HLS10_AUX
     1085  xResizeVector( m_auxId );
     1086#endif
    10361087
    10371088#if H_3D
     
    10671118  xResizeVector( m_wppInUseFlag );
    10681119
     1120#if H_MV_HLS10_ADD_LAYERSETS
     1121  for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + m_numAddLayerSets + (Int) m_outputLayerSetIdx.size(); olsIdx++)
     1122#else
    10691123  for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + (Int) m_outputLayerSetIdx.size(); olsIdx++)
     1124#endif
    10701125  {   
    10711126    m_altOutputLayerFlag.push_back( false );     
     
    11771232    }
    11781233  }
     1234
     1235#if H_MV
     1236#if H_MV_HLS10_PTL
     1237  // parse PTL
     1238  Bool anyEmpty = false;
     1239  if( cfg_profiles.empty() )
     1240  {
     1241#if H_3D
     1242    cfg_profiles = string("main main 3d-main");
     1243#else
     1244    cfg_profiles = string("main main multiview-main");   
     1245#endif
     1246    fprintf(stderr, "\nWarning: No profiles given, using defaults: %s", cfg_profiles.c_str() );
     1247    anyEmpty = true;
     1248  }
     1249
     1250  if( cfg_levels.empty() )
     1251  {
     1252    cfg_levels = string("none none none");
     1253    fprintf(stderr, "\nWarning: No levels given, using defaults: %s", cfg_levels.c_str() );
     1254    anyEmpty = true;
     1255  }
     1256
     1257  if( cfg_tiers.empty() )
     1258  {
     1259    cfg_tiers = string("main main main");
     1260    fprintf(stderr, "\nWarning: No tiers given, using defaults: %s", cfg_tiers.c_str());
     1261    anyEmpty = true;
     1262  }
     1263
     1264  if( m_inblFlag.empty() )
     1265  {
     1266    fprintf(stderr, "\nWarning: No inblFlags given, using defaults:");
     1267    for( Int i = 0; i < 3; i++)
     1268    {
     1269      m_inblFlag.push_back( false );
     1270      fprintf(stderr," %d", (Int) m_inblFlag[i]);
     1271    }
     1272    anyEmpty = true;
     1273  }   
     1274
     1275  if ( anyEmpty )
     1276  {
     1277    fprintf( stderr, "\n" );
     1278  }
     1279
     1280  xReadStrToEnum( cfg_profiles, m_profile   );
     1281  xReadStrToEnum( cfg_levels,   m_level     );
     1282  xReadStrToEnum( cfg_tiers ,   m_levelTier );
     1283#endif
     1284#endif
    11791285#if H_3D
    11801286  // set global varibles
     
    12911397    fprintf(stderr, "******************************************************************\n");
    12921398  }
     1399
     1400
     1401#if !H_MV_HLS10_PTL
    12931402  if( m_profile==Profile::NONE )
    12941403  {
     
    13031412    fprintf(stderr, "***************************************************************************\n");
    13041413  }
     1414#endif
    13051415
    13061416  Bool check_failed = false; /* abort if there is a fatal configuration problem */
     
    13211431  xConfirmPara( m_scalabilityMask != 2 && m_scalabilityMask != 3, "Scalability Mask must be equal to 2 or 3. ");
    13221432#else
     1433#if H_MV_HLS10_AUX
     1434  xConfirmPara( m_scalabilityMask != 2 && m_scalabilityMask != 8 && m_scalabilityMask != 10, "Scalability Mask must be equal to 2, 8 or 10");
     1435#else
    13231436  xConfirmPara( m_scalabilityMask != 2 , "Scalability Mask must be equal to 2. ");
     1437#endif
    13241438#endif
    13251439
     
    13321446
    13331447  m_dimIds.push_back( m_viewOrderIndex );   
    1334   xConfirmPara(  m_dimensionIdLen.size() < m_dimIds.size(), "DimensionIdLen must be given for all dimensions. "   );   Int dimBitOffset[MAX_NUM_SCALABILITY_TYPES+1];
     1448#if H_MV_HLS10_AUX
     1449  for (Int i = 0; i < m_auxId.size(); i++)
     1450  {
     1451    xConfirmPara( !( ( m_auxId[i] >= 0 && m_auxId[i] <= 2 ) || ( m_auxId[i] >= 128 && m_auxId[i] <= 159 ) ) , "AuxId shall be in the range of 0 to 2, inclusive, or 128 to 159, inclusive");
     1452  }
     1453  if ( m_scalabilityMask & ( 1 << AUX_ID ) )
     1454  {
     1455    m_dimIds.push_back ( m_auxId );
     1456  }
     1457#endif 
     1458  xConfirmPara(  m_dimensionIdLen.size() < m_dimIds.size(), "DimensionIdLen must be given for all dimensions. "   );
     1459  Int dimBitOffset[MAX_NUM_SCALABILITY_TYPES+1];
    13351460
    13361461  dimBitOffset[ 0 ] = 0;
     
    14281553  {   
    14291554    Int refLayerSetIdx = m_outputLayerSetIdx[ lsIdx ];
     1555#if H_MV_HLS10_ADD_LAYERSETS
     1556    xConfirmPara(  refLayerSetIdx < 0 || refLayerSetIdx >= m_vpsNumLayerSets + m_numAddLayerSets, "Output layer set idx must be greater or equal to 0 and less than the VpsNumLayerSets plus NumAddLayerSets." );
     1557#else
    14301558    xConfirmPara(  refLayerSetIdx < 0 || refLayerSetIdx >= m_vpsNumLayerSets, "Output layer set idx must be greater or equal to 0 and less than the VpsNumLayerSets." );
    1431 
     1559#endif
     1560#if !H_MV_HLS10_ADD_LAYERSETS
    14321561    for (Int i = 0; i < m_layerIdsInAddOutputLayerSet[ lsIdx ].size(); i++)
    14331562    {
     
    14431572      xConfirmPara( !isAlsoInLayerSet, "All output layers of a output layer set be included in corresponding layer set.");
    14441573    }
     1574#endif
    14451575  }
    14461576
     
    14541584      anyDefaultOutputFlag = anyDefaultOutputFlag || ( m_layerIdsInDefOutputLayerSet[lsIdx].size() != 0 );
    14551585    }   
     1586#if H_MV_HLS10_ADD_LAYERSETS
     1587    if ( anyDefaultOutputFlag )
     1588    {   
     1589      printf( "\nWarning: Ignoring LayerIdsInDefOutputLayerSet parameters, since defaultTargetOuputLayerIdc is not equal 2.\n" );   
     1590    }
     1591#else
    14561592    printf( "\nWarning: Ignoring LayerIdsInDefOutputLayerSet parameters, since defaultTargetOuputLayerIdc is not equal 2.\n" );   
     1593#endif
    14571594  }
    14581595  else 
     
    14761613  }
    14771614
     1615#if H_MV_HLS10_ADD_LAYERSETS
     1616  xConfirmPara( m_altOutputLayerFlag.size() < m_vpsNumLayerSets + m_numAddLayerSets + m_outputLayerSetIdx.size(), "The number of alt output layer flags must be equal to the number of layer set additional output layer sets plus the number of output layer set indices" );
     1617#else
    14781618  xConfirmPara( m_altOutputLayerFlag.size() < m_vpsNumLayerSets + m_outputLayerSetIdx.size(), "The number of Profile Level Tier indices must be equal to the number of layer set plus the number of output layer set indices" );
    1479   xConfirmPara( m_profileLevelTierIdx.size() < m_vpsNumLayerSets + m_outputLayerSetIdx.size(), "The number of Profile Level Tier indices must be equal to the number of layer set plus the number of output layer set indices" );
    1480 
    1481   // Layer Dependencies 
     1619#endif
     1620
     1621  // PTL
     1622#if H_MV_HLS10_PTL
     1623    xConfirmPara( ( m_profile.size() != m_inblFlag.size() || m_profile.size() != m_level.size()  ||  m_profile.size() != m_levelTier.size() ), "The number of Profiles, Levels, Tiers and InblFlags must be equal." );
     1624
     1625    if ( m_numberOfLayers > 1)
     1626    {
     1627      xConfirmPara( m_profile.size() <= 1, "The number of profiles, tiers, levels, and inblFlags must be greater than 1.");
     1628      xConfirmPara( m_inblFlag[0], "VpsProfileTierLevel[0] must have inblFlag equal to 0");
     1629      if (m_profile.size() > 1 )
     1630      {
     1631        xConfirmPara( m_profile[0]  != m_profile[1], "The profile in VpsProfileTierLevel[1] must be equal to the profile in VpsProfileTierLevel[0].");
     1632        xConfirmPara( m_inblFlag[0] != m_inblFlag[1], "inblFlag in VpsProfileTierLevel[1] must be equal to the inblFlag in VpsProfileTierLevel[0].");
     1633      }
     1634    }
     1635#else
     1636    xConfirmPara( m_profileLevelTierIdx.size() < m_vpsNumLayerSets + m_outputLayerSetIdx.size(), "The number of Profile Level Tier indices must be equal to the number of layer set plus the number of output layer set indices" );
     1637#endif
     1638
     1639    // Layer Dependencies 
    14821640  for (Int i = 0; i < m_numberOfLayers; i++ )
    14831641  {
     
    23412499#endif
    23422500#if H_MV
     2501#if H_MV_HLS10_GEN_FIX
     2502  xPrintParaVector( "NuhLayerId"     , m_layerIdInNuh );
     2503  if ( m_targetEncLayerIdList.size() > 0)
     2504  {
     2505    xPrintParaVector( "TargetEncLayerIdList"     , m_targetEncLayerIdList );
     2506  }
     2507#endif
    23432508  xPrintParaVector( "ViewIdVal"     , m_viewId );
    23442509  xPrintParaVector( "ViewOrderIndex", m_viewOrderIndex );
     2510#if H_MV_HLS10_AUX
     2511  xPrintParaVector( "AuxId", m_auxId );
     2512#endif
    23452513#endif
    23462514#if H_3D
  • trunk/source/App/TAppEncoder/TAppEncCfg.h

    r1039 r1066  
    7878  std::vector<Int>       m_viewId;                            ///< view id
    7979  std::vector<Int>       m_viewOrderIndex;                    ///< view order index 
     80#if H_MV_HLS10_AUX
     81  std::vector<Int>       m_auxId;                             ///< auxiliary id
     82#endif
    8083#if H_3D
    8184  std::vector<Int>       m_depthFlag;                         ///< depth flag
     85#endif
     86#if H_MV_HLS10_GEN_FIX
     87  std::vector<Int>       m_targetEncLayerIdList;              ///< layer Ids in Nuh to be encoded
    8288#endif
    8389  std::vector<Int>       m_layerIdInNuh;                      ///< layer Id in Nuh for each layer
     
    8995  Int                    m_vpsNumLayerSets;                   ///< Number of layer sets
    9096  std::vector< std::vector<Int> > m_layerIdsInSets;           ///< LayerIds in vps of layer set
    91   Int                    m_defaultOutputLayerIdc;       ///< Specifies output layers of layer sets, 0: output all layers, 1: output highest layers, 2: specified by LayerIdsInDefOuputLayerSet
     97#if H_MV_HLS10_ADD_LAYERSETS
     98  Int                    m_numAddLayerSets;                    ///< Number of additional layer sets
     99  std::vector< std::vector<Int> > m_highestLayerIdxPlus1;      ///< HighestLayerIdxPlus1 for each additional layer set and each independent layer (value with index 0 will be ignored)
     100#endif
     101  Int                    m_defaultOutputLayerIdc;             ///< Specifies output layers of layer sets, 0: output all layers, 1: output highest layers, 2: specified by LayerIdsInDefOuputLayerSet
    92102  std::vector<Int>       m_outputLayerSetIdx;                 ///< Indices of layer sets used as additional output layer sets 
    93103  std::vector< std::vector<Int> > m_layerIdsInAddOutputLayerSet; ///< LayerIds in vps of additional output layers
    94104  std::vector< std::vector<Int> > m_layerIdsInDefOutputLayerSet; ///< Indices in vps of output layers in layer sets
     105#if H_MV_HLS10_ADD_LAYERSETS
     106  std::vector< std::vector< Int > > m_profileTierLevelIdx;      ///< Indices of of profile, per layer in layer set
     107#else
    95108  std::vector<Int>       m_profileLevelTierIdx;               ///< Indices of of profile level tier
     109#endif
    96110  std::vector<Bool>      m_altOutputLayerFlag;                ///< Alt output layer flag
    97111
     
    124138  std::vector< std::vector<Bool > > m_ctuBasedOffsetEnabledFlag;
    125139  std::vector< std::vector<Int  > > m_minHorizontalCtuOffsetPlus1;
     140#if H_MV_HLS10_VPS_VUI
     141  Bool m_singleLayerForNonIrapFlag;
     142  Bool m_higherLayerIrapSkipFlag;
     143#endif // H_MV_HLS10_VPS_VUI
     144
    126145
    127146#if H_3D_IV_MERGE
     
    174193 
    175194  // profile/level
     195#if H_MV_HLS10_PTL
     196#if H_MV
     197  std::vector< Profile::Name > m_profile;
     198  std::vector< Level::Tier   > m_levelTier;
     199  std::vector< Level::Name   > m_level;
     200  std::vector< Bool          > m_inblFlag;
     201#else
    176202  Profile::Name m_profile;
    177203  Level::Tier   m_levelTier;
    178204  Level::Name   m_level;
     205#endif
     206#endif
     207
    179208  Bool m_progressiveSourceFlag;
    180209  Bool m_interlacedSourceFlag;
    181210  Bool m_nonPackedConstraintFlag;
    182211  Bool m_frameOnlyConstraintFlag;
    183  
    184212  // coding structure
    185213#if H_MV
     
    440468  std::vector<Int>  m_sbPropAvgBitRate;
    441469  std::vector<Int>  m_sbPropMaxBitRate;
     470#if H_MV_HLS10_GEN_FIX
     471  Bool              m_outputVpsInfo;
     472#endif
    442473#endif
    443474#if H_3D
     
    506537  Void  xPrintUsage     ();                                   ///< print usage
    507538#if H_MV
     539
     540#if H_MV_HLS10_PTL
     541  template<typename T>
     542  Void xReadStrToEnum(string in, std::vector<T> &val)
     543  {
     544    val.clear();
     545
     546    char* cElement = NULL;
     547    char* cString = new char[in.size()+1];
     548    strcpy(cString, in.c_str());
     549
     550    cElement = strtok( cString, " " );
     551    while ( cElement != NULL )
     552    {
     553      T profile;       
     554      std::istringstream ss( cElement );
     555      ss >> profile;
     556      val.push_back( profile );
     557      cElement = strtok( NULL, " " );
     558    }
     559    delete[] cString;
     560  }
     561#endif
     562
     563
    508564  template <typename T>
    509565  Void xResizeVector(  std::vector<T> & rpcVector )
  • trunk/source/App/TAppEncoder/TAppEncTop.cpp

    r1039 r1066  
    133133  xSetLayerIds             ( vps );   
    134134  xSetDimensionIdAndLength ( vps );
    135   xSetDependencies( vps );
     135  xSetDependencies         ( vps );
     136  xSetRepFormat            ( vps );
    136137  xSetProfileTierLevel     ( vps );
    137   xSetRepFormat            ( vps );
    138138  xSetLayerSets            ( vps );
    139139  xSetDpbSize              ( vps );
     
    144144  xDeriveDltArray          ( vps, dlt );
    145145#endif
    146 
     146#if H_MV_HLS10_GEN_FIX
     147  if ( m_targetEncLayerIdList.size() == 0 )
     148  {
     149    for (Int i = 0; i < m_numberOfLayers; i++ )
     150    {
     151      m_targetEncLayerIdList.push_back( vps.getLayerIdInNuh( i ) );
     152    }
     153  }
     154  for( Int i = (Int) m_targetEncLayerIdList.size()-1 ; i >= 0 ; i--)
     155  {
     156    Int iNuhLayerId = m_targetEncLayerIdList[i];
     157    Bool allRefLayersPresent = true;
     158    for( Int j = 0; j < vps.getNumRefLayers( iNuhLayerId ); j++)
     159    {
     160      allRefLayersPresent = allRefLayersPresent && xLayerIdInTargetEncLayerIdList( vps.getIdRefLayer( iNuhLayerId, j) );
     161    }
     162    if ( !allRefLayersPresent )
     163    {
     164      printf("\nCannot encode layer with nuh_layer_id equal to %d since not all reference layers are in TargetEncLayerIdList\n", iNuhLayerId);
     165      m_targetEncLayerIdList.erase( m_targetEncLayerIdList.begin() + i  );
     166    }
     167  }
     168#endif
     169
     170#if H_MV_HLS10_ADD_LAYERSETS
     171  if ( m_outputVpsInfo )
     172  { 
     173#if H_MV_HLS10_AUX
     174    vps.printScalabilityId();
     175#endif
     176    vps.printLayerDependencies();
     177    vps.printLayerSets();
     178    vps.printPTL();
     179  }
     180#endif
    147181
    148182  for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++)
     
    200234    m_cTEncTop.setUseDMM                       ( isDepth ? m_useDMM               : false );
    201235#if SEPARATE_FLAG_I0085
     236#if LGE_FCO_I0116
     237    m_cTEncTop.setUseIVP                       ( vps.getViewIndex( layerId ) == 0 && isDepth ? m_useIVP               : false );
     238#else
    202239    m_cTEncTop.setUseIVP                       ( isDepth ? m_useIVP               : false );
     240#endif
    203241#endif
    204242    m_cTEncTop.setUseSDC                       ( isDepth ? m_useSDC               : false );
     
    210248#if !MTK_I0099_VPS_EX2 || MTK_I0099_FIX
    211249#if H_3D_QTLPC
     250#if LGE_FCO_I0116
     251    m_cTEncTop.setUseQTL                       ( vps.getViewIndex( layerId ) == 0 && isDepth ? m_bUseQTL               : false );
     252#else
    212253    m_cTEncTop.setUseQTL                       ( isDepth ? m_bUseQTL               : false );
     254#endif
    213255#if !MTK_I0099_VPS_EX2   
    214256    m_cTEncTop.setUsePC                        ( isDepth ? m_bUsePC                : false );
     
    224266#endif
    225267#if H_3D_IV_MERGE
    226     m_cTEncTop.setUseMPI               ( isDepth ? m_bMPIFlag    : false );
     268#if LGE_FCO_I0116
     269    m_cTEncTop.setUseMPI                       ( vps.getViewIndex( layerId ) == 0 && isDepth ? m_bMPIFlag    : false );
     270#else
     271    m_cTEncTop.setUseMPI                       ( isDepth ? m_bMPIFlag    : false );
     272#endif
    227273#endif
    228274#endif // H_3D
     
    236282#endif
    237283
     284#if H_MV
     285  m_cTEncTop.setProfile(m_profile[0]);
     286  m_cTEncTop.setLevel  (m_levelTier[0], m_level[0]);
     287#else
    238288  m_cTEncTop.setProfile(m_profile);
    239289  m_cTEncTop.setLevel(m_levelTier, m_level);
     290#endif
    240291  m_cTEncTop.setProgressiveSourceFlag(m_progressiveSourceFlag);
    241292  m_cTEncTop.setInterlacedSourceFlag(m_interlacedSourceFlag);
     
    789840 
    790841#if H_MV
     842#if H_MV_HLS10_GEN_FIX
     843  while ( (m_targetEncLayerIdList.size() != 0 ) && !allEos )
     844#else
    791845  while ( !allEos )
     846#endif
    792847  {
    793848    for(Int layer=0; layer < m_numberOfLayers; layer++ )
    794849    {
     850#if H_MV_HLS10_GEN_FIX
     851      if (!xLayerIdInTargetEncLayerIdList( m_vps->getLayerIdInNuh( layer ) ))
     852      {
     853        continue;
     854      }
     855#endif
     856
    795857      Int frmCnt = 0;
    796858      while ( !eos[layer] && !(frmCnt == gopSize))
     
    832894      for(Int layer=0; layer < m_numberOfLayers; layer++ )
    833895      {
     896#if H_MV_HLS10_GEN_FIX
     897        if (!xLayerIdInTargetEncLayerIdList( m_vps->getLayerIdInNuh( layer ) ))
     898        {
     899          continue;
     900        }
     901#endif
     902
    834903#if H_3D_VSO       
    835904          if( m_bUseVSO && m_bUseEstimatedVSD && iNextPoc < m_framesToBeEncoded )
     
    858927  for(Int layer=0; layer < m_numberOfLayers; layer++ )
    859928  {
     929#if H_MV_HLS10_GEN_FIX
     930    if (!xLayerIdInTargetEncLayerIdList( m_vps->getLayerIdInNuh( layer ) ))
     931    {
     932      continue;
     933    }
     934#endif
    860935    m_acTEncTopList[layer]->printSummary( m_acTEncTopList[layer]->getNumAllPicCoded(), m_isField );
    861936  }
     
    13211396  // Max sub layers, + presence flag
    13221397  Bool subLayersMaxMinus1PresentFlag = false;
     1398#if !H_MV_FIX_SUB_LAYERS_MAX_MINUS1
    13231399  Int  subLayersMaxMinus1 = -1;
     1400#endif
    13241401  for (Int curLayerIdInVps = 0; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++ )
    1325   {
    1326     Int curSubLayersMaxMinus1 = -1;
     1402  {   
     1403    Int curSubLayersMaxMinus1 = 0;
    13271404    for( Int i = 0; i < getGOPSize(); i++ )
    13281405    {
     
    13321409
    13331410    vps.setSubLayersVpsMaxMinus1( curLayerIdInVps, curSubLayersMaxMinus1 );
     1411#if !H_MV_FIX_SUB_LAYERS_MAX_MINUS1
    13341412    if ( subLayersMaxMinus1 == -1 )
    13351413    {
     
    13401418      subLayersMaxMinus1PresentFlag = subLayersMaxMinus1PresentFlag || ( curSubLayersMaxMinus1 != subLayersMaxMinus1 );
    13411419    }
     1420#else
     1421    subLayersMaxMinus1PresentFlag = subLayersMaxMinus1PresentFlag || ( curSubLayersMaxMinus1 != vps.getMaxSubLayersMinus1() );
     1422#endif
    13421423  }
    13431424
     
    13481429  Bool maxTidRefPresentFlag = false;
    13491430  for ( Int refLayerIdInVps = 0; refLayerIdInVps < m_numberOfLayers; refLayerIdInVps++)
    1350     {
     1431  {
    13511432    for ( Int curLayerIdInVps = 1; curLayerIdInVps < m_numberOfLayers; curLayerIdInVps++)
    1352       {
     1433    {
    13531434      Int maxTid = -1;
     1435#if H_MV_FIX_LOOP_GOPSIZE
     1436      for( Int i = 0; i < ( getGOPSize() + 1); i++ )
     1437      {       
     1438        GOPEntry geCur =  m_GOPListMvc[curLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1439        GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1440#else
    13541441      for( Int i = 0; i < getGOPSize(); i++ )
    13551442      {       
    13561443        GOPEntry geCur =  m_GOPListMvc[curLayerIdInVps][i];
    1357         GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][i];
    1358        
     1444        GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][i];     
     1445#endif
    13591446        for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++)
    13601447        {       
    13611448          if ( m_directRefLayers[ curLayerIdInVps ][ geCur.m_interLayerPredLayerIdc[ j ]] == refLayerIdInVps )
    13621449          {
     1450#if H_MV_FIX_LOOP_GOPSIZE
     1451            Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 );
     1452            Bool refLayerZero   = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );
     1453            maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId );
     1454#else
    13631455            maxTid = std::max( maxTid, geRef.m_temporalId );
     1456#endif
    13641457          }
    13651458        }
     
    14871580Void TAppEncTop::xSetProfileTierLevel( TComVPS& vps )
    14881581{
     1582#if H_MV_HLS10_PTL
     1583
     1584  // SET PTL
     1585  assert( m_profile.size() == m_level.size() && m_profile.size() == m_levelTier.size() );
     1586  vps.setVpsNumProfileTierLevelMinus1( (Int) m_profile.size() - 1 );
     1587  for ( Int ptlIdx = 0; ptlIdx <= vps.getVpsNumProfileTierLevelMinus1(); ptlIdx++ )
     1588  {
     1589    if ( ptlIdx > 1 )
     1590    {
     1591      Bool vpsProfilePresentFlag = ( m_profile[ptlIdx] != m_profile[ptlIdx - 1] )
     1592        || ( m_inblFlag[ptlIdx ] != m_inblFlag[ptlIdx - 1] );
     1593      vps.setVpsProfilePresentFlag( ptlIdx, vpsProfilePresentFlag );
     1594    }
     1595
     1596    xSetProfileTierLevel( vps, ptlIdx, -1, m_profile[ptlIdx], m_level[ptlIdx],
     1597      m_levelTier[ ptlIdx ], m_progressiveSourceFlag, m_interlacedSourceFlag,
     1598      m_nonPackedConstraintFlag, m_frameOnlyConstraintFlag,  m_inblFlag[ptlIdx] );     
     1599  } 
     1600#else
    14891601  const Int vpsNumProfileTierLevelMinus1 = 0; //TBD
    14901602  vps.setVpsNumProfileTierLevelMinus1( vpsNumProfileTierLevelMinus1 );
     
    14941606    vps.setVpsProfilePresentFlag( i, true );
    14951607  }
    1496 }
    1497 
     1608#endif
     1609}
     1610
     1611#if H_MV_HLS10_PTL
     1612Void TAppEncTop::xSetProfileTierLevel(TComVPS& vps, Int profileTierLevelIdx, Int subLayer, Profile::Name profile, Level::Name level, Level::Tier tier, Bool progressiveSourceFlag, Bool interlacedSourceFlag, Bool nonPackedConstraintFlag, Bool frameOnlyConstraintFlag, Bool inbldFlag)
     1613{
     1614  TComPTL* ptlStruct = vps.getPTL( profileTierLevelIdx );   
     1615  assert( ptlStruct != NULL );
     1616
     1617  ProfileTierLevel* ptl;
     1618  if ( subLayer == -1 )
     1619  {
     1620    ptl = ptlStruct->getGeneralPTL();
     1621  }
     1622  else
     1623  {
     1624    ptl = ptlStruct->getSubLayerPTL(  subLayer );
     1625  }
     1626
     1627  assert( ptl != NULL );
     1628
     1629  ptl->setProfileIdc( profile );
     1630  ptl->setTierFlag  ( tier    );
     1631  ptl->setLevelIdc  ( level   );
     1632  ptl->setProfileCompatibilityFlag( profile, true );
     1633#if H_MV_HLS10_PTL_INBL_FIX
     1634  ptl->setInbldFlag( inbldFlag );
     1635#endif
     1636
     1637  switch ( profile )
     1638  {
     1639  case Profile::MAIN:
     1640    break;
     1641  case Profile::MULTIVIEWMAIN:
     1642#if H_3D
     1643  case Profile::MAIN3D:
     1644#endif
     1645    ptl->setMax12bitConstraintFlag      ( true  );
     1646    ptl->setMax12bitConstraintFlag      ( true  );
     1647    ptl->setMax10bitConstraintFlag      ( true  );
     1648    ptl->setMax8bitConstraintFlag       ( true  );
     1649    ptl->setMax422chromaConstraintFlag  ( true  );
     1650    ptl->setMax420chromaConstraintFlag  ( true  );
     1651    ptl->setMaxMonochromeConstraintFlag ( false );
     1652    ptl->setIntraConstraintFlag         ( false );
     1653    ptl->setOnePictureOnlyConstraintFlag( false );
     1654    ptl->setLowerBitRateConstraintFlag  ( true  );       
     1655    break;
     1656  default:
     1657    assert( 0 ); // other profiles currently not supported
     1658    break;
     1659  }
     1660}
     1661#endif
    14981662
    14991663Void TAppEncTop::xSetRepFormat( TComVPS& vps )
     
    15131677  //repFormat->setSeparateColourPlaneVpsFlag( );
    15141678
     1679#if H_MV_HLS10_GEN_VSP_CONF_WIN
     1680  repFormat->setConformanceWindowVpsFlag( true );
     1681  repFormat->setConfWinVpsLeftOffset    ( m_confLeft   / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() ) );
     1682  repFormat->setConfWinVpsRightOffset   ( m_confRight  / TComSPS::getWinUnitX( repFormat->getChromaFormatVpsIdc() )  );
     1683  repFormat->setConfWinVpsTopOffset     ( m_confTop    / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() )  );
     1684  repFormat->setConfWinVpsBottomOffset  ( m_confBottom / TComSPS::getWinUnitY( repFormat->getChromaFormatVpsIdc() ) );
     1685#endif
     1686
    15151687  assert( vps.getRepFormat( 0 ) == NULL );
    15161688  vps.setRepFormat( 0 , repFormat );
     
    15281700  { 
    15291701    Int currLsIdx = vps.olsIdxToLsIdx( i );
     1702#if !H_MV_HLS10_ADD_LAYERSETS
    15301703    std::vector<Int> targetDecLayerIdList = vps.getTargetDecLayerIdList( i );
     1704#endif
    15311705    Bool subLayerFlagInfoPresentFlag = false;
    15321706
     
    15341708    {   
    15351709      Bool subLayerDpbInfoPresentFlag = false;
     1710#if !H_MV_HLS10_ADD_LAYERSETS
    15361711      assert( vps.getNumLayersInIdList( currLsIdx ) == targetDecLayerIdList.size() );
     1712#endif
    15371713      for( Int k = 0; k < vps.getNumLayersInIdList( currLsIdx ); k++ )   
    15381714      {
     1715#if H_MV_HLS10_DBP_SIZE
     1716        Int layerIdInVps = vps.getLayerIdInVps( vps.getLayerSetLayerIdList( currLsIdx, k ) );
     1717        if ( vps.getNecessaryLayerFlag( i,k ) && ( vps.getVpsBaseLayerInternalFlag() || vps.getLayerSetLayerIdList( currLsIdx, k ) != 0 ) )
     1718        {       
     1719          dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, m_maxDecPicBufferingMvc[ layerIdInVps ][ j ] - 1 );
     1720          if ( j > 0 )
     1721          {
     1722            subLayerDpbInfoPresentFlag = subLayerDpbInfoPresentFlag || ( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) != dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j - 1 ) );
     1723          }
     1724        }
     1725        else
     1726        {
     1727          if (vps.getNecessaryLayerFlag(i,k) && j == 0 && k == 0 )
     1728          {         
     1729            dpbSize->setMaxVpsDecPicBufferingMinus1(i, k ,j, 0 );
     1730          }
     1731        }
     1732#else
    15391733        Int layerIdInVps = vps.getLayerIdInVps( targetDecLayerIdList[k] );           
    15401734        dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, m_maxDecPicBufferingMvc[ layerIdInVps ][ j ] - 1 );
     1735
    15411736        if ( j > 0 )
    15421737        {
    15431738          subLayerDpbInfoPresentFlag = subLayerDpbInfoPresentFlag || ( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) != dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j - 1 ) );
    15441739        }
     1740#endif
    15451741      }       
    15461742
    15471743      Int maxNumReorderPics = MIN_INT;
     1744#if H_MV_HLS10_DBP_SIZE
     1745      for ( Int idx = 0; idx < vps.getNumLayersInIdList( currLsIdx ); idx++ )
     1746      {
     1747        if (vps.getNecessaryLayerFlag(i, idx ))
     1748        {       
     1749          Int layerIdInVps = vps.getLayerIdInVps( vps.getLayerSetLayerIdList(currLsIdx, idx) );       
     1750          maxNumReorderPics = std::max( maxNumReorderPics, m_numReorderPicsMvc[ layerIdInVps ][ j ] );
     1751        }
     1752      }
     1753#else
    15481754      for ( Int idx = 0; idx < targetDecLayerIdList.size(); idx++ )
    15491755      {
     
    15511757        maxNumReorderPics = std::max( maxNumReorderPics, m_numReorderPicsMvc[ layerIdInVps ][ j ] );
    15521758      }
     1759#endif
    15531760      assert( maxNumReorderPics != MIN_INT );
    15541761
     
    15761783}
    15771784
    1578 
    15791785Void TAppEncTop::xSetLayerSets( TComVPS& vps )
    15801786{   
     
    15981804  // Additional output layer sets + profileLevelTierIdx
    15991805  vps.setDefaultOutputLayerIdc      ( m_defaultOutputLayerIdc );   
     1806#if H_MV_HLS10_ADD_LAYERSETS
     1807  if( vps.getNumIndependentLayers() == 0 && m_numAddLayerSets > 0  )
     1808  {
     1809    fprintf( stderr, "\nWarning: Ignoring additional layer sets since NumIndependentLayers is equal to 0.\n");           
     1810  }
     1811  else
     1812  {
     1813    vps.setNumAddLayerSets( m_numAddLayerSets );
     1814    if ( m_highestLayerIdxPlus1.size() < vps.getNumAddLayerSets() )
     1815    {
     1816      fprintf(stderr, "\nError: Number of highestLayerIdxPlus1 parameters must be greater than or equal to NumAddLayerSets\n");
     1817      exit(EXIT_FAILURE);
     1818    }
     1819
     1820    for (Int i = 0; i < vps.getNumAddLayerSets(); i++)
     1821    {
     1822      if ( m_highestLayerIdxPlus1[ i ].size() < vps.getNumIndependentLayers() )
     1823      {
     1824        fprintf(stderr, "Error: Number of elements in highestLayerIdxPlus1[ %d ] parameters must be greater than or equal to NumIndependentLayers(= %d)\n", i, vps.getNumIndependentLayers());
     1825        exit(EXIT_FAILURE);
     1826      }
     1827
     1828      for (Int j = 1; j < vps.getNumIndependentLayers(); j++)
     1829      {
     1830        if ( m_highestLayerIdxPlus1[ i ][ j ]  < 0 || m_highestLayerIdxPlus1[ i ][ j ] > vps.getNumLayersInTreePartition( j ) )
     1831        {
     1832          fprintf(stderr, "Error: highestLayerIdxPlus1[ %d ][ %d ] shall be in the range of 0 to NumLayersInTreePartition[ %d ] (= %d ), inclusive. \n", i, j, j, vps.getNumLayersInTreePartition( j ) );
     1833          exit(EXIT_FAILURE);
     1834        }
     1835        vps.setHighestLayerIdxPlus1( i, j, m_highestLayerIdxPlus1[ i ][ j ] );
     1836      }
     1837      vps.deriveAddLayerSetLayerIdList( i );
     1838    }       
     1839  } 
     1840#else
    16001841  vps.setNumAddLayerSets            ( 0                             ); 
     1842#endif
    16011843  vps.setNumAddOlss                 ( numAddOuputLayerSets          );
    16021844  vps.initTargetLayerIdLists();
    16031845
     1846#if H_MV_HLS10_ADD_LAYERSETS
     1847  for (Int olsIdx = 0; olsIdx < vps.getNumLayerSets() + numAddOuputLayerSets; olsIdx++)
     1848  {
     1849    Int addOutLsIdx = olsIdx - vps.getNumLayerSets();     
     1850#else
    16041851  for (Int olsIdx = 0; olsIdx < m_vpsNumLayerSets + numAddOuputLayerSets; olsIdx++)
    16051852  {
    16061853    Int addOutLsIdx = olsIdx - m_vpsNumLayerSets;     
    1607    
     1854#endif   
    16081855    vps.setLayerSetIdxForOlsMinus1( olsIdx, ( ( addOutLsIdx < 0 ) ?  olsIdx  : m_outputLayerSetIdx[ addOutLsIdx ] ) - 1 );
    16091856
     1857#if H_MV_HLS10_ADD_LAYERSETS
     1858    Int lsIdx = vps.olsIdxToLsIdx( olsIdx );
     1859#else
    16101860    std::vector<Int>& layerIdList    = m_layerIdsInSets[ vps.olsIdxToLsIdx( olsIdx ) ];
    1611 
     1861#endif
    16121862    if (vps.getDefaultOutputLayerIdc() == 2 || addOutLsIdx >= 0 )
    16131863    {
     1864#if H_MV_HLS10_ADD_LAYERSETS
     1865      for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++)
     1866#else
    16141867      for ( Int i = 0; i < layerIdList.size(); i++)
     1868#endif
    16151869      {
    16161870        vps.setOutputLayerFlag( olsIdx, i, ( olsIdx == 0 && i == 0 ) ? vps.inferOutputLayerFlag(olsIdx, i ) : false ); // This is a software only fix for a bug in the spec. In spec outputLayerFlag neither present nor inferred for this case !
     
    16221876      for (Int j = 0; j < outLayerIdList.size(); j++)
    16231877      {   
     1878#if H_MV_HLS10_ADD_LAYERSETS
     1879        for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++)
     1880        {
     1881          if ( vps.getLayerSetLayerIdList( lsIdx, i ) == outLayerIdList[ j ] )
     1882#else
    16241883        for (Int i = 0; i < layerIdList.size(); i++ )
    16251884        {
    16261885          if ( layerIdList[ i ] == outLayerIdList[ j ] )
     1886#endif
    16271887          {
    16281888            vps.setOutputLayerFlag( olsIdx, i, true );       
     
    16311891          }
    16321892        }
    1633         assert( outputLayerInLayerSetFlag ); // The output layer is not not in the layer set.
     1893#if H_MV_HLS10_ADD_LAYERSETS
     1894        if ( !outputLayerInLayerSetFlag )
     1895        {
     1896          fprintf(stderr, "Error: Output layer %d in output layer set %d not in corresponding layer set %d \n", outLayerIdList[ j ], olsIdx , lsIdx );
     1897          exit(EXIT_FAILURE);
     1898        }
     1899#else
     1900        assert( outputLayerInLayerSetFlag ); // The output layer is not in the layer set.
     1901#endif
    16341902      }
    16351903    }
    16361904    else
    16371905    {
     1906#if H_MV_HLS10_ADD_LAYERSETS
     1907      for ( Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++)
     1908#else
    16381909      for ( Int i = 0; i < layerIdList.size(); i++)
     1910#endif
    16391911      {
    16401912        vps.setOutputLayerFlag( olsIdx, i, vps.inferOutputLayerFlag( olsIdx, i ) );       
     
    16421914    }
    16431915
     1916#if H_MV_HLS10_NESSECARY_LAYER
     1917    vps.deriveNecessaryLayerFlags( olsIdx );
     1918#endif
    16441919    vps.deriveTargetLayerIdList(  olsIdx );
    16451920
     1921#if H_MV_HLS10_PTL
     1922    // SET profile_tier_level_index.
     1923    if ( olsIdx == 0 )
     1924    {   
     1925      vps.setProfileTierLevelIdx( 0, 0 , vps.getMaxLayersMinus1() > 0 ? 1 : 0 );
     1926    }
     1927    else
     1928    {
     1929      if( (Int) m_profileTierLevelIdx[ olsIdx ].size() < vps.getNumLayersInIdList( lsIdx ) )
     1930      {
     1931        fprintf( stderr, "Warning: Not enough profileTierLevelIdx values given for the %d-th OLS. Inferring default values.\n", olsIdx );
     1932      }
     1933      for (Int j = 0; j < vps.getNumLayersInIdList( lsIdx ); j++)
     1934      {
     1935        if( j < (Int) m_profileTierLevelIdx[ olsIdx ].size() )
     1936        {
     1937          vps.setProfileTierLevelIdx(olsIdx, j, m_profileTierLevelIdx[olsIdx][j] );
     1938#if H_MV_HLS10_PTL_FIX
     1939          if( !vps.getNecessaryLayerFlag(olsIdx,j) && m_profileTierLevelIdx[ olsIdx ][ j ] != -1 )
     1940          {
     1941            fprintf( stderr, "Warning: The %d-th layer in the %d-th OLS is not necessary such that profileTierLevelIdx[%d][%d] will be ignored. Set value to -1 to suppress warning.\n", j,olsIdx,olsIdx,j );
     1942          }         
     1943        }
     1944        else if ( vps.getNecessaryLayerFlag(olsIdx,j) )
     1945#else
     1946        }
     1947        else
     1948#endif
     1949        {
     1950          // setting default values
     1951          if ( j == 0 || vps.getVpsNumProfileTierLevelMinus1() < 1 )
     1952          {
     1953            // set base layer as default
     1954            vps.setProfileTierLevelIdx(olsIdx, j, 1 );
     1955          }
     1956          else
     1957          {
     1958            // set VpsProfileTierLevel[2] as default
     1959            vps.setProfileTierLevelIdx(olsIdx, j, 2 );
     1960          }
     1961        }
     1962      }
     1963    }
     1964#else
    16461965    if ( olsIdx > 0 )
    16471966    {
    16481967      vps.setProfileLevelTierIdx( olsIdx, m_profileLevelTierIdx[ olsIdx ] );
    16491968    }
     1969#endif
    16501970   
    16511971    if ( vps.getNumOutputLayersInOutputLayerSet( olsIdx ) == 1 &&
     
    16852005    if( pcVPSVUI->getBitRatePresentVpsFlag( )  ||  pcVPSVUI->getPicRatePresentVpsFlag( ) )
    16862006    {
     2007#if H_MV_HLS10_VPS_VUI
     2008      for( Int i = 0; i  <  vps.getNumLayerSets(); i++ )
     2009#else
    16872010      for( Int i = 0; i  <=  vps.getVpsNumLayerSetsMinus1(); i++ )
     2011#endif
    16882012      {
    16892013        for( Int j = 0; j  <=  vps.getMaxTLayers(); j++ )
     
    17342058        for( Int j = 0; j < vps.getNumDirectRefLayers( vps.getLayerIdInNuh( i ) ) ; j++ )
    17352059        { 
     2060#if H_MV_HLS10_REF_PRED_LAYERS
     2061          Int layerIdx = vps.getLayerIdInVps( vps.getIdDirectRefLayer(vps.getLayerIdInNuh( i ) , j  )); 
     2062#else
    17362063          Int layerIdx = vps.getLayerIdInVps( vps.getRefLayerId(vps.getLayerIdInNuh( i ) , j  )); 
     2064#endif
    17372065          if( pcVPSVUI->getTilesInUseFlag( i )  &&  pcVPSVUI->getTilesInUseFlag( layerIdx ) ) 
    17382066          {
     
    17522080      }
    17532081    }
     2082
     2083#if H_MV_HLS10_VPS_VUI
     2084  pcVPSVUI->setSingleLayerForNonIrapFlag( m_singleLayerForNonIrapFlag );
     2085  pcVPSVUI->setHigherLayerIrapSkipFlag( m_higherLayerIrapSkipFlag );
     2086#endif
    17542087
    17552088    pcVPSVUI->setIlpRestrictedRefLayersFlag( m_ilpRestrictedRefLayersFlag );
     
    18082141  }
    18092142}
    1810 #endif
     2143#if H_MV_HLS10_GEN_FIX
     2144Bool TAppEncTop::xLayerIdInTargetEncLayerIdList(Int nuhLayerId)
     2145{
     2146  return  ( std::find(m_targetEncLayerIdList.begin(), m_targetEncLayerIdList.end(), nuhLayerId) != m_targetEncLayerIdList.end()) ;
     2147}
     2148#endif
     2149
     2150
     2151#endif
     2152
     2153
    18112154#if H_3D
    18122155Void TAppEncTop::xSetVPSExtension2( TComVPS& vps )
     
    18162159    Bool isDepth      = ( vps.getDepthId( layer ) == 1 ) ;
    18172160    Bool isLayerZero  = ( layer == 0 );
     2161#if LGE_FCO_I0116
     2162    Bool isDepthFirst = (layer > 1 ? true : false);
     2163#endif
    18182164
    18192165#if H_3D_ARP
     
    18382184    vps.setVpsDepthModesFlag( layer, isDepth && !isLayerZero && (m_useDMM || m_useSDC || m_useDLT ) );
    18392185#if SEPARATE_FLAG_I0085
     2186#if LGE_FCO_I0116
     2187    vps.setIVPFlag          ( layer, isDepth && !isLayerZero && m_useIVP && !isDepthFirst );
     2188#else
    18402189    vps.setIVPFlag          ( layer, isDepth && !isLayerZero && m_useIVP );
     2190#endif
    18412191#endif
    18422192#endif
     
    18662216#endif
    18672217#if MTK_I0099_VPS_EX2
     2218#if LGE_FCO_I0116
     2219    vps.setLimQtPredFlag         ( layer, isDepth && m_bLimQtPredFlag && !isDepthFirst );
     2220#else
    18682221    vps.setLimQtPredFlag         ( layer, isDepth && m_bLimQtPredFlag );
     2222#endif
    18692223#endif
    18702224#if H_3D_NBDV_REF
     
    18812235#endif
    18822236#if H_3D_IV_MERGE
     2237#if LGE_FCO_I0116
     2238    vps.setMPIFlag( layer, !isLayerZero && isDepth && m_bMPIFlag && !isDepthFirst );
     2239#else
    18832240    vps.setMPIFlag( layer, !isLayerZero && isDepth && m_bMPIFlag );
     2241#endif
    18842242#endif
    18852243  } 
  • trunk/source/App/TAppEncoder/TAppEncTop.h

    r976 r1066  
    132132  Void xSetLayerSets              ( TComVPS& vps );
    133133  Void xSetProfileTierLevel       ( TComVPS& vps );
     134
     135#if H_MV_HLS10_PTL
     136  Void xSetProfileTierLevel( TComVPS& vps, Int profileTierLevelIdx, Int subLayer,                             
     137                             Profile::Name profile, Level::Name level, Level::Tier tier,
     138                             Bool progressiveSourceFlag, Bool interlacedSourceFlag,
     139                             Bool nonPackedConstraintFlag, Bool frameOnlyConstraintFlag,
     140                             Bool inbldFlag );
     141#endif
    134142  Void xSetRepFormat              ( TComVPS& vps );
    135143  Void xSetDpbSize                ( TComVPS& vps );
     
    137145  GOPEntry* xGetGopEntry( Int layerIdInVps, Int poc );
    138146  Int  xGetMax( std::vector<Int>& vec);
     147#if H_MV_HLS10_GEN_FIX
     148  Bool xLayerIdInTargetEncLayerIdList( Int nuhLayerId );
     149#endif
    139150#endif
    140151#if H_3D
  • trunk/source/Lib/TLibCommon/TComDataCU.cpp

    r1039 r1066  
    41774177    TComPic * pcTexPic = m_pcSlice->getTexturePic();
    41784178#if H_3D_FCO
     4179#if LGE_FCO_I0116
     4180    if (pcTexPic && pcTexPic->getReconMark())
     4181#else
    41794182    if (pcTexturePic->getReconMark())
     4183#endif
    41804184    {
    41814185#endif   
     
    61606164  TComMv cMv;
    61616165#if MTK_I0093
    6162   Int iDisp     = getSlice()->getDepthToDisparityB( 0 )[ 1 << ( getSlice()->getSPS()->getBitDepthY() - 1 ) ];
     6166#if H_3D_FIX_64BIT_SHIFT
     6167  Int iDisp     = getSlice()->getDepthToDisparityB( 0 )[ (Int64) (1 << ( getSlice()->getSPS()->getBitDepthY() - 1 )) ];
     6168#else
     6169  Int iDisp     = getSlice()->getDepthToDisparityB( 0 )[  1 << ( getSlice()->getSPS()->getBitDepthY() - 1 ) ];
     6170#endif
    61636171#else
    61646172  Int iDisp     = getSlice()->getDepthToDisparityB( 0 )[ 128 ];
  • trunk/source/Lib/TLibCommon/TComRom.cpp

    r1039 r1066  
    7171    c <<= 1;
    7272  } 
     73
     74#if H_MV
     75#if H_MV_HLS_PTL_LIMITS
     76 g_generalTierAndLevelLimits[ Level::LEVEL1   ] = TComGeneralTierAndLevelLimits(    36864,     350,  INT_MIN,   16,   1,   1 );
     77 g_generalTierAndLevelLimits[ Level::LEVEL2   ] = TComGeneralTierAndLevelLimits(   122880,    1500,  INT_MIN,   16,   1,   1 );
     78 g_generalTierAndLevelLimits[ Level::LEVEL2_1 ] = TComGeneralTierAndLevelLimits(   245760,    3000,  INT_MIN,   20,   1,   1 );
     79 g_generalTierAndLevelLimits[ Level::LEVEL3   ] = TComGeneralTierAndLevelLimits(   552960,    6000,  INT_MIN,   30,   2,   2 );
     80 g_generalTierAndLevelLimits[ Level::LEVEL3_1 ] = TComGeneralTierAndLevelLimits(   983040,   10000,  INT_MIN,   40,   3,   3 );
     81 g_generalTierAndLevelLimits[ Level::LEVEL4   ] = TComGeneralTierAndLevelLimits(  2228224,   12000,    30000,   75,   5,   5 );
     82 g_generalTierAndLevelLimits[ Level::LEVEL4_1 ] = TComGeneralTierAndLevelLimits(  2228224,   20000,    50000,   75,   5,   5 );
     83 g_generalTierAndLevelLimits[ Level::LEVEL5   ] = TComGeneralTierAndLevelLimits(  8912896,   25000,   100000,  200,  11,  10 );
     84 g_generalTierAndLevelLimits[ Level::LEVEL5_1 ] = TComGeneralTierAndLevelLimits(  8912896,   40000,   160000,  200,  11,  10 );
     85 g_generalTierAndLevelLimits[ Level::LEVEL5_2 ] = TComGeneralTierAndLevelLimits(  8912896,   60000,   240000,  200,  11,  10 );
     86 g_generalTierAndLevelLimits[ Level::LEVEL6   ] = TComGeneralTierAndLevelLimits( 35651584,   60000,   240000,  600,  22,  20 );
     87 g_generalTierAndLevelLimits[ Level::LEVEL6_1 ] = TComGeneralTierAndLevelLimits( 35651584,  120000,   480000,  600,  22,  20 );
     88 g_generalTierAndLevelLimits[ Level::LEVEL6_2 ] = TComGeneralTierAndLevelLimits( 35651584,  240000,   800000,  600,  22,  20 );
     89#endif
     90#endif
     91
    7392}
    7493
     
    369388
    370389Char  g_aucConvertToBit  [ MAX_CU_SIZE+1 ];
    371 
     390#if !MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
    372391#if H_3D_IC
    373392UInt g_aICEnableCANDIDATE[10] = { 0, };
    374393UInt g_aICEnableNUM[ 10 ] = { 0, };
    375394Int g_lastlayer=0;
     395#endif
    376396#endif
    377397#if ENC_DEC_TRACE
     
    383403UInt64 g_nSymbolCounter = 0;
    384404#if H_MV_ENC_DEC_TRAC
    385 Bool g_traceCU = true;
    386 Bool g_tracePU = true;
    387 Bool g_traceTU = true;
     405Bool g_traceCU = false;
     406Bool g_tracePU = false;
     407Bool g_traceTU = false;
    388408Bool g_disableHLSTrace = false;
    389409UInt64 g_stopAtCounter       = 0;
  • trunk/source/Lib/TLibCommon/TComRom.h

    r1039 r1066  
    187187// ==========================================
    188188
     189#if H_MV_HLS_PTL_LIMITS
     190class TComGeneralTierAndLevelLimits
     191{
     192public:
     193  TComGeneralTierAndLevelLimits::TComGeneralTierAndLevelLimits
     194  ( Int maxLumaPs,
     195    Int maxCPBMainTier,
     196    Int maxCPBHighTier,
     197    Int maxSliceSegmentsPerPicture,
     198    Int maxTileRows,
     199    Int maxTileCols )
     200  : m_maxLumaPs                 ( maxLumaPs                     ),
     201    m_maxCPBMainTier            ( maxCPBMainTier                ),
     202    m_maxCPBHighTier            ( maxCPBHighTier                ),
     203    m_maxSliceSegmentsPerPicture( maxSliceSegmentsPerPicture    ),
     204    m_maxTileRows               ( maxTileRows                   ),
     205    m_maxTileCols               ( maxTileCols                   );
     206  {};
     207
     208  Int getMaxLumaPs                 ( ) { return m_maxLumaPs                 ; };
     209  Int getMaxCPBMainTier            ( ) { return m_maxCPBMainTier            ; };
     210  Int getMaxCPBHighTier            ( ) { return m_maxCPBHighTier            ; };
     211  Int getMaxSliceSegmentsPerPicture( ) { return m_maxSliceSegmentsPerPicture; };
     212  Int getMaxTileRows               ( ) { return m_maxTileRows               ; };
     213  Int getMaxTileCols               ( ) { return m_maxTileCols               ; };
     214
     215private:
     216  const Int m_maxLumaPs;
     217  const Int m_maxCPBMainTier;
     218  const Int m_maxCPBHighTier;
     219  const Int m_maxSliceSegmentsPerPicture;
     220  const Int m_maxTileRows;
     221  const Int m_maxTileCols;
     222};
     223
     224extern std::map< Level::Name, TComGeneralTierAndLevelLimits > g_generalTierAndLevelLimits;   
     225
     226#endif
    189227// ====================================================================================================================
    190228// Misc.
     
    192230
    193231extern       Char   g_aucConvertToBit  [ MAX_CU_SIZE+1 ];   // from width to log2(width)-2
    194 
     232#if !MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
    195233#if H_3D_IC
    196234extern UInt g_aICEnableCANDIDATE[10];
    197235extern UInt g_aICEnableNUM[ 10 ]; //10 layers
    198236extern Int  g_lastlayer;
     237#endif
    199238#endif
    200239
  • trunk/source/Lib/TLibCommon/TComSlice.cpp

    r1039 r1066  
    1 /* The copyright in this software is being made available under the BSD
     1/* The copyright in this software is being made available under the BSD
    22 * License, included below. This software may be subject to other third party
    33 * and contributor rights, including patent rights, and no such rights are
     
    103103, m_temporalLayerNonReferenceFlag ( false )
    104104, m_enableTMVPFlag                ( true )
     105#if I0044_SLICE_TMVP
     106, m_availableForTMVPRefFlag       ( true )
     107#endif
    105108#if H_MV
    106109, m_refPicSetInterLayer0           ( NULL )
     
    725728
    726729        assert( rpsCurrList[li][ orgIdx ] != NULL );
     730#if DISCARDABLE_PIC_RPS
     731        assert( rpsCurrList[li][ orgIdx ]->getSlice(0)->getDiscardableFlag() == 0 );    // Inter-layer RPS shall not contain picture with discardable_flag = 1.
     732#endif
    727733        m_apcRefPicList    [li][rIdx] = rpsCurrList    [li][ orgIdx ];
    728734        m_bIsUsedAsLongTerm[li][rIdx] = usedAsLongTerm [li][ orgIdx ] ;
     
    18751881#if H_MV
    18761882  m_vpsBaseLayerInternalFlag = true;
     1883#if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL
     1884  m_vpsBaseLayerAvailableFlag = true;
     1885#endif
    18771886#endif
    18781887
     
    19001909  {
    19011910    m_layerSetIdxForOlsMinus1[i]  = -1;
     1911#if !H_MV_HLS10_PTL
    19021912    m_profileLevelTierIdx[i]      = 0;
     1913#endif
    19031914    for ( Int j = 0; j < MAX_VPS_NUH_LAYER_ID_PLUS1; j++)
    19041915    {
     1916#if H_MV_HLS10_PTL
     1917#if H_MV_HLS10_PTL_FIX
     1918      m_profileTierLevelIdx[i][j] = -1;
     1919#else
     1920      m_profileTierLevelIdx[i][j] = false;
     1921#endif
     1922#endif
    19051923      m_outputLayerFlag[i][j] = false;
    19061924    }
     
    19661984      m_directDependencyFlag[i][j] = false;
    19671985      m_directDependencyType[i][j] = -1;
     1986#if H_MV_HLS10_REF_PRED_LAYERS
     1987      m_dependencyFlag  [i][j]    = false;
     1988      m_idDirectRefLayer[i][j]    = -1;
     1989      m_idPredictedLayer[i][j]    = -1;
     1990      m_idRefLayer      [i][j]    = -1;
     1991#else
    19681992      m_refLayerId[i][j]           = -1;
     1993#endif
    19691994      m_maxTidIlRefPicsPlus1[i][j]  = 7;
    19701995    }
     
    20502075  assert( getVpsNumRepFormatsMinus1() <= 255 );
    20512076
     2077#if H_MV_HLS10_ADD_LAYERSETS
     2078  // The value of num_add_layer_sets shall be in the range of 0 to 1023, inclusive.
     2079  assert( getNumAddLayerSets() >= 0 && getNumAddLayerSets() <= 1023 );
     2080#endif
    20522081  return true;
    20532082}
     
    20812110Void TComVPS::setRefLayers()
    20822111{
     2112
     2113#if H_MV_HLS10_REF_PRED_LAYERS
     2114  for( Int i = 0; i  <=  getMaxLayersMinus1(); i++ )
     2115  {
     2116    for( Int j = 0; j  <=  getMaxLayersMinus1(); j++ )
     2117    {
     2118      m_dependencyFlag[ i ][ j ] = getDirectDependencyFlag( i , j );
     2119      for( Int k = 0; k < i; k++ )
     2120      {
     2121        if( getDirectDependencyFlag(i , k )  &&  m_dependencyFlag[k][j] )
     2122        {
     2123          m_dependencyFlag[ i ][ j ] = true;
     2124        }
     2125      }
     2126    }
     2127  }
     2128
     2129  for( Int i = 0; i  <=  getMaxLayersMinus1(); i++ )
     2130  {
     2131    Int iNuhLId = getLayerIdInNuh( i );
     2132    Int d = 0;
     2133    Int r = 0;
     2134    Int p = 0;
     2135    for( Int j = 0; j  <=  getMaxLayersMinus1(); j++ )
     2136    {
     2137      Int jNuhLid = getLayerIdInNuh( j );
     2138      if( getDirectDependencyFlag( i , j ) )
     2139      {
     2140        m_idDirectRefLayer[iNuhLId][d++] = jNuhLid;
     2141      }
     2142      if( getDependencyFlag( i , j ) )
     2143      {
     2144        m_idRefLayer      [iNuhLId][r++] = jNuhLid;
     2145      }
     2146      if( getDependencyFlag( j , i ) )
     2147      {
     2148        m_idPredictedLayer[iNuhLId][p++] = jNuhLid;
     2149      }
     2150    }
     2151    m_numDirectRefLayers[ iNuhLId ] = d;
     2152    m_numRefLayers      [ iNuhLId ] = r;
     2153    m_numPredictedLayers[ iNuhLId ] = p;
     2154  }
     2155 
     2156  Bool layerIdInListFlag[ 64 ];
     2157  for( Int i = 0; i  <=  63; i++ )
     2158  {
     2159    layerIdInListFlag[ i ] = 0;
     2160  }
     2161
     2162  Int k = 0;
     2163  for( Int i = 0; i  <=  getMaxLayersMinus1(); i++ )
     2164  {
     2165    Int iNuhLId = getLayerIdInNuh( i );
     2166    if( getNumDirectRefLayers( iNuhLId )  ==  0 )
     2167    {
     2168      m_treePartitionLayerIdList[ k ][ 0 ] = iNuhLId;
     2169      Int h = 1; 
     2170      for( Int j = 0; j < getNumPredictedLayers( iNuhLId ); j++ ) 
     2171      {
     2172        Int predLId = getIdPredictedLayer( iNuhLId, j );
     2173        if ( !layerIdInListFlag[ predLId ] )
     2174        {
     2175          m_treePartitionLayerIdList[ k ][ h++ ] = predLId;
     2176          layerIdInListFlag[ predLId ] = 1;
     2177        }         
     2178      }
     2179      m_numLayersInTreePartition[ k++ ] = h;
     2180    }
     2181  }
     2182  m_numIndependentLayers = k;
     2183#else // H_MV_HLS10_GEN
     2184
    20832185  for( Int i = 0; i  <= getMaxLayersMinus1(); i++ )
    20842186  {
     
    21162218    }
    21172219  }
    2118 
     2220 
    21192221  for( Int i = 0; i <= getMaxLayersMinus1(); i++ )  // Bug in spec "<" instead of "<="
    21202222  {
     
    21362238    countedLayerIdxFlag[ i ] = 0;
    21372239  }
    2138  
    21392240  for( Int i = 0, k = 0; i  <=  getMaxLayersMinus1(); i++ )
    21402241  {
     
    21442245      m_treePartitionLayerIdList[ k ][ 0 ] = iNuhLId;
    21452246      m_numLayersInTreePartition[ k ]      = 1;
     2247
    21462248      for( Int j = 0; j < m_numPredictedLayers[ iNuhLId ]; j++ ) 
    21472249      {
     
    21542256      }
    21552257      k++;
    2156     }
    2157     m_numIndependentLayers = k;
    2158   }
    2159 }
    2160 
     2258
     2259      m_numIndependentLayers = k;
     2260    }
     2261  }
     2262#endif // H_MV_HLS10_GEN
     2263}
     2264
     2265#if !H_MV_HLS10_REF_PRED_LAYERS
    21612266Int TComVPS::getRefLayerId( Int layerIdInNuh, Int idx )
    21622267{
     
    21662271  return refLayerIdInNuh;
    21672272}
     2273#endif
    21682274
    21692275Int TComVPS::getScalabilityId( Int layerIdInVps, ScalabilityType scalType )
     
    22032309  for ( i = 0; i < iNumViews ; i++ )
    22042310  {
     2311#if H_3D_FIX_UNINIT
     2312    m_bCamParPresent[i] = false;
     2313#endif
    22052314    m_bCamParInSliceHeader[i] = false;
    22062315    m_aaaiCodedScale[i] = new Int*[ 2 ];
     
    23152424{
    23162425  assert( lsIdx >= 0 );
     2426#if H_MV_HLS10_ADD_LAYERSETS
     2427  assert( lsIdx <= getNumLayerSets() );
     2428#else
    23172429  assert( lsIdx <= getVpsNumLayerSetsMinus1() );
     2430#endif
    23182431  return (Int) m_layerSetLayerIdList[ lsIdx ].size();
    23192432}
     
    23392452}
    23402453
     2454#if !H_MV_HLS10_REF_PRED_LAYERS
    23412455Bool TComVPS::getInDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps, Int depth /*= 0 */ )
    23422456{
     2457#if H_MV_HLS10_REF_PRED_LAYERS
     2458  // TBD: Remove getInDirectDependencyFlag entirely.
     2459  return getDependencyFlag( depLayeridInVps, refLayeridInVps );
     2460#else
    23432461  assert( depth < 65 );
    23442462  Bool dependentFlag = getDirectDependencyFlag( depLayeridInVps, refLayeridInVps );
     
    23522470  }
    23532471  return dependentFlag;
    2354 }
     2472#endif
     2473}
     2474#endif
    23552475
    23562476Void TComVPS::deriveLayerSetLayerIdList()
     
    23782498
    23792499  Int lsIdx = olsIdxToLsIdx( i );     
    2380  
     2500
    23812501  for( Int j = 0; j < getNumLayersInIdList( lsIdx ); j++ )
    23822502  {
    2383     m_targetDecLayerIdLists[i].push_back( m_layerSetLayerIdList[ lsIdx ][ j ] );
     2503#if H_MV_HLS10_NESSECARY_LAYER
     2504    if ( getNecessaryLayerFlag( i , j ))
     2505    {
     2506#endif
     2507      m_targetDecLayerIdLists[i].push_back( m_layerSetLayerIdList[ lsIdx ][ j ] );
     2508#if H_MV_HLS10_NESSECARY_LAYER
     2509    }
     2510#endif
     2511
    23842512    if( getOutputLayerFlag( i, j  ))
    23852513    {
     
    24292557}
    24302558
     2559#if !H_MV_HLS10_ADD_LAYERSETS
    24312560Void TComVPS::inferDbpSizeLayerSetZero( TComSPS* sps, Bool encoder )
    24322561{
     
    24512580  }
    24522581}
    2453 
     2582#endif
    24542583Bool TComVPS::getAltOutputLayerFlagVar( Int i )
    24552584{
     
    24652594}
    24662595
     2596#if !H_MV_HLS10_MAXNUMPICS
    24672597Int TComVPS::getMaxNumPics( Int layerId )
    24682598{
     
    24832613  return maxNumPics;
    24842614}
    2485 
     2615#endif
     2616
     2617#if !H_MV_HLS10_REF_PRED_LAYERS
    24862618Void TComVPS::xSetRefLayerFlags( Int currLayerId )
    24872619{
     
    24962628  }
    24972629}
     2630
     2631#endif
     2632
     2633#if H_MV_HLS10_PTL_FIX
     2634Int TComVPS::inferProfileTierLevelIdx(Int i, Int j)
     2635{
     2636  Bool inferZero        = ( i == 0 && j == 0 &&  getVpsBaseLayerInternalFlag() );
     2637  Bool inferGreaterZero = getNecessaryLayerFlag(i,j) && ( getVpsNumProfileTierLevelMinus1() == 0 );
     2638  assert( inferZero || inferGreaterZero );
     2639
     2640  Bool ptlIdx = 0; // inference for greaterZero
     2641  if ( inferZero )
     2642  {
     2643    ptlIdx = getMaxLayersMinus1() > 0 ? 1 : 0;
     2644    if ( inferGreaterZero )
     2645    {
     2646      assert( ptlIdx == 0 ); 
     2647      // This should never happen since :
     2648      // When vps_max_layers_minus1 is greater than 0, the value of vps_num_profile_tier_level_minus1 shall be greater than or equal to 1.
     2649    }
     2650  }
     2651  return ptlIdx;
     2652}
     2653#endif
     2654
     2655#if H_MV_HLS10_ADD_LAYERSETS
     2656Void TComVPS::deriveAddLayerSetLayerIdList(Int i)
     2657{
     2658  assert( m_layerSetLayerIdList.size() ==  ( getVpsNumLayerSetsMinus1() + 1 + i ) );
     2659  std::vector<Int> layerSetLayerIdList;
     2660
     2661  for( Int treeIdx = 1; treeIdx < getNumIndependentLayers(); treeIdx++ )
     2662  {
     2663    // The value of highest_layer_idx_plus1[ i ][ j ] shall be in the range of 0 to NumLayersInTreePartition[ j ], inclusive.
     2664    assert( getHighestLayerIdxPlus1( i, treeIdx ) >= 0 && getHighestLayerIdxPlus1( i, treeIdx ) <= getNumLayersInTreePartition( treeIdx ) );
     2665
     2666    for( Int layerCnt = 0; layerCnt < getHighestLayerIdxPlus1( i, treeIdx ); layerCnt++ )
     2667    {
     2668      layerSetLayerIdList.push_back( getTreePartitionLayerIdList( treeIdx, layerCnt ) );
     2669    }
     2670  }
     2671  m_layerSetLayerIdList.push_back( layerSetLayerIdList );
     2672
     2673  //It is a requirement of bitstream conformance that
     2674  //NumLayersInIdList[ vps_num_layer_sets_minus1 + 1 + i ] shall be greater than 0.
     2675  assert( getNumLayersInIdList( getVpsNumLayerSetsMinus1() + 1 + i ) > 0 );
     2676}
     2677
     2678#endif
     2679
     2680#if H_MV_HLS10_NESSECARY_LAYER
     2681Void TComVPS::deriveNecessaryLayerFlags(Int olsIdx)
     2682{
     2683  AOF( olsIdx >= 0 && olsIdx < getNumOutputLayerSets() );
     2684  Int lsIdx = olsIdxToLsIdx( olsIdx );
     2685  for( Int lsLayerIdx = 0; lsLayerIdx < getNumLayersInIdList( lsIdx) ; lsLayerIdx++ )
     2686  {
     2687    m_necessaryLayerFlag[ olsIdx ][ lsLayerIdx ] = 0;
     2688  }
     2689  for( Int lsLayerIdx = 0; lsLayerIdx < getNumLayersInIdList( lsIdx ); lsLayerIdx++ )
     2690  {
     2691    if( getOutputLayerFlag( olsIdx, lsLayerIdx  ))
     2692    {
     2693      m_necessaryLayerFlag[ olsIdx ][ lsLayerIdx ] = 1;
     2694      Int currLayerId = getLayerSetLayerIdList( lsIdx, lsLayerIdx );
     2695      for( Int rLsLayerIdx = 0; rLsLayerIdx < lsLayerIdx; rLsLayerIdx++ )
     2696      {
     2697        Int refLayerId = getLayerSetLayerIdList( lsIdx, rLsLayerIdx );
     2698        if( getDependencyFlag( getLayerIdInVps( currLayerId ), getLayerIdInVps( refLayerId ) ) )
     2699        {
     2700          m_necessaryLayerFlag[ olsIdx ][ rLsLayerIdx ] = 1;
     2701        }
     2702      }
     2703    }
     2704  }
     2705  m_numNecessaryLayers[ olsIdx ] = 0;
     2706  for( Int lsLayerIdx = 0; lsLayerIdx < getNumLayersInIdList( lsIdx ); lsLayerIdx++ )
     2707  {
     2708    m_numNecessaryLayers[ olsIdx ]  +=  m_necessaryLayerFlag[ olsIdx ][ lsLayerIdx ];
     2709  }
     2710}
     2711#endif
     2712
     2713#if H_MV_HLS10_ADD_LAYERSETS
     2714Void TComVPS::printPTL()
     2715{
     2716  std::vector<Int> idx;
     2717  std::vector<Int> num;
     2718  std::vector< std::vector<Int> > ptlInfo;
     2719
     2720  std::cout << std::right << std::setw(60) << std::setfill('-') << " " << std::setfill(' ') << std::endl << "PTLI" << std::endl;
     2721
     2722  for ( Int i = 0; i <= getVpsNumProfileTierLevelMinus1(); i++ )
     2723  {
     2724    std::vector<Int> curPtlInfo;
     2725    ProfileTierLevel* ptl = getPTL( i )->getGeneralPTL();
     2726    curPtlInfo.push_back( (Int) ptl->getProfileIdc()  );
     2727    curPtlInfo.push_back( (Int) ptl->getTierFlag()    );
     2728    curPtlInfo.push_back( (Int) ptl->getLevelIdc()    );
     2729    curPtlInfo.push_back( (Int) ptl->getInbldFlag()   );
     2730
     2731    idx.push_back ( i );
     2732    num.push_back ( 4 );
     2733    ptlInfo.push_back( curPtlInfo );
     2734  }
     2735
     2736  xPrintArray( "VpsProfileTierLevel", getVpsNumProfileTierLevelMinus1() + 1, idx, num, ptlInfo, false  );
     2737
     2738  num.clear();
     2739  idx.clear();
     2740  for (Int i = 0; i < getNumOutputLayerSets(); i++)
     2741  {
     2742    num.push_back ( getNumLayersInIdList( olsIdxToLsIdx( i ))  );
     2743    idx.push_back( i );
     2744  }
     2745
     2746  xPrintArray( "profile_tier_level_idx", getNumOutputLayerSets(), idx, num, m_profileTierLevelIdx, true );
     2747  std::cout << std::endl;
     2748}
     2749
     2750Void TComVPS::printLayerDependencies()
     2751{
     2752  vector<Int> fullArray;
     2753  vector<Int> range;
     2754
     2755#if H_3D
     2756  vector<Int> depthId;
     2757#endif
     2758
     2759#if H_MV_HLS10_AUX
     2760  vector<Int> viewOrderIndex;
     2761  vector<Int> auxId;
     2762  vector<Int> dependencyId;
     2763  vector<Int> viewId;
     2764#endif
     2765  for (Int i = 0; i <= getMaxLayersMinus1(); i++ )
     2766  {
     2767    fullArray.push_back( getMaxLayersMinus1() + 1 );
     2768    range.push_back( i );
     2769#if H_MV_HLS10_AUX     
     2770    viewOrderIndex.push_back( getViewIndex   ( i ) );
     2771    dependencyId  .push_back( getDependencyId( i ) );
     2772    auxId         .push_back( getAuxId       ( i ) );     
     2773    viewId        .push_back( getViewId      ( getLayerIdInNuh( i ) ) );
     2774#if H_3D 
     2775    depthId.push_back( getDepthId( i ) );
     2776#endif
     2777#endif
     2778  }
     2779  std::cout << std::right << std::setw(60) << std::setfill('-') << " " << std::setfill(' ') << std::endl << "Layer Dependencies" << std::endl;
     2780  xPrintArray( "direct_dependency_flag", getMaxLayersMinus1()+1, range, fullArray, m_directDependencyFlag, false );
     2781  xPrintArray( "DependencyFlag", getMaxLayersMinus1()+1, range, fullArray, m_dependencyFlag, false );
     2782  xPrintArray( "layer_id_in_nuh", getMaxLayersMinus1()+1, m_layerIdInNuh, true  );     
     2783  xPrintArray( "IdPredictedLayer", getMaxLayersMinus1() + 1, m_layerIdInNuh, m_numPredictedLayers, m_idPredictedLayer, true );
     2784  xPrintArray( "IdRefLayer"      , getMaxLayersMinus1() + 1, m_layerIdInNuh, m_numRefLayers, m_idRefLayer, true );
     2785  xPrintArray( "IdDirectRefLayer", getMaxLayersMinus1() + 1, m_layerIdInNuh, m_numDirectRefLayers, m_idDirectRefLayer, true );
     2786  std::cout << std::endl;
     2787}
     2788
     2789#if H_MV_HLS10_AUX
     2790Void TComVPS::printScalabilityId()
     2791{
     2792  vector<Int> layerIdxInVps;
     2793
     2794#if H_3D
     2795  vector<Int> depthId;
     2796#endif
     2797
     2798  vector<Int> viewOrderIndex;
     2799  vector<Int> auxId;
     2800  vector<Int> dependencyId;
     2801  vector<Int> viewId;
     2802
     2803  for (Int i = 0; i <= getMaxLayersMinus1(); i++ )
     2804  {
     2805    Int layerIdInNuh = getLayerIdInNuh( i );
     2806    layerIdxInVps  .push_back( i );
     2807    viewOrderIndex.push_back( getViewIndex   ( layerIdInNuh ) );
     2808    dependencyId  .push_back( getDependencyId( layerIdInNuh ) );
     2809    auxId         .push_back( getAuxId       ( layerIdInNuh ) );     
     2810    viewId        .push_back( getViewId      ( layerIdInNuh ) );
     2811#if H_3D 
     2812    depthId       .push_back( getDepthId     ( layerIdInNuh ) );
     2813#endif
     2814  }
     2815
     2816  std::cout << std::right << std::setw(60) << std::setfill('-') << " " << std::setfill(' ') << std::endl << "Scalability Ids" << std::endl;
     2817  xPrintArray( "layerIdxInVps"  , getMaxLayersMinus1()+1, layerIdxInVps,          false );
     2818  xPrintArray( "layer_id_in_nuh", getMaxLayersMinus1()+1, m_layerIdInNuh, false );     
     2819
     2820  xPrintArray( "ViewOrderIndex", getMaxLayersMinus1()+1, viewOrderIndex, false );     
     2821  xPrintArray( "DependencyId"  , getMaxLayersMinus1()+1, dependencyId  , false );     
     2822  xPrintArray( "AuxId"         , getMaxLayersMinus1()+1, auxId         , false );     
     2823  xPrintArray( "ViewId"        , getMaxLayersMinus1()+1, viewId        , false );     
     2824
     2825  std::cout << std::endl;
     2826}
     2827#endif
     2828
     2829Void TComVPS::printLayerSets()
     2830{
     2831  vector<Int> fullArray;
     2832  vector<Int> numLayersInIdList;
     2833  vector<Int> rangeLayerSets;
     2834
     2835
     2836  for (Int i = 0; i < getNumLayerSets(); i++ )
     2837  {
     2838    numLayersInIdList.push_back( getNumLayersInIdList( i ) );       
     2839    rangeLayerSets.push_back( i );
     2840  }
     2841
     2842  vector<Int> rangeOutputLayerSets;
     2843  vector<Int> numOutputLayersInOutputLayerSet;
     2844  vector<Int> numDecLayer;
     2845  vector<Int> numLayersInLayerSetForOutputLayerSet;
     2846  vector<Int> vOlsIdxToLsIdx;
     2847  for (Int i = 0; i < getNumOutputLayerSets(); i++ )
     2848  {
     2849    vOlsIdxToLsIdx.push_back( olsIdxToLsIdx(i));
     2850    numOutputLayersInOutputLayerSet.push_back( getNumOutputLayersInOutputLayerSet( i ) );       
     2851    numDecLayer.push_back( (Int) m_targetDecLayerIdLists[ i ].size() );
     2852    rangeOutputLayerSets.push_back( i );
     2853    numLayersInLayerSetForOutputLayerSet.push_back( getNumLayersInIdList( olsIdxToLsIdx( i ) ) );
     2854  }
     2855
     2856  vector<Int> rangeIndependentLayers;
     2857  for(Int i = 0; i < getNumIndependentLayers(); i++ )
     2858  {
     2859    rangeIndependentLayers.push_back( i );   
     2860  }
     2861
     2862  vector<Int> rangeAddLayerSets;
     2863  vector<Int> numHighestLayerIdxPlus1;
     2864  for(Int i = 0; i < getNumAddLayerSets(); i++ )
     2865  {
     2866    rangeAddLayerSets.push_back( i );   
     2867    numHighestLayerIdxPlus1.push_back( getNumIndependentLayers() );
     2868  }
     2869
     2870  std::cout << std::right << std::setw(60) << std::setfill('-') << " " << std::setfill(' ') << std::endl << "Layer Sets" << std::endl;     
     2871  xPrintArray( "TreePartitionLayerIdList", getNumIndependentLayers(), rangeIndependentLayers, m_numLayersInTreePartition, m_treePartitionLayerIdList, true );
     2872  xPrintArray( "highest_layer_idx_plus1", getNumAddLayerSets(), rangeAddLayerSets, numHighestLayerIdxPlus1, m_highestLayerIdxPlus1, true );
     2873  xPrintArray( "LayerSetLayerIdList" , (Int) getNumLayerSets()      , rangeLayerSets      , numLayersInIdList, m_layerSetLayerIdList, true );
     2874  xPrintArray( "OlsIdxToLsIdx", (Int) vOlsIdxToLsIdx.size(), vOlsIdxToLsIdx, true );
     2875  xPrintArray( "OutputLayerFlag"     , getNumOutputLayerSets(), rangeOutputLayerSets, numLayersInLayerSetForOutputLayerSet, m_outputLayerFlag, true );
     2876  xPrintArray( "TargetOptLayerIdList", getNumOutputLayerSets(), rangeOutputLayerSets, numOutputLayersInOutputLayerSet, m_targetOptLayerIdLists, true );
     2877  xPrintArray( "NecessaryLayerFlag"  , getNumOutputLayerSets(), rangeOutputLayerSets, numLayersInLayerSetForOutputLayerSet, m_necessaryLayerFlag   , true );
     2878  xPrintArray( "TargetDecLayerIdList", getNumOutputLayerSets(), rangeOutputLayerSets, numDecLayer,                     m_targetDecLayerIdLists, true );
     2879  std::cout << endl;
     2880}
     2881
     2882#endif
    24982883
    24992884#endif // H_MV
     
    25792964#endif
    25802965
     2966#if !H_MV_HLS10_PPS
    25812967  m_numScaledRefLayerOffsets = 0;
    25822968
     
    25902976    m_scaledRefLayerLeftOffset     [i] = 0;
    25912977    m_scaledRefLayerTopOffset      [i] = 0;
    2592     m_scaledRefLayerRightOffset    [i] = 0;
     2978    m_scaledRefLayerRiFghtOffset    [i] = 0;
    25932979    m_scaledRefLayerBottomOffset   [i] = 0;
    25942980  }
     2981#endif
    25952982#endif
    25962983}
     
    29673354Void TComSPS::inferRepFormat( TComVPS* vps, Int layerIdCurr )
    29683355{
     3356#if H_MV_HLS10_MULTILAYERSPS
     3357  if ( getMultiLayerExtSpsFlag() )
     3358#else
    29693359  if ( layerIdCurr > 0 )
     3360#endif
    29703361  {
    29713362    Int            repFormatIdx = getUpdateRepFormatFlag() ?  getSpsRepFormatIdx() : vps->getVpsRepFormatIdx( vps->getLayerIdInVps( layerIdCurr ) ) ;
    29723363    TComRepFormat* repFormat    = vps->getRepFormat( repFormatIdx );
    2973       setChromaFormatIdc( repFormat->getChromaFormatVpsIdc() );         
    2974       //// ToDo: add when supported:
    2975       // setSeperateColourPlaneFlag( repFormat->getSeparateColourPlaneVpsFlag() ) ;
    2976 
    2977       setPicWidthInLumaSamples ( repFormat->getPicWidthVpsInLumaSamples()  );
    2978       setPicHeightInLumaSamples( repFormat->getPicHeightVpsInLumaSamples() );
    2979 
    2980       setBitDepthY             ( repFormat->getBitDepthVpsLumaMinus8()   + 8 );
    2981       setQpBDOffsetY           ( (Int) (6*( getBitDepthY() - 8 )) );
    2982 
    2983       setBitDepthC             ( repFormat->getBitDepthVpsChromaMinus8() + 8 );
    2984       setQpBDOffsetC           ( (Int) (6* ( getBitDepthC() -8 ) ) );
    2985     if ( getLayerId() > 0 && getUpdateRepFormatFlag() )
     3364    setChromaFormatIdc( repFormat->getChromaFormatVpsIdc() );         
     3365    //// ToDo: add when supported:
     3366    // setSeperateColourPlaneFlag( repFormat->getSeparateColourPlaneVpsFlag() ) ;
     3367
     3368    setPicWidthInLumaSamples ( repFormat->getPicWidthVpsInLumaSamples()  );
     3369    setPicHeightInLumaSamples( repFormat->getPicHeightVpsInLumaSamples() );
     3370
     3371    setBitDepthY             ( repFormat->getBitDepthVpsLumaMinus8()   + 8 );
     3372    setQpBDOffsetY           ( (Int) (6*( getBitDepthY() - 8 )) );
     3373
     3374    setBitDepthC             ( repFormat->getBitDepthVpsChromaMinus8() + 8 );
     3375    setQpBDOffsetC           ( (Int) (6* ( getBitDepthC() -8 ) ) );
     3376 #if H_MV_HLS10_GEN_VSP_CONF_WIN
     3377    Window &spsConf    = getConformanceWindow();   
     3378
     3379    // Scaled later
     3380    spsConf.setScaledFlag( false );
     3381    spsConf.setWindowLeftOffset  ( repFormat->getConfWinVpsLeftOffset()    );
     3382    spsConf.setWindowRightOffset ( repFormat->getConfWinVpsRightOffset()   );
     3383    spsConf.setWindowTopOffset   ( repFormat->getConfWinVpsTopOffset()     );
     3384    spsConf.setWindowBottomOffset( repFormat->getConfWinVpsBottomOffset()  );   
     3385#endif
     3386
     3387#if H_MV_HLS10_MULTILAYERSPS
     3388   if ( getMultiLayerExtSpsFlag() && getUpdateRepFormatFlag() )
     3389#else
     3390   if ( getLayerId() > 0 && getUpdateRepFormatFlag() )
     3391#endif
    29863392    {
    29873393      assert( getChromaFormatIdc()      <=  repFormat->getChromaFormatVpsIdc()         );
     
    30173423  const std::vector<Int>& targetDecLayerIdList = vps->getTargetDecLayerIdList( vps->olsIdxToLsIdx( targetOptLayerSetIdx ));
    30183424
     3425#if H_MV_HLS10_MULTILAYERSPS
     3426  if ( getMultiLayerExtSpsFlag() )
     3427#else
    30193428  if (getLayerId() > 0 )
     3429#endif
    30203430  {
    30213431    Int layerIdx = 0;         
     
    30353445      Int maxDecPicBufferingMinus1 = vps->getDpbSize()->getMaxVpsDecPicBufferingMinus1( targetOptLayerSetIdx, layerIdx, i ) ;
    30363446
    3037       if ( encoder )
     3447#if H_MV_HLS10_MULTILAYERSPS
     3448      // This preliminary fix needs to be checked.
     3449      Int maxNumReorderPics       = vps->getDpbSize()->getMaxVpsNumReorderPics( targetOptLayerSetIdx, i );
     3450      Int maxLatencyIncreasePlus1 = vps->getDpbSize()->getMaxVpsLatencyIncreasePlus1( targetOptLayerSetIdx, i );
     3451#endif
     3452      if ( encoder )     
    30383453      {
    30393454        assert( getMaxDecPicBuffering( i ) - 1 == maxDecPicBufferingMinus1 );
     3455#if H_MV_HLS10_MULTILAYERSPS
     3456        // This preliminary fix needs to be checked.
     3457        assert( getNumReorderPics( i )     == maxNumReorderPics       );
     3458        assert( getMaxLatencyIncrease( i ) == maxLatencyIncreasePlus1 );
     3459#endif   
     3460
    30403461      }
    30413462      else
    30423463      {
     3464#if !H_MV_HLS10_MULTILAYERSPS
    30433465        setMaxDecPicBuffering(i, maxDecPicBufferingMinus1 + 1 );
    3044       }
    3045     }
     3466#else
     3467        // This preliminary fix needs to be checked.
     3468        setMaxDecPicBuffering( maxDecPicBufferingMinus1 + 1 , i);
     3469        setNumReorderPics    ( maxNumReorderPics, i );
     3470        setMaxLatencyIncrease( maxLatencyIncreasePlus1 - 1 , i);
     3471#endif
     3472      }
     3473    }   
    30463474  }
    30473475}
     
    30493477Void TComSPS::checkRpsMaxNumPics( TComVPS* vps, Int currLayerId )
    30503478{
     3479#if !H_MV_HLS10_MAXNUMPICS
    30513480  // In spec, when rps is in SPS, nuh_layer_id of SPS is used instead
    30523481  // of nuh_layer_id of slice (currLayerId), this seems to be a bug.
    3053 
     3482#endif
    30543483  for (Int i = 0; i < getRPSList()->getNumberOfReferencePictureSets(); i++ )
    30553484  {
     
    30573486    if ( !rps->getInterRPSPrediction() )
    30583487    {
     3488#if H_MV_HLS10_MAXNUMPICS
     3489      rps->checkMaxNumPics( vps->getVpsExtensionFlag(), MAX_INT, getLayerId(), getMaxDecPicBuffering( getSpsMaxSubLayersMinus1() ) - 1 );   // INT_MAX to be replaced by DpbSize
     3490#else
    30593491      rps->checkMaxNumPics( vps->getVpsExtensionFlag(), vps->getMaxNumPics( currLayerId ),
    30603492        getLayerId(), getMaxDecPicBuffering( getSpsMaxSubLayersMinus1() ) - 1 ); 
    3061     }
    3062   }
    3063 }
    3064 
     3493#endif
     3494    }
     3495  }
     3496}
     3497
     3498#if H_MV_HLS10_MULTILAYERSPS
     3499Void TComSPS::inferSpsMaxSubLayersMinus1(Bool atPsActivation, TComVPS* vps)
     3500{
     3501  assert( getLayerId() != 0 );
     3502  if ( !atPsActivation   )
     3503  {
     3504    assert( vps == NULL );
     3505    if (getSpsExtOrMaxSubLayersMinus1() != 7)
     3506    {
     3507      setSpsMaxSubLayersMinus1( getSpsExtOrMaxSubLayersMinus1() );
     3508    }
     3509  }
     3510  else
     3511  {
     3512    assert( vps != NULL );
     3513    if (getSpsExtOrMaxSubLayersMinus1() == 7)
     3514    {
     3515      setSpsMaxSubLayersMinus1( vps->getMaxSubLayersMinus1() );
     3516    }
     3517  }
     3518}
     3519#endif
    30653520#endif
    30663521
     
    34253880{
    34263881  TComVPS* vps = getVPS();
     3882#if H_MV_HLS10_REF_PRED_LAYERS
     3883  Int refLayerIdx = vps->getLayerIdInVps( vps->getIdDirectRefLayer( getLayerId(), i ) );
     3884#else
    34273885  Int refLayerIdx = vps->getLayerIdInVps( vps->getRefLayerId( getLayerId(), i ) );
     3886#endif
    34283887
    34293888  Bool refLayerPicFlag = ( vps->getSubLayersVpsMaxMinus1( refLayerIdx ) >=  getTLayer() )  && ( getTLayer() == 0  ) &&
     
    34963955Int TComSlice::getRefPicLayerId( Int i )
    34973956{
     3957#if H_MV_HLS10_REF_PRED_LAYERS
     3958  return getVPS()->getIdDirectRefLayer( getLayerId(), getInterLayerPredLayerIdc( i ) );
     3959#else
    34983960  return getVPS()->getRefLayerId( getLayerId(), getInterLayerPredLayerIdc( i ) );
     3961#endif
    34993962}
    35003963
     
    36024065      m_bApplyIC = true;
    36034066      Int refLayer = curLayer-1;
    3604       if( (refLayer>=0) && (g_aICEnableCANDIDATE[refLayer]>0) )
     4067#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     4068      Int ICEnableCandidate = getICEnableCandidate(refLayer);
     4069      Int ICEnableNum = getICEnableNum(refLayer);
     4070      if( (refLayer>=0) && (ICEnableCandidate>0) )
    36054071      {   
    3606         Double ratio=Double(g_aICEnableNUM[refLayer])/Double(g_aICEnableCANDIDATE[refLayer]);
     4072        Double ratio=Double(ICEnableNum/Double(ICEnableCandidate));
    36074073
    36084074        if( ratio > IC_LOW_LATENCY_ENCODING_THRESHOLD)
    3609 {
     4075        {
    36104076          m_bApplyIC=true;
    36114077        }
     
    36154081        }
    36164082      }
     4083      setICEnableCandidate(curLayer, 0);
     4084      setICEnableNum(curLayer, 0);
     4085#else
     4086      if( (refLayer>=0) && (g_aICEnableCANDIDATE[refLayer]>0) )
     4087      {   
     4088        Double ratio=Double(g_aICEnableNUM[refLayer])/Double(g_aICEnableCANDIDATE[refLayer]);
     4089
     4090        if( ratio > IC_LOW_LATENCY_ENCODING_THRESHOLD)
     4091{
     4092          m_bApplyIC=true;
     4093        }
     4094        else
     4095        {
     4096          m_bApplyIC=false;
     4097        }
     4098      }
    36174099      g_aICEnableNUM[curLayer]=0;
    36184100      g_aICEnableCANDIDATE[curLayer]=0;
    36194101      g_lastlayer=getDepth();
     4102#endif
    36204103    }
    36214104  }
     
    37274210
    37284211#if H_3D_DDD
     4212#if LGE_FCO_I0116
     4213  if( getIsDepth() && getViewIndex() > 0 && getVPS()->getMPIFlag(layerIdInVPS))
     4214#else
    37294215  if( getIsDepth() && getViewIndex() > 0 )
     4216#endif
    37304217  {
    37314218      TComSlice *pcTextSlice = getTexturePic()->getSlice( 0 );
     
    42094696, m_nonPackedConstraintFlag(false)
    42104697, m_frameOnlyConstraintFlag(false)
     4698#if H_MV_HLS10_PTL
     4699  , m_max12bitConstraintFlag      ( false )
     4700  , m_max10bitConstraintFlag      ( false )
     4701  , m_max8bitConstraintFlag       ( false )
     4702  , m_max422chromaConstraintFlag  ( false )
     4703  , m_max420chromaConstraintFlag  ( false )
     4704  , m_maxMonochromeConstraintFlag ( false )
     4705  , m_intraConstraintFlag         ( false )
     4706  , m_onePictureOnlyConstraintFlag( false )
     4707  , m_lowerBitRateConstraintFlag  ( false )
     4708  , m_inbldFlag                   ( false )
     4709#endif
    42114710{
    42124711  ::memset(m_profileCompatibilityFlag, 0, sizeof(m_profileCompatibilityFlag));
    42134712}
     4713
     4714#if H_MV_HLS10_PTL_INFER_FIX
     4715Bool ProfileTierLevel::getV2ConstraintsPresentFlag()
     4716{
     4717  return (
     4718    getProfileIdc( ) ==  4 || getProfileCompatibilityFlag( 4 ) || getProfileIdc( ) ==  5 || getProfileCompatibilityFlag( 5 )  ||
     4719    getProfileIdc( ) ==  6 || getProfileCompatibilityFlag( 6 ) || getProfileIdc( ) ==  7 || getProfileCompatibilityFlag( 7 )
     4720    );
     4721}
     4722
     4723Bool ProfileTierLevel::getInbldPresentFlag()
     4724{
     4725  return (
     4726    ( getProfileIdc() >= 1 && getProfileIdc() <= 5 )  || getProfileCompatibilityFlag( 1 ) || getProfileCompatibilityFlag( 2 ) ||
     4727    getProfileCompatibilityFlag( 3 ) || getProfileCompatibilityFlag( 4 )  ||   getProfileCompatibilityFlag( 5 )
     4728    );
     4729}
     4730
     4731Void ProfileTierLevel::copyV2ConstraintFlags(ProfileTierLevel* ptlRef)
     4732{
     4733  setMax12bitConstraintFlag         ( ptlRef->getMax12bitConstraintFlag       ( ) );
     4734  setMax10bitConstraintFlag         ( ptlRef->getMax10bitConstraintFlag       ( ) );
     4735  setMax8bitConstraintFlag          ( ptlRef->getMax8bitConstraintFlag        ( ) );
     4736  setMax422chromaConstraintFlag     ( ptlRef->getMax422chromaConstraintFlag   ( ) );
     4737  setMax420chromaConstraintFlag     ( ptlRef->getMax420chromaConstraintFlag   ( ) );
     4738  setMaxMonochromeConstraintFlag    ( ptlRef->getMaxMonochromeConstraintFlag  ( ) );
     4739  setIntraConstraintFlag            ( ptlRef->getIntraConstraintFlag          ( ) );
     4740  setOnePictureOnlyConstraintFlag   ( ptlRef->getOnePictureOnlyConstraintFlag ( ) );
     4741  setLowerBitRateConstraintFlag     ( ptlRef->getLowerBitRateConstraintFlag   ( ) );
     4742}
     4743
     4744Void ProfileTierLevel::copyProfile(ProfileTierLevel* ptlRef)
     4745{
     4746  setProfileSpace            ( ptlRef->getProfileSpace              ( ) );
     4747  setTierFlag                ( ptlRef->getTierFlag                  ( ) );
     4748  setProfileIdc              ( ptlRef->getProfileIdc                ( ) );
     4749  for (Int j = 0; j < 32; j++)
     4750  {     
     4751    setProfileCompatibilityFlag(j, ptlRef->getProfileCompatibilityFlag  ( j ) );           
     4752  }
     4753  setProgressiveSourceFlag   ( ptlRef->getProgressiveSourceFlag     ( ) );
     4754  setInterlacedSourceFlag    ( ptlRef->getInterlacedSourceFlag      ( ) );
     4755  setNonPackedConstraintFlag ( ptlRef->getNonPackedConstraintFlag   ( ) );
     4756  setFrameOnlyConstraintFlag ( ptlRef->getFrameOnlyConstraintFlag   ( ) );
     4757  copyV2ConstraintFlags      ( ptlRef );
     4758}
     4759
     4760#endif
    42144761
    42154762TComPTL::TComPTL()
     
    42204767
    42214768#if H_MV
     4769#if !H_MV_HLS10_PTL_INFER_FIX
    42224770Void TComPTL::copyLevelFrom( TComPTL* source )
    42234771{
     
    42294777  }
    42304778}
     4779#else
     4780Void TComPTL::inferGeneralValues(Bool profilePresentFlag, Int k, TComPTL* refPTL)
     4781{
     4782  ProfileTierLevel* refProfileTierLevel = NULL;
     4783  if ( k > 0 )
     4784  {   
     4785    assert( refPTL != NULL);
     4786    refProfileTierLevel = refPTL->getGeneralPTL();
     4787  }
     4788
     4789  ProfileTierLevel* curProfileTierLevel = getGeneralPTL( );
     4790
     4791  if( !profilePresentFlag )
     4792  {
     4793    assert( k > 0 );
     4794    assert( refProfileTierLevel != NULL );
     4795    curProfileTierLevel->copyProfile( refProfileTierLevel);
     4796  }
     4797  else
     4798  {
     4799    if ( !curProfileTierLevel->getV2ConstraintsPresentFlag() )
     4800    {
     4801      curProfileTierLevel->setMax12bitConstraintFlag         ( false );
     4802      curProfileTierLevel->setMax10bitConstraintFlag         ( false );
     4803      curProfileTierLevel->setMax8bitConstraintFlag          ( false );
     4804      curProfileTierLevel->setMax422chromaConstraintFlag     ( false );
     4805      curProfileTierLevel->setMax420chromaConstraintFlag     ( false );
     4806      curProfileTierLevel->setMaxMonochromeConstraintFlag    ( false );
     4807      curProfileTierLevel->setIntraConstraintFlag            ( false );
     4808      curProfileTierLevel->setOnePictureOnlyConstraintFlag   ( false );
     4809      curProfileTierLevel->setLowerBitRateConstraintFlag     ( false );   
     4810    }
     4811
     4812    if ( !curProfileTierLevel->getInbldPresentFlag() )
     4813    {
     4814      curProfileTierLevel->setInbldFlag( false );
     4815    }     
     4816  }
     4817}
     4818
     4819Void TComPTL::inferSubLayerValues(Int maxNumSubLayersMinus1, Int k, TComPTL* refPTL)
     4820{
     4821  assert( k == 0 || refPTL != NULL );
     4822
     4823  for (Int i = maxNumSubLayersMinus1; i >= 0; i--)
     4824  {
     4825    ProfileTierLevel* refProfileTierLevel;
     4826    if ( k != 0 )
     4827    {
     4828      refProfileTierLevel = refPTL->getSubLayerPTL( i );
     4829    }
     4830    else
     4831    {
     4832      if ( i == maxNumSubLayersMinus1)     
     4833      {
     4834        refProfileTierLevel = getGeneralPTL();
     4835      }
     4836      else
     4837      {
     4838        refProfileTierLevel = getSubLayerPTL( i + 1 );
     4839      }
     4840    }   
     4841
     4842    ProfileTierLevel* curProfileTierLevel = getSubLayerPTL( i );
     4843    if( !getSubLayerLevelPresentFlag( i ) )
     4844    {
     4845      curProfileTierLevel->setLevelIdc( refProfileTierLevel->getLevelIdc() );
     4846    }
     4847
     4848    if( !getSubLayerProfilePresentFlag( i ) )
     4849    {
     4850      curProfileTierLevel->copyProfile( refProfileTierLevel);
     4851    }
     4852    else
     4853    {
     4854      if ( !curProfileTierLevel->getV2ConstraintsPresentFlag() )
     4855      {
     4856        curProfileTierLevel->copyV2ConstraintFlags( refProfileTierLevel );
     4857      }
     4858
     4859      if ( !curProfileTierLevel->getInbldPresentFlag() )
     4860      {
     4861        curProfileTierLevel->setInbldFlag( refProfileTierLevel->getInbldFlag() );
     4862      }     
     4863    }     
     4864  }
     4865}
     4866
     4867#endif
    42314868#endif
    42324869//! \}
     
    42714908
    42724909  m_vpsVuiBspHrdPresentFlag = false;
     4910#if H_MV_HLS10_VPS_VUI_BSP
     4911  m_vpsVuiBspHrdParameters  = NULL;
     4912#else
    42734913  m_vpsVuiBspHrdParameters  = new TComVpsVuiBspHrdParameters();
     4914#endif
    42744915}
    42754916
     
    43144955    assert( getBitDepthVpsLumaMinus8          () == prevRepFormat->getBitDepthVpsLumaMinus8          () );
    43154956    assert( getBitDepthVpsChromaMinus8        () == prevRepFormat->getBitDepthVpsChromaMinus8        () );
    4316 }
    4317 }
    4318 
     4957  }
     4958}
     4959
     4960#if !H_MV_HLS10_VPS_VUI_BSP
    43194961Void TComVpsVuiBspHrdParameters::checkLayerInBspFlag( TComVPS* vps, Int h )
    43204962{
     
    43544996  // When num_bitstream_partitions[ h ] is equal to 1 for any value of h in the range 1 to vps_num_layer_set_minus1, inclusive,
    43554997  // the value of layer_in_bsp_flag[ h ][ 0 ][ j ] should be equal to 0 for at least one value of j in the range 0 to
    4356   // NumLayersInIdList[ h ] 1, inclusive.
     4998  // NumLayersInIdList[ h ] ? 1, inclusive.
    43574999
    43585000
     
    43695011 
    43705012  // For any value of h in the range 1 to vps_num_layer_set_minus1, inclusive, the value of layer_in_bsp_flag[ h ][ i ][ j ]
    4371   // shall be equal to 1 for at most one value of i in the range of 0 to num_bitstream_partitions[ h ] 1, inclusive.
     5013  // shall be equal to 1 for at most one value of i in the range of 0 to num_bitstream_partitions[ h ] ? 1, inclusive.
    43725014
    43735015  for ( Int j = 0; j <= vps->getNumLayersInIdList( h ) - 1; j++ )
     
    43955037  //  assert(  getBspCombSchedIdx(h, i, j ) <= vps->getHrdParameters( getBspCombHrdIdx( h, i, j ) )->getCpbCntMinus1( highestTid ) );
    43965038}
     5039#endif
     5040
     5041#if H_MV_HLS10_VPS_VUI_BSP
     5042
     5043TComVpsVuiBspHrdParameters::~TComVpsVuiBspHrdParameters()
     5044{
     5045  delete[] m_cprmsAddPresentFlag;
     5046  delete[] m_numSubLayerHrdMinus1;
     5047  delete[] m_hrdParameters;
     5048
     5049  for (Int h = 0; h < m_numOls; h++)
     5050  {
     5051    if ( h > 0 )
     5052    {   
     5053      for (Int i = 0; i < getNumSignalledPartitioningSchemes(h)+1; i++)
     5054      {
     5055        for (Int t = 0; t < m_vps->getMaxSubLayersInLayerSetMinus1( m_vps->olsIdxToLsIdx(h) ) + 1; t++)
     5056        {       
     5057          for ( Int j = 0; j <= getNumBspSchedulesMinus1(h,i,j);j++ )
     5058          {
     5059            delete[] m_bspHrdIdx  [h][i][t][j];
     5060            delete[] m_bspSchedIdx[h][i][t][j];
     5061          }
     5062        }
     5063        delete[] m_numBspSchedulesMinus1[h][i];
     5064      }
     5065    }
     5066
     5067    for (Int j = 0; j <= getNumSignalledPartitioningSchemes(h ) + 1; j++ )
     5068    {
     5069      for (Int k = 0; k <= getNumPartitionsInSchemeMinus1(h,j); k++ )
     5070      {
     5071        delete[] m_layerIncludedInPartitionFlag[h][j][k];
     5072      }       
     5073    }
     5074    delete[] m_numPartitionsInSchemeMinus1[h];       
     5075  }
     5076  delete[] m_numSignalledPartitioningSchemes;
     5077}
     5078
     5079
     5080Int TComVpsVuiBspHrdParameters::getBspHrdIdxLen(TComVPS* vps)
     5081{
     5082  return gCeilLog2( vps->getNumHrdParameters() + getVpsNumAddHrdParams() );
     5083}
     5084
     5085Void TComVpsVuiBspHrdParameters::createAfterVpsNumAddHrdParams( TComVPS* vps )
     5086{
     5087  assert( vps == NULL );
     5088  m_vps = vps;
     5089  m_offsetHrdParamIdx = vps->getNumHrdParameters();
     5090  m_numHrdParam       = vps->getNumHrdParameters() + getVpsNumAddHrdParams() - m_offsetHrdParamIdx;
     5091  m_numOls            = vps->getNumOutputLayerSets();
     5092
     5093  m_cprmsAddPresentFlag   = new Bool    [ m_numHrdParam ];
     5094  m_numSubLayerHrdMinus1  = new Int     [ m_numHrdParam ];
     5095  m_hrdParameters         = new TComHRD [ m_numHrdParam ];
     5096
     5097  m_numSignalledPartitioningSchemes = new Int    [ m_numOls ];
     5098  m_numPartitionsInSchemeMinus1     = new Int*   [ m_numOls ];
     5099  m_numBspSchedulesMinus1           = new Int**  [ m_numOls ];
     5100  m_bspHrdIdx                       = new Int****[ m_numOls ];
     5101  m_bspSchedIdx                     = new Int****[ m_numOls ];
     5102}
     5103
     5104Void TComVpsVuiBspHrdParameters::createAfterNumSignalledPartitioningSchemes( Int h )
     5105{
     5106  m_numPartitionsInSchemeMinus1 [h]    = new Int    [ getNumSignalledPartitioningSchemes(h) ];
     5107  m_layerIncludedInPartitionFlag[h]    = new Bool** [ getNumSignalledPartitioningSchemes(h) ];   
     5108
     5109  m_numBspSchedulesMinus1[h]           = new Int*   [ getNumSignalledPartitioningSchemes(h) + 1 ];
     5110  for (Int i = 0; i < getNumSignalledPartitioningSchemes(h) + 1; i++)
     5111  {
     5112    Int tMax = m_vps->getMaxSubLayersInLayerSetMinus1( m_vps->olsIdxToLsIdx(h) ) + 1;
     5113    m_numBspSchedulesMinus1[h][i] = new Int  [ tMax ];
     5114    m_bspHrdIdx            [h][i] = new Int**[ tMax ];
     5115    m_bspSchedIdx          [h][i] = new Int**[ tMax ];
     5116  }
     5117}
     5118
     5119Void TComVpsVuiBspHrdParameters::createAfterNumPartitionsInSchemeMinus1( Int h, Int j )
     5120{
     5121  m_layerIncludedInPartitionFlag[h][j] = new Bool*[ getNumPartitionsInSchemeMinus1(h,j)];
     5122  for( Int k = 0; k < getNumPartitionsInSchemeMinus1(h,j); k++ )
     5123  {
     5124    m_layerIncludedInPartitionFlag[h][j][k] = new Bool[ m_vps->getNumLayersInIdList( m_vps->olsIdxToLsIdx(h))];
     5125  }
     5126}
     5127
     5128Void TComVpsVuiBspHrdParameters::createAfterNumBspSchedulesMinus1( Int h, Int i, Int t )
     5129{
     5130  m_bspSchedIdx[h][i][t] = new Int* [ getNumBspSchedulesMinus1( h, i, t ) + 1 ];
     5131  m_bspHrdIdx  [h][i][t] = new Int* [ getNumBspSchedulesMinus1( h, i, t ) + 1 ];
     5132  for( Int j = 0; j < getNumBspSchedulesMinus1( h, i, t ) + 1; j++ )
     5133  {
     5134    m_bspSchedIdx[h][i][t][j] = new Int[ getNumPartitionsInSchemeMinus1( h, i ) ];
     5135    m_bspHrdIdx  [h][i][t][j] = new Int[ getNumPartitionsInSchemeMinus1( h, i ) ];
     5136  }
     5137}
     5138
     5139#endif
    43975140
    43985141Void TComVUI::inferVideoSignalInfo( TComVPS* vps, Int layerIdCurr )
     
    44305173      for (Int k = 0; k < MAX_NUM_LAYER_IDS; k++ )
    44315174      {
     5175#if H_MV_HLS10_ADD_LAYERSETS
     5176        m_maxVpsDecPicBufferingMinus1[i][k][j] = MIN_INT;
     5177#else
    44325178        m_maxVpsDecPicBufferingMinus1[i][k][j] = 0;
     5179#endif
    44335180      }
    44345181    }
  • trunk/source/Lib/TLibCommon/TComSlice.h

    r1039 r1066  
    1 /* The copyright in this software is being made available under the BSD
     1/* The copyright in this software is being made available under the BSD
    22 * License, included below. This software may be subject to other third party
    33 * and contributor rights, including patent rights, and no such rights are
     
    4545#include "TComRom.h"
    4646#include "TComList.h"
    47 
     47#if H_MV_HLS10_GEN_FIX
     48#if H_MV
     49#include <ios>
     50#include <iostream>
     51#include <iomanip>
     52#endif
     53#endif
    4854//! \ingroup TLibCommon
    4955//! \{
     
    201207  Bool m_frameOnlyConstraintFlag;
    202208 
     209#if H_MV_HLS10_PTL
     210#if H_MV
     211  Bool m_max12bitConstraintFlag;
     212  Bool m_max10bitConstraintFlag;
     213  Bool m_max8bitConstraintFlag;
     214  Bool m_max422chromaConstraintFlag;
     215  Bool m_max420chromaConstraintFlag;
     216  Bool m_maxMonochromeConstraintFlag;
     217  Bool m_intraConstraintFlag;
     218  Bool m_onePictureOnlyConstraintFlag;
     219  Bool m_lowerBitRateConstraintFlag;
     220  Bool m_inbldFlag;
     221#endif
     222#endif
    203223public:
    204224  ProfileTierLevel();
     
    230250  Bool getFrameOnlyConstraintFlag() const { return m_frameOnlyConstraintFlag; }
    231251  Void setFrameOnlyConstraintFlag(Bool b) { m_frameOnlyConstraintFlag = b; }
     252
     253#if H_MV
     254#if H_MV_HLS10_PTL
     255  Void setMax12bitConstraintFlag( Bool flag ) { m_max12bitConstraintFlag = flag; }
     256  Bool getMax12bitConstraintFlag(  ) { return m_max12bitConstraintFlag; }
     257 
     258  Void setMax10bitConstraintFlag( Bool flag ) { m_max10bitConstraintFlag = flag; }
     259  Bool getMax10bitConstraintFlag(  ) { return m_max10bitConstraintFlag; }
     260 
     261  Void setMax8bitConstraintFlag( Bool flag ) { m_max8bitConstraintFlag = flag; }
     262  Bool getMax8bitConstraintFlag(  ) { return m_max8bitConstraintFlag; }
     263 
     264  Void setMax422chromaConstraintFlag( Bool flag ) { m_max422chromaConstraintFlag = flag; }
     265  Bool getMax422chromaConstraintFlag(  ) { return m_max422chromaConstraintFlag; }
     266 
     267  Void setMax420chromaConstraintFlag( Bool flag ) { m_max420chromaConstraintFlag = flag; }
     268  Bool getMax420chromaConstraintFlag(  ) { return m_max420chromaConstraintFlag; }
     269 
     270  Void setMaxMonochromeConstraintFlag( Bool flag ) { m_maxMonochromeConstraintFlag = flag; }
     271  Bool getMaxMonochromeConstraintFlag(  ) { return m_maxMonochromeConstraintFlag; }
     272  Void setIntraConstraintFlag( Bool flag ) { m_intraConstraintFlag = flag; }
     273  Bool getIntraConstraintFlag(  ) { return m_intraConstraintFlag; }
     274 
     275  Void setOnePictureOnlyConstraintFlag( Bool flag ) { m_onePictureOnlyConstraintFlag = flag; }
     276  Bool getOnePictureOnlyConstraintFlag(  ) { return m_onePictureOnlyConstraintFlag; }
     277 
     278  Void setLowerBitRateConstraintFlag( Bool flag ) { m_lowerBitRateConstraintFlag = flag; }
     279  Bool getLowerBitRateConstraintFlag(  ) { return m_lowerBitRateConstraintFlag; }
     280 
     281  Void setInbldFlag( Bool flag ) { m_inbldFlag = flag; }
     282  Bool getInbldFlag(  ) { return m_inbldFlag; }
     283#endif
     284#if H_MV_HLS10_PTL_INFER_FIX
     285  Bool getV2ConstraintsPresentFlag(); 
     286  Bool getInbldPresentFlag();
     287  Void copyV2ConstraintFlags( ProfileTierLevel* ptlRef );
     288  Void copyProfile( ProfileTierLevel* ptlRef );
     289#endif
     290#endif
    232291};
    233292
     
    251310  ProfileTierLevel* getSubLayerPTL(Int i)  { return &m_subLayerPTL[i]; }
    252311#if H_MV
     312#if H_MV_HLS10_PTL_INFER_FIX
     313  Void inferGeneralValues ( Bool profilePresentFlag  , Int k, TComPTL* refPTL );;
     314  Void inferSubLayerValues( Int maxNumSubLayersMinus1, Int k, TComPTL* refPTL );;
     315#else
    253316  Void copyLevelFrom( TComPTL* source );
     317#endif
    254318#endif
    255319};
     
    359423  Void setCpbCntMinus1           ( Int layer, UInt value ) { m_HRD[layer].cpbCntMinus1 = value; }
    360424  UInt getCpbCntMinus1           ( Int layer            )  { return m_HRD[layer].cpbCntMinus1; }
    361 
     425 
    362426  Void setBitRateValueMinus1     ( Int layer, Int cpbcnt, Int nalOrVcl, UInt value ) { m_HRD[layer].bitRateValueMinus1[cpbcnt][nalOrVcl] = value; }
    363427  UInt getBitRateValueMinus1     ( Int layer, Int cpbcnt, Int nalOrVcl             ) { return m_HRD[layer].bitRateValueMinus1[cpbcnt][nalOrVcl];  }
     
    434498  Int  getMatrixCoeffsVps(  ) { return m_matrixCoeffsVps; }
    435499};
     500
    436501class TComVpsVuiBspHrdParameters
    437502{
     503#if H_MV_HLS10_VPS_VUI_BSP
     504
     505  /* Not yet tested */
     506private:
     507
     508  Int   m_vpsNumAddHrdParams;
     509  Bool* m_cprmsAddPresentFlag;
     510  TComHRD* m_hrdParameters;
     511  Int*  m_numSubLayerHrdMinus1;
     512  Int*  m_numSignalledPartitioningSchemes;
     513  Int** m_numPartitionsInSchemeMinus1;
     514
     515  Bool****  m_layerIncludedInPartitionFlag;
     516  Int***    m_numBspSchedulesMinus1;
     517  Int*****  m_bspHrdIdx;
     518  Int*****  m_bspSchedIdx;
     519   
     520  // Array sizes
     521  Int      m_offsetHrdParamIdx;
     522  Int      m_numHrdParam;
     523  Int      m_numOls;
     524  TComVPS* m_vps;
     525public:   
     526
     527  ~TComVpsVuiBspHrdParameters();
     528 
     529  Void createAfterVpsNumAddHrdParams( TComVPS* vps );
     530  Void createAfterNumSignalledPartitioningSchemes(Int h );
     531  Void createAfterNumPartitionsInSchemeMinus1(Int h, Int j);
     532  Void createAfterNumBspSchedulesMinus1( Int h, Int i, Int t);
     533
     534  Void setVpsNumAddHrdParams( Int  val ) { m_vpsNumAddHrdParams = val; }
     535  Int  getVpsNumAddHrdParams(  ) { return m_vpsNumAddHrdParams; }
     536 
     537  Void setCprmsAddPresentFlag( Int i, Bool flag ) { m_cprmsAddPresentFlag[i - m_offsetHrdParamIdx] = flag; }
     538  Bool getCprmsAddPresentFlag( Int i ) { return m_cprmsAddPresentFlag[i  - m_offsetHrdParamIdx]; }
     539 
     540  Void setNumSubLayerHrdMinus1( Int i, Int  val ) { m_numSubLayerHrdMinus1[i  - m_offsetHrdParamIdx] = val; }
     541  Int  getNumSubLayerHrdMinus1( Int i ) { return m_numSubLayerHrdMinus1[i  - m_offsetHrdParamIdx]; }
     542 
     543  Void setNumSignalledPartitioningSchemes( Int h, Int  val ) { m_numSignalledPartitioningSchemes[h] = val; }
     544  Int  getNumSignalledPartitioningSchemes( Int h ) { return m_numSignalledPartitioningSchemes[h]; }
     545 
     546  Void setNumPartitionsInSchemeMinus1( Int h, Int j, Int  val ) { m_numPartitionsInSchemeMinus1[h][j] = val; }
     547  Int  getNumPartitionsInSchemeMinus1( Int h, Int j ) { return m_numPartitionsInSchemeMinus1[h][j]; }
     548 
     549  Void setLayerIncludedInPartitionFlag( Int h, Int j, Int k, Int r, Bool flag ) { m_layerIncludedInPartitionFlag[h][j][k][r] = flag; }
     550  Bool getLayerIncludedInPartitionFlag( Int h, Int j, Int k, Int r ) { return m_layerIncludedInPartitionFlag[h][j][k][r]; }
     551 
     552  Void setNumBspSchedulesMinus1( Int h, Int i, Int t, Int  val ) { m_numBspSchedulesMinus1[h][i][t] = val; }
     553  Int  getNumBspSchedulesMinus1( Int h, Int i, Int t ) { return m_numBspSchedulesMinus1[h][i][t]; }
     554 
     555  Void setBspHrdIdx( Int h, Int i, Int t, Int j, Int k, Int  val ) { m_bspHrdIdx[h][i  - m_offsetHrdParamIdx][t][j][k] = val; }
     556  Int  getBspHrdIdx( Int h, Int i, Int t, Int j, Int k ) { return m_bspHrdIdx[h][i  - m_offsetHrdParamIdx][t][j][k]; }
     557 
     558  Int  getBspHrdIdxLen( TComVPS* vps );
     559
     560  Void setBspSchedIdx( Int h, Int i, Int t, Int j, Int k, Int  val ) { m_bspSchedIdx[h][i - m_offsetHrdParamIdx][t][j][k] = val; }
     561  Int  getBspSchedIdx( Int h, Int i, Int t, Int j, Int k ) { return m_bspSchedIdx[h][i - m_offsetHrdParamIdx][t][j][k]; }
     562
     563  Void setHrdParametermeters( Int k, TComHRD* val  ) {  *(m_hrdParameters + k ) = *val; };
     564  TComHRD* getHrdParametermeters( Int k ) {  return m_hrdParameters + k; };
     565#else
    438566private:
    439567  Int  m_vpsNumBspHrdParametersMinus1;
     
    475603  Void setHrdParametermeters( Int k, TComHRD* val  ) {  m_hrdParameters[k] = val; };
    476604  TComHRD* getHrdParametermeters( Int k ) {  return m_hrdParameters[k]; };
     605#endif
    477606};
    478607
     
    501630  Bool m_wppNotInUseFlag;
    502631  Bool m_wppInUseFlag                [MAX_NUM_LAYERS];
     632#if H_MV_HLS10_VPS_VUI
     633  Bool m_singleLayerForNonIrapFlag;
     634  Bool m_higherLayerIrapSkipFlag;
     635#endif
    503636  Bool m_ilpRestrictedRefLayersFlag;
    504637  Int  m_minSpatialSegmentOffsetPlus1[MAX_NUM_LAYERS][MAX_NUM_LAYERS];
     
    574707  Void setWppInUseFlag( Int i, Bool flag ) { m_wppInUseFlag[i] = flag; }
    575708  Bool getWppInUseFlag( Int i ) { return m_wppInUseFlag[i]; }
     709
     710#if H_MV_HLS10_VPS_VUI
     711  Void setSingleLayerForNonIrapFlag( Bool flag ) { m_singleLayerForNonIrapFlag = flag; }
     712  Bool getSingleLayerForNonIrapFlag(  ) { return m_singleLayerForNonIrapFlag; }
     713
     714  Void setHigherLayerIrapSkipFlag( Bool flag ) { m_higherLayerIrapSkipFlag = flag; }
     715  Bool getHigherLayerIrapSkipFlag(  ) { return m_higherLayerIrapSkipFlag; }
     716#endif
    576717
    577718  Void setIlpRestrictedRefLayersFlag( Bool flag ) { m_ilpRestrictedRefLayersFlag = flag; }
     
    609750  Int  m_bitDepthVpsLumaMinus8;
    610751  Int  m_bitDepthVpsChromaMinus8;
     752#if H_MV_HLS10_GEN_VSP_CONF_WIN
     753  Bool m_conformanceWindowVpsFlag;
     754  Int  m_confWinVpsLeftOffset;
     755  Int  m_confWinVpsRightOffset;
     756  Int  m_confWinVpsTopOffset;
     757  Int  m_confWinVpsBottomOffset;
     758#endif
    611759
    612760public:
     761
     762#if H_MV_HLS10_GEN_VSP_CONF_WIN
     763  TComRepFormat()
     764  {
     765  m_conformanceWindowVpsFlag = 0;
     766  m_confWinVpsLeftOffset     = 0;
     767  m_confWinVpsRightOffset    = 0;
     768  m_confWinVpsTopOffset      = 0;
     769  m_confWinVpsBottomOffset   = 0;
     770  }; 
     771#else
    613772  TComRepFormat() { }; 
     773#endif
    614774
    615775  Void setChromaAndBitDepthVpsPresentFlag( Bool flag ) { m_chromaAndBitDepthVpsPresentFlag = flag; }
     
    635795  Void setBitDepthVpsChromaMinus8( Int  val ) { m_bitDepthVpsChromaMinus8 = val; }
    636796  Int  getBitDepthVpsChromaMinus8(  ) { return m_bitDepthVpsChromaMinus8; }
     797
     798#if H_MV_HLS10_GEN_VSP_CONF_WIN
     799  Void setConformanceWindowVpsFlag( Bool flag ) { m_conformanceWindowVpsFlag = flag; }
     800  Bool getConformanceWindowVpsFlag(  ) { return m_conformanceWindowVpsFlag; }
     801
     802  Void setConfWinVpsLeftOffset( Int  val ) { m_confWinVpsLeftOffset = val; }
     803  Int  getConfWinVpsLeftOffset(  ) { return m_confWinVpsLeftOffset; }
     804
     805  Void setConfWinVpsRightOffset( Int  val ) { m_confWinVpsRightOffset = val; }
     806  Int  getConfWinVpsRightOffset(  ) { return m_confWinVpsRightOffset; }
     807
     808  Void setConfWinVpsTopOffset( Int  val ) { m_confWinVpsTopOffset = val; }
     809  Int  getConfWinVpsTopOffset(  ) { return m_confWinVpsTopOffset; }
     810
     811  Void setConfWinVpsBottomOffset( Int  val ) { m_confWinVpsBottomOffset = val; }
     812  Int  getConfWinVpsBottomOffset(  ) { return m_confWinVpsBottomOffset; }
     813#endif
    637814};
    638815
     
    657834
    658835  Void setMaxVpsDecPicBufferingMinus1( Int i, Int k, Int j, Int  val ) { m_maxVpsDecPicBufferingMinus1[i][k][j] = val; }
     836  #if H_MV_HLS10_ADD_LAYERSETS
     837  Int  getMaxVpsDecPicBufferingMinus1( Int i, Int k, Int j ) { assert( m_maxVpsDecPicBufferingMinus1[i][k][j] >= 0 ); return m_maxVpsDecPicBufferingMinus1[i][k][j]; }     
     838  #else
    659839  Int  getMaxVpsDecPicBufferingMinus1( Int i, Int k, Int j ) { return m_maxVpsDecPicBufferingMinus1[i][k][j]; }
     840  #endif
    660841
    661842  Void setMaxVpsNumReorderPics( Int i, Int j, Int  val ) { m_maxVpsNumReorderPics[i][j] = val; }
     
    672853#if H_MV
    673854  Bool        m_vpsBaseLayerInternalFlag;
     855#if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL
     856  Bool        m_vpsBaseLayerAvailableFlag;
     857#endif // H_MV_HLS10_GEN
    674858#endif
    675859
     
    741925  Int         m_layerSetIdxForOlsMinus1  [MAX_VPS_OUTPUTLAYER_SETS]; 
    742926  Bool        m_outputLayerFlag          [MAX_VPS_OUTPUTLAYER_SETS][MAX_VPS_NUH_LAYER_ID_PLUS1];
     927#if H_MV_HLS10_PTL
     928  Int         m_profileTierLevelIdx      [MAX_VPS_OUTPUTLAYER_SETS ][MAX_NUM_LAYERS];
     929#else 
    743930  Int         m_profileLevelTierIdx      [MAX_VPS_OUTPUTLAYER_SETS ];
     931#endif
    744932  Bool        m_altOutputLayerFlag       [MAX_VPS_OUTPUTLAYER_SETS];
    745933  Bool        m_repFormatIdxPresentFlag;
     
    770958  // VPS EXTENSION SEMANTICS VARIABLES
    771959  Int         m_layerIdInVps             [MAX_NUM_LAYERS   ];
     960#if H_MV_HLS10_REF_PRED_LAYERS
     961  Int         m_dependencyFlag           [MAX_NUM_LAYERS][MAX_NUM_LAYERS];
     962#endif
    772963
    773964  Int         m_numDirectRefLayers       [MAX_NUM_LAYERS];
     965#if H_MV_HLS10_REF_PRED_LAYERS
     966  Int         m_idDirectRefLayer         [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 
     967#else
    774968  Int         m_refLayerId               [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 
     969#endif
    775970
    776971  Int         m_numRefLayers             [MAX_NUM_LAYER_IDS];
    777   Int         m_numPredictedLayers       [MAX_NUM_LAYERS];
     972#if H_MV_HLS10_REF_PRED_LAYERS
     973  Int         m_idRefLayer               [MAX_NUM_LAYERS][MAX_NUM_LAYERS]; 
     974#endif
     975
     976
     977  Int         m_numPredictedLayers       [MAX_NUM_LAYERS ];
     978#if !H_MV_HLS10_REF_PRED_LAYERS
    778979  Int         m_predictedLayerId         [MAX_NUM_LAYERS][MAX_NUM_LAYER_IDS];
     980#else
     981  Int         m_idPredictedLayer         [MAX_NUM_LAYERS][MAX_NUM_LAYER_IDS];
     982#endif
    779983  Int         m_numIndependentLayers;
    780984  Int         m_numLayersInTreePartition [MAX_NUM_LAYER_IDS];
    781985  Int         m_treePartitionLayerIdList [MAX_NUM_LAYERS][MAX_NUM_LAYER_IDS];
     986#if H_MV_HLS10_REF_PRED_LAYERS
    782987  Bool        m_recursiveRefLayerFlag    [MAX_NUM_LAYER_IDS][MAX_NUM_LAYER_IDS];
    783 
     988  #endif
    784989  Int         m_viewIndex                [MAX_NUM_LAYERS   ];
    785990 
     
    788993  std::vector< std::vector< Int> >       m_layerSetLayerIdList;
    789994
     995#if H_MV_HLS10_NESSECARY_LAYER
     996  Int        m_numNecessaryLayers        [MAX_VPS_OUTPUTLAYER_SETS];
     997  Bool       m_necessaryLayerFlag        [MAX_VPS_OUTPUTLAYER_SETS][MAX_NUM_LAYERS];
     998#endif
    790999
    7911000  Int         xGetDimBitOffset( Int j );
     1001#if H_MV_HLS10_REF_PRED_LAYERS
    7921002  Void        xSetRefLayerFlags( Int currLayerId );
     1003#endif
    7931004  // VPS EXTENSION 2 SYNTAX ELEMENTS
    7941005#if H_3D_ARP
     
    8701081  Void    setVpsBaseLayerInternalFlag( Bool flag ) { m_vpsBaseLayerInternalFlag = flag; }
    8711082  Bool    getVpsBaseLayerInternalFlag(  )          { return m_vpsBaseLayerInternalFlag; }
     1083#if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL
     1084  Void    setVpsBaseLayerAvailableFlag( Bool flag ) { m_vpsBaseLayerAvailableFlag = flag; }
     1085  Bool    getVpsBaseLayerAvailableFlag(  )          { return m_vpsBaseLayerAvailableFlag; }
     1086#endif
    8721087#endif
    8731088
     
    8771092#if H_MV   
    8781093  UInt    getMaxSubLayersMinus1()             { return m_uiMaxTLayers - 1;  }  // For consistency with draft spec
     1094#if H_MV_HLS10_GEN_FIX
     1095  Void    setMaxSubLayersMinus1(UInt val)     { m_uiMaxTLayers = (val + 1); };
     1096#endif
    8791097  UInt    getMaxLayersMinus1()                { return m_uiMaxLayersMinus1;  };
    8801098  Void    setMaxLayersMinus1(UInt l)          { m_uiMaxLayersMinus1 = l; }
     
    9161134
    9171135#if H_MV
     1136#if H_MV_HLS10_PTL
     1137  TComPTL* getPTL( Int idx = 0 ) { return &m_pcPTL[idx]; }
     1138#else
    9181139  TComPTL* getPTL( Int layerSet = 0 ) { return &m_pcPTL[layerSet]; }
     1140#endif
    9191141#else
    9201142  TComPTL* getPTL() { return &m_pcPTL; }
     
    9961218  Void    setLayerSetIdxForOlsMinus1( Int outLayerSetIdx, Int val )        { m_layerSetIdxForOlsMinus1[ outLayerSetIdx ]  = val; }
    9971219  Int     getLayerSetIdxForOlsMinus1( Int outLayerSetIdx )                 { return m_layerSetIdxForOlsMinus1[ outLayerSetIdx ]; }
     1220#if VPS_MISC_UPDATES
     1221  Int     getLayerSetIdxForOlsMinus1Len( Int outLayerSetIdx )              { return gCeilLog2( getNumLayerSets() ); }
     1222#endif
    9981223
    9991224  Void    setOutputLayerFlag( Int outLayerSetIdx, Int i, Bool flag )       { m_outputLayerFlag[ outLayerSetIdx ][ i ] = flag; }
     
    10021227  Bool    inferOutputLayerFlag( Int i, Int j );
    10031228
     1229#if H_MV_HLS10_PTL
     1230  Void    setProfileTierLevelIdx( Int i, Int j, Int val )                  { m_profileTierLevelIdx[ i ][ j ] = val; }
     1231  Int     getProfileTierLevelIdx( Int i, Int j )                           { return m_profileTierLevelIdx[ i ][ j ]; }
     1232#if H_MV_HLS10_PTL_FIX
     1233  Int     inferProfileTierLevelIdx( Int i, Int j );
     1234#endif
     1235#else
    10041236  Void    setProfileLevelTierIdx( Int outLayerSetIdx, Int val )            { m_profileLevelTierIdx[ outLayerSetIdx ] = val; }
    10051237  Int     getProfileLevelTierIdx( Int outLayerSetIdx )                     { return m_profileLevelTierIdx[ outLayerSetIdx ]; }
     1238#endif
    10061239 
    10071240  Void    setAltOutputLayerFlag( Int i, Bool flag )                        { m_altOutputLayerFlag[i] = flag; }
     
    10331266  TComDpbSize* getDpbSize( )                                               { return m_dpbSize;}
    10341267 
     1268#if !H_MV_HLS10_ADD_LAYERSETS 
    10351269  Void    inferDbpSizeLayerSetZero( TComSPS* sps, Bool encoder );
    1036  
     1270#endif
     1271
    10371272  Void    setPocLsbNotPresentFlag( Int i, Bool flag )                      { m_pocLsbNotPresentFlag[i] = flag; }
    10381273  Bool    getPocLsbNotPresentFlag( Int i )                                 { return m_pocLsbNotPresentFlag[i]; }
     
    10641299
    10651300  Int     getViewIndex    ( Int layerIdInNuh )                             { return getScalabilityId( getLayerIdInVps(layerIdInNuh), VIEW_ORDER_INDEX  ); }   
     1301#if H_MV_HLS10_AUX
     1302  Int     getAuxId        ( Int layerIdInNuh )                             { return getScalabilityId( getLayerIdInVps(layerIdInNuh), AUX_ID  ); }   
     1303  Int     getDependencyId ( Int layerIdInNuh )                             { return getScalabilityId( getLayerIdInVps(layerIdInNuh), DEPENDENCY_ID  ); }   
     1304#endif
    10661305  Int     getNumViews();
    10671306
     1307#if H_MV_HLS10_REF_PRED_LAYERS
     1308  Bool    getDependencyFlag( Int i, Int j )                                { return m_dependencyFlag[i][j]; }
     1309#endif
    10681310  Int     getNumDirectRefLayers( Int layerIdInNuh )                        { return m_numDirectRefLayers[ layerIdInNuh ];  };                               
     1311#if !H_MV_HLS10_REF_PRED_LAYERS
    10691312  Int     getRefLayerId        ( Int layerIdInNuh, Int idx );;
    1070 
     1313#endif
    10711314  Int     getNumRefLayers            ( Int i )        { return m_numRefLayers[i]; }
    10721315  Int     getNumPredictedLayers      ( Int i )        { return m_numPredictedLayers[i]; }
     1316
     1317#if !H_MV_HLS10_REF_PRED_LAYERS 
    10731318  Int     getPredictedLayerId        ( Int i, Int j ) { return m_predictedLayerId[i][j]; }
     1319#else
     1320  Int     getIdRefLayer              ( Int i, Int j ) { assert( j >= 0 && j < getNumRefLayers      ( i )); return m_idRefLayer      [i][j]; }
     1321  Int     getIdPredictedLayer        ( Int i, Int j ) { assert( j >= 0 && j < getNumPredictedLayers( i )); return m_idPredictedLayer[i][j]; }
     1322  Int     getIdDirectRefLayer        ( Int i, Int j ) { assert( j >= 0 && j < getNumDirectRefLayers( i )); return m_idDirectRefLayer[i][j]; }
     1323#endif
    10741324  Int     getNumIndependentLayers    (  )             { return m_numIndependentLayers; }
    10751325  Int     getNumLayersInTreePartition( Int i )        { return m_numLayersInTreePartition[i]; }
     
    10781328  Int     getNumLayerSets( )                                               { return getVpsNumLayerSetsMinus1() + 1 + getNumAddLayerSets();  }; 
    10791329 
     1330#if H_MV_HLS10_ADD_LAYERSETS
     1331  Int     getFirstAddLayerSetIdx()                    { return getVpsNumLayerSetsMinus1() + 1; }
     1332  Int     getLastAddLayerSetIdx()                     { return getFirstAddLayerSetIdx() + getNumAddLayerSets() - 1; }
     1333#endif
    10801334  Bool    checkVPSExtensionSyntax();
    10811335  Int     scalTypeToScalIdx   ( ScalabilityType scalType );
    10821336
     1337#if H_MV_HLS10_PTL
     1338  Int     getProfileTierLevelIdxLen()                                      { return gCeilLog2( getVpsNumProfileTierLevelMinus1() + 1 ); };       
     1339#else
    10831340  Int     getProfileLevelTierIdxLen()                                      { return gCeilLog2( getVpsNumProfileTierLevelMinus1() + 1 ); };       
     1341#endif
    10841342  Int     getVpsRepFormatIdxLen()                                          { return gCeilLog2( getVpsNumRepFormatsMinus1() + 1 ); };       
    10851343
     
    10921350  Void    deriveLayerSetLayerIdList();
    10931351
     1352#if H_MV_HLS10_ADD_LAYERSETS
     1353  Int     olsIdxToLsIdx( Int i )                                           { return ( i < getNumLayerSets() ) ? i  : getLayerSetIdxForOlsMinus1( i ) + 1 ; };
     1354#else
    10941355  Int     olsIdxToLsIdx( Int i )                                           { return ( i <= getVpsNumLayerSetsMinus1() ) ? i  : getLayerSetIdxForOlsMinus1( i ) + 1 ; };
    1095 
     1356#endif
    10961357  Void    initTargetLayerIdLists  ( );
    10971358  Void    deriveTargetLayerIdList ( Int i );
    1098 
    10991359  std::vector<Int> getTargetDecLayerIdList( Int targetDecLayerSetIdx )     { return m_targetDecLayerIdLists[targetDecLayerSetIdx]; };
    11001360  std::vector<Int> getTargetOptLayerIdList( Int targetOptLayerSetIdx )     { return m_targetOptLayerIdLists[targetOptLayerSetIdx]; };
     
    11031363  Int     getOlsHighestOutputLayerId( Int i )                              { return getTargetOptLayerIdList( i ).back(); }; 
    11041364
     1365#if H_MV_HLS10_ADD_LAYERSETS
     1366  Void    deriveAddLayerSetLayerIdList( Int i );
     1367#endif
     1368#if H_MV_HLS10_NESSECARY_LAYER
     1369  Void    deriveNecessaryLayerFlags( Int olsIdx );;
     1370  Int     getNecessaryLayerFlag( Int i, Int j )                            { AOF( i >= 0 && i < getNumOutputLayerSets() ); AOF( j >= 0 && j < getNumLayersInIdList( olsIdxToLsIdx( i ) )  );  return m_necessaryLayerFlag[i][j]; }; 
     1371#endif
     1372
    11051373  Int     getMaxSubLayersInLayerSetMinus1( Int i );
    11061374  Int     getHighestLayerIdxPlus1Len( Int j )                                   { return gCeilLog2( getNumLayersInTreePartition( j ) + 1 );   };
    1107 
    1108   Bool     getAltOutputLayerFlagVar( Int i );;
     1375  Bool    getAltOutputLayerFlagVar( Int i );;
    11091376
    11101377  // inference
     
    11131380
    11141381  // helpers
     1382#if !H_MV_HLS10_REF_PRED_LAYERS
    11151383  Bool    getInDirectDependencyFlag( Int depLayeridInVps, Int refLayeridInVps, Int depth = 0 );
     1384#endif
     1385#if !H_MV_HLS10_MAXNUMPICS
    11161386  Int     getMaxNumPics( Int layerId );
     1387#endif
     1388#if H_MV_HLS10_ADD_LAYERSETS
     1389  Void    printPTL();
     1390  Void    printLayerDependencies();
     1391#if H_MV_HLS10_AUX
     1392  Void    printScalabilityId();;
     1393#endif
     1394  Void    printLayerSets();;
     1395
     1396
     1397
     1398  template <typename T, typename S, typename U> Void xPrintArray( const Char* name, Int numElemDim1, U idx, S numElemDim2, T vec, Bool printNumber, Bool printIdx = true )
     1399  {
     1400    std::cout << std::endl;
     1401    for (Int j = 0; j < numElemDim1; j++ )
     1402    {
     1403      std::cout << std::right << std::setw(27) << name;
     1404      if (printIdx)
     1405      {
     1406        std::cout << "[" << std::right << std::setw(3) << idx[ j ] << "]" ;
     1407      }
     1408      else
     1409      {
     1410        std::cout << std::right << std::setw(5) << " ";
     1411      }
     1412     
     1413      if ( printNumber )
     1414      {
     1415        std::cout << " (" << std::right << std::setw(3) << numElemDim2[j] << ")";       
     1416      }         
     1417      else
     1418      {
     1419       std::cout << std::right << std::setw(6) << " ";             
     1420      }
     1421
     1422      std::cout << ":";
     1423      for (Int i = 0; i < numElemDim2[j]; i++)
     1424      {
     1425        std::cout << std::right << std::setw(3) << vec[j][i];
     1426      }   
     1427      std::cout << std::endl;
     1428    }
     1429  }
     1430
     1431  template <typename T> Void xPrintArray( const char* name, Int numElem, T vec, Bool printNumber  )
     1432  {
     1433    std::vector<Int> numElemDim2(1, numElem);   
     1434    std::vector<T>   vec2       (1,  vec    );
     1435    std::vector<Int> idx2       (0);
     1436    xPrintArray( name, 1, idx2, numElemDim2, vec2, printNumber, false );
     1437  }
     1438#endif
     1439
    11171440
    11181441  /// VPS EXTENSION 2 SYNTAX ELEMENTS
     
    15571880  TComVPS*    m_pcVPS;
    15581881  // SPS
     1882#if H_MV_HLS10_MULTILAYERSPS
     1883  Int         m_spsMaxSubLayersMinus1;
     1884  Int         m_spsExtOrMaxSubLayersMinus1;
     1885#endif
    15591886  Bool        m_spsExtensionPresentFlag;
    15601887
     
    15741901  // SPS Extension
    15751902  Bool        m_interViewMvVertConstraintFlag;
     1903#if !H_MV_HLS10_PPS
    15761904  Int         m_numScaledRefLayerOffsets;
    15771905  Int         m_scaledRefLayerId          [MAX_NUM_SCALED_REF_LAYERS];
     
    15801908  Int         m_scaledRefLayerRightOffset [MAX_NUM_LAYERS];
    15811909  Int         m_scaledRefLayerBottomOffset[MAX_NUM_LAYERS];
     1910#endif
    15821911#endif
    15831912#if H_3D
     
    16832012#if H_MV
    16842013  UInt      getSpsMaxSubLayersMinus1()                { return ( m_uiMaxTLayers - 1); }
     2014#if H_MV_HLS10_MULTILAYERSPS
     2015  Void      setSpsMaxSubLayersMinus1( UInt val )       { setMaxTLayers( val + 1 ); }
     2016#endif
    16852017#endif
    16862018
     
    17152047  TComPTL* getPTL()     { return &m_pcPTL; }
    17162048#if H_MV
     2049#if H_MV_HLS10_MULTILAYERSPS
     2050  Void setSpsExtOrMaxSubLayersMinus1( Int  val ) { m_spsExtOrMaxSubLayersMinus1 = val; }
     2051  Int  getSpsExtOrMaxSubLayersMinus1(  ) { return m_spsExtOrMaxSubLayersMinus1; }
     2052  Void inferSpsMaxSubLayersMinus1( Bool atPsActivation, TComVPS* vps  );
     2053
     2054  Bool getMultiLayerExtSpsFlag()            { return ( getLayerId() != 0  &&  getSpsExtOrMaxSubLayersMinus1() == 7 ); }
     2055#endif
    17172056  Void inferSpsMaxDecPicBufferingMinus1( TComVPS* vps, Int targetOptLayerSetIdx, Int currLayerId, Bool encoder );
    17182057
     
    17532092  Bool getInterViewMvVertConstraintFlag()         { return m_interViewMvVertConstraintFlag;}
    17542093
     2094#if !H_MV_HLS10_PPS
    17552095  Void setNumScaledRefLayerOffsets( Int  val )    { m_numScaledRefLayerOffsets = val; }
    17562096  Int  getNumScaledRefLayerOffsets(  )            { return m_numScaledRefLayerOffsets; }
     
    17702110  Void setScaledRefLayerBottomOffset( Int j, Int  val ) { m_scaledRefLayerBottomOffset[j] = val; }
    17712111  Int  getScaledRefLayerBottomOffset( Int j )           { return m_scaledRefLayerBottomOffset[j]; }
     2112#endif
    17722113  // Inference
     2114
    17732115  Void inferRepFormat( TComVPS* vps, Int layerIdCurr );
    17742116  Void inferScalingList( TComSPS* spsSrc );
     
    21952537
    21962538  Bool       m_enableTMVPFlag;
     2539#if I0044_SLICE_TMVP
     2540  Bool       m_availableForTMVPRefFlag;
     2541#endif
     2542
    21972543#if H_MV
    21982544  std::vector<TComPic*>* m_refPicSetInterLayer0;
     
    22552601#if MTK_SINGLE_DEPTH_MODE_I0095
    22562602  Bool      m_bApplySingleDepthMode;
     2603#endif
     2604#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     2605  Int *m_aICEnableCandidate;
     2606  Int *m_aICEnableNum;
    22572607#endif
    22582608public:
     
    25272877  Void      setEnableTMVPFlag     ( Bool   b )    { m_enableTMVPFlag = b; }
    25282878  Bool      getEnableTMVPFlag     ()              { return m_enableTMVPFlag;}
     2879#if I0044_SLICE_TMVP
     2880  Void      setAvailableForTMVPRefFlag     ( Bool   b )    { m_availableForTMVPRefFlag = b; }
     2881  Bool      getAvailableForTMVPRefFlag     ()              { return m_availableForTMVPRefFlag;}
     2882#endif
    25292883
    25302884#if H_MV
     
    25672921#endif
    25682922#endif
     2923#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     2924  Void    setICEnableCandidate( Int* ICEnableCandidate)   { m_aICEnableCandidate = ICEnableCandidate; };
     2925  Void    setICEnableNum( Int* ICEnableNum)   { m_aICEnableNum = ICEnableNum; };
     2926  Void    setICEnableCandidate( UInt layer, Int value)   { m_aICEnableCandidate[ layer ] = value; };
     2927  Void    setICEnableNum( UInt layer, Int value)   { m_aICEnableNum[ layer ] = value; };
     2928
     2929  Int    getICEnableCandidate( Int layer){ return  m_aICEnableCandidate[ layer ]; };
     2930  Int    getICEnableNum( Int layer){ return m_aICEnableNum[ layer ]; };
     2931#endif
    25692932#if H_MV
    25702933// Additional slice header syntax elements
  • trunk/source/Lib/TLibCommon/TypeDef.h

    r1039 r1066  
    123123                                              // SEC_IC_ARP_SIG_G0072, Disabling IC when ARP is enabled, option 1 in JCT3V-G0072, part 2 in JCT3V-G0121
    124124                                              // MTK_LOW_LATENCY_IC_ENCODING_H0086  Low-latency IC encoding in JCT3V-H0086
     125
     126#define MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX  1  // Remove the global variables used in JCT3V-H0086
     127
    125128
    126129#define SEC_IC_NEIGHBOR_CLIP_I0080        1   // Clipping of neighboring sample position, JCT3V-I0080
     
    225228#endif
    226229
     230#define H_3D_FIX_UNINIT                   1   // Fix uninitialized flag
    227231#define H_3D_INTER_SDC                    1   // INTER SDC, Inter simplified depth coding
    228232                                              // LGE_INTER_SDC_E0156 Enable inter SDC for depth coding
     
    251255
    252256#define H_3D_FCO                          0   // Flexible coding order for 3D
     257#if H_3D_FCO
     258#define LGE_FCO_I0116                     1
     259#endif
    253260
    254261#define SCU_HS_FAST_INTRA_SDC_I0123       1
     
    275282#define SEC_HLS_CLEANUP_I0100             1
    276283
     284#define H_3D_FIX_64BIT_SHIFT              1
    277285#endif // H_3D
    278286
     
    300308#define H_3D_VSO_RM_ASSERTIONS            0   // Output VSO assertions
    301309#define H_3D_VSO_SYNTH_DIST_OUT           0   // Output of synthesized view distortion instead of depth distortion in encoder output
    302 #define H_3D_VSO_FIX                      0   // This fix should be enabled after verification
     310#define H_3D_VSO_FIX                      1   // This fix should be enabled after verification
    303311#endif
    304312
     
    381389/////////////////////////////////////////////////////////////////////////////////
    382390// TBD: Check if integration is necessary.
     391
     392
     393
     394//Added by Qualcomm for HLS
     395#define DISCARDABLE_PIC_RPS              1      ///< JCT3V-G0131: Inter-layer RPS and temporal RPS should not contain picture with discardable_flag equal to 1
     396#define VPS_MISC_UPDATES                 1      ///< Misc updates:JCT3V-0240,
     397#define NON_REF_NAL_TYPE_DISCARDABLE     1      ///< JCT3V-G0031: If discardable picture is a non-IRAP, it must be a non-referenced sub-layer picture
     398#define INFERENCE_POC_MSB_VAL_PRESENT    1      ///< JCT3V-H0042: poc_msb_val_present_flag shall be equal to 0 when slice_header_extension_length is (inferred to be ) equal to 0
     399#define INFERENCE_POC_RESET_INFO_PRESENT 1      ///< JCT3V-H0042: Infer the value of poc_reset_info_present_flag to be equal to 0 when no pps extension / pps extension for multilayer.
     400#define I0044_SLICE_TMVP                 1      ///< JCT3V-I0044: Regarding slice_temporal_mvp_enabled_flag
     401#define I0045_BR_PR_ADD_LAYER_SET        1      ///< JCT3V-I0045: Signalling of bit-rate and picture rate for additional layer set
     402#define I0045_VPS_VUI_VST_PARAMS         1      ///< JCT3V-I0045: Related to signalling of VST parameters of the base layer.
     403
     404
     405#define H_MV_HLS10_GEN                       0  // General changes (not tested)
     406
     407#define H_MV_HLS10_AUX                       1 // Auxiliary pictures
     408#define H_MV_HLS10_GEN_FIX                   1
     409#define H_MV_FIX_LOOP_GOPSIZE                1
     410#define H_MV_FIX_SUB_LAYERS_MAX_MINUS1       1
     411
     412#define H_MV_HLS10_GEN_VSP_CONF_WIN          1  // VPS conformance window
     413#define H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL  1  // vps_base_layer_available
     414#define H_MV_HLS10_REF_PRED_LAYERS           1  // reference and predicted layer derivation
     415#define H_MV_HLS10_NESSECARY_LAYER           1  // necessary layers
     416#define H_MV_HLS10_ADD_LAYERSETS             1  // additional layer sets
     417#define H_MV_HLS10_DBP_SIZE                  1  // dpb size syntax structure
     418#define H_MV_HLS10_MAXNUMPICS                1  // constraint on number of pictures in rps 
     419#define H_MV_HLS10_PTL                       1  // profile tier level
     420#define H_MV_HLS10_PTL_FIX                   1  // profile tier level fix
     421#define H_MV_HLS10_PTL_INBL_FIX              1  // profile tier level fix
     422#define H_MV_HLS10_PTL_INFER_FIX             1  // fix inference ptl
     423#define H_MV_HLS10_MULTILAYERSPS             1  // multilayer SPS extension
     424#define H_MV_HLS10_VPS_VUI                   1  // vsp vui
     425#define H_MV_HLS10_VPS_VUI_BSP               1  // vsp vui bsp
     426#define H_MV_HLS10_PPS                       1  // PPS modifications
     427
     428#define H_MV_HLS10_VPS_VUI_BSP_STORE         0  // Currently bsp vui bsp hrd parameters are not stored, some dynamic memory allocation with upper bounds is required.
     429
     430
    383431#define H_MV_HLS7_GEN                        0  // General changes (not tested)
     432
    384433
    385434// POC
     
    457506#define MAX_NESTING_NUM_LAYER       64
    458507
     508#if H_MV_HLS10_VPS_VUI_BSP
     509#define MAX_VPS_NUM_HRD_PARAMETERS                1024
     510#define MAX_NUM_SUB_LAYERS                        7
     511#define MAX_NUM_SIGNALLED_PARTITIONING_SCHEMES    16
     512#else
    459513#define MAX_VPS_NUM_HRD_PARAMETERS                1
     514#endif
     515
    460516#define MAX_VPS_OP_SETS_PLUS1                     1024
    461517#if H_MV
     518#if H_MV_HLS10_ADD_LAYERSETS
     519#define MAX_VPS_NUM_ADD_LAYER_SETS                1024
     520#endif
    462521#define MAX_VPS_NUH_LAYER_ID_PLUS1  63
    463522#define MAX_NUM_SCALABILITY_TYPES   16
     
    474533#define MAX_VPS_PROFILE_TIER_LEVEL      64
    475534#define MAX_VPS_ADD_OUTPUT_LAYER_SETS   1024
     535#if H_MV_HLS10_ADD_LAYERSETS
     536#define MAX_VPS_OUTPUTLAYER_SETS        ( MAX_VPS_ADD_OUTPUT_LAYER_SETS + MAX_VPS_OP_SETS_PLUS1 + MAX_VPS_OP_SETS_PLUS1 )
     537#else
    476538#define MAX_VPS_OUTPUTLAYER_SETS        ( MAX_VPS_ADD_OUTPUT_LAYER_SETS + MAX_VPS_OP_SETS_PLUS1 )
     539#endif
    477540#define  MAX_NUM_VIDEO_SIGNAL_INFO      16
    478541#define MAX_NUM_SCALED_REF_LAYERS       MAX_NUM_LAYERS-1
     542#if !H_MV_HLS10_VPS_VUI_BSP
    479543#define MAX_NUM_BSP_HRD_PARAMETERS      100 ///< Maximum value is actually not specified
    480544#define MAX_NUM_BITSTREAM_PARTITIONS    100 ///< Maximum value is actually not specified
    481545#define MAX_NUM_BSP_SCHED_COMBINATION   100 ///< Maximum value is actually not specified
    482546#define MAX_SUB_STREAMS                 1024
     547#endif
    483548#else
    484549#define MAX_NUM_LAYER_IDS                64
     
    9511016    MAINSTILLPICTURE = 3,
    9521017#if H_MV
     1018#if H_MV_HLS10_PTL
     1019    MULTIVIEWMAIN = 6,
     1020#if H_3D
     1021    MAIN3D = 8,
     1022#endif
     1023#else
    9531024    MAINSTEREO = 4,
    9541025    MAINMULTIVIEW = 5,
    9551026#if H_3D
    9561027    MAIN3D = 6,
     1028#endif
    9571029#endif
    9581030#endif
     
    9971069#endif   
    9981070    VIEW_ORDER_INDEX  = 1,
     1071#if H_MV_HLS10_AUX
     1072    DEPENDENCY_ID = 2,
     1073    AUX_ID = 3,
     1074#endif   
    9991075  };
    10001076#endif
  • trunk/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r1039 r1066  
    5353  }
    5454  // To avoid mismatches
     55#if H_MV_HLS10_GEN_FIX
     56  fprintf( g_hTrace, "=========== Sequence Parameter Set LayerId: %d ===========\n", pSPS->getLayerId() );
     57#else
    5558  fprintf( g_hTrace, "=========== Sequence Parameter Set ===========\n" );
     59#endif
    5660#else
    5761  fprintf( g_hTrace, "=========== Sequence Parameter Set ID: %d ===========\n", pSPS->getSPSId() );
     
    6670    return;
    6771  }
     72#if H_MV_HLS10_GEN_FIX
     73  fprintf( g_hTrace, "=========== Picture Parameter Set LayerId: %d ===========\n", pPPS->getLayerId() );
     74#else
    6875  fprintf( g_hTrace, "=========== Picture Parameter Set ===========\n" );
     76#endif
    6977#else
    7078  fprintf( g_hTrace, "=========== Picture Parameter Set ID: %d ===========\n", pPPS->getPPSId() );
     
    334342    }
    335343  }
     344#if !H_MV_HLS10_PPS
    336345#if H_MV
    337346  if ( pcPPS->getLayerId() > 0 )
     
    347356  { 
    348357#endif
     358#endif
    349359  READ_FLAG( uiCode, "pps_scaling_list_data_present_flag" );           pcPPS->setScalingListPresentFlag( uiCode ? true : false );
    350360  if(pcPPS->getScalingListPresentFlag ())
     
    352362    parseScalingList( pcPPS->getScalingList() );
    353363  }
    354 #if H_MV
    355   }
    356 #endif
    357 
     364#if !H_MV_HLS10_PPS
     365#if H_MV
     366  }
     367#endif
     368#endif
    358369  READ_FLAG( uiCode, "lists_modification_present_flag");
    359370  pcPPS->setListsModificationPresentFlag(uiCode);
     
    389400    if ( pcPPS->getPpsMultilayerExtensionFlag() )
    390401    {
     402#if H_MV_HLS10_PPS
     403      parsePPSMultilayerExtension( pcPPS );
     404#else
    391405      READ_FLAG( uiCode, "poc_reset_info_present_flag" ); pcPPS->setPocResetInfoPresentFlag( uiCode == 1 );
    392406      READ_FLAG( uiCode, "pps_extension_reserved_zero_flag" );
     407#endif
    393408    }
    394409#if !H_3D
     
    415430  }
    416431}
     432
    417433
    418434#if H_3D
     
    759775  UInt  uiCode;
    760776  READ_CODE( 4,  uiCode, "sps_video_parameter_set_id");          pcSPS->setVPSId        ( uiCode );
     777
    761778#if H_MV
    762779  if ( pcSPS->getLayerId() == 0 )
     
    765782    READ_CODE( 3,  uiCode, "sps_max_sub_layers_minus1" );          pcSPS->setMaxTLayers   ( uiCode+1 );
    766783    assert(uiCode <= 6);
     784#if H_MV_HLS10_MULTILAYERSPS
     785#if H_MV
     786  }
     787  else
     788  {
     789    READ_CODE( 3, uiCode, "sps_ext_or_max_sub_layers_minus1" ); pcSPS->setSpsExtOrMaxSubLayersMinus1( uiCode );   
     790    pcSPS->inferSpsMaxSubLayersMinus1( false, NULL );
     791  }
     792  if ( !pcSPS->getMultiLayerExtSpsFlag() )
     793  {
     794#endif
     795#endif
    767796
    768797    READ_FLAG( uiCode, "sps_temporal_id_nesting_flag" );               pcSPS->setTemporalIdNestingFlag ( uiCode > 0 ? true : false );
     
    774803
    775804    parsePTL(pcSPS->getPTL(), 1, pcSPS->getMaxTLayers() - 1);
     805#if H_MV_HLS10_PTL_INFER_FIX
     806    pcSPS->getPTL()->inferGeneralValues ( true, 0, NULL );
     807    pcSPS->getPTL()->inferSubLayerValues( pcSPS->getMaxTLayers() - 1, 0, NULL );
     808#endif
    776809#if H_MV
    777810  }
     
    780813  assert(uiCode <= 15);
    781814#if H_MV
     815#if H_MV_HLS10_MULTILAYERSPS
     816  if ( pcSPS->getMultiLayerExtSpsFlag() )
     817#else
    782818  if ( pcSPS->getLayerId() > 0 )
     819#endif
    783820  {
    784821    READ_FLAG( uiCode, "update_rep_format_flag" );               pcSPS->setUpdateRepFormatFlag( uiCode == 1 );
     
    802839    READ_UVLC (    uiCode, "pic_width_in_luma_samples" );          pcSPS->setPicWidthInLumaSamples ( uiCode    );
    803840    READ_UVLC (    uiCode, "pic_height_in_luma_samples" );         pcSPS->setPicHeightInLumaSamples( uiCode    );
    804 #if H_MV
    805   }
     841#if !H_MV_HLS10_MULTILAYERSPS
     842#if H_MV
     843  }
     844#endif
    806845#endif
    807846  READ_FLAG(     uiCode, "conformance_window_flag");
     
    816855    READ_UVLC(   uiCode, "conf_win_top_offset" );                conf.setWindowTopOffset   ( uiCode  );
    817856    READ_UVLC(   uiCode, "conf_win_bottom_offset" );             conf.setWindowBottomOffset( uiCode  );   
     857#if H_MV_HLS10_MULTILAYERSPS
     858  }
     859#endif
    818860#else
    819861    READ_UVLC(   uiCode, "conf_win_left_offset" );               conf.setWindowLeftOffset  ( uiCode * TComSPS::getWinUnitX( pcSPS->getChromaFormatIdc() ) );
     
    825867
    826868#if H_MV
     869#if H_MV_HLS10_MULTILAYERSPS
     870  if ( !pcSPS->getMultiLayerExtSpsFlag() )
     871#else // H_MV_HLS10_GEN
    827872  if ( pcSPS->getLayerId() == 0 )
     873#endif // H_MV_HLS10_GEN
    828874  {
    829875#endif
     
    845891
    846892#if H_MV
     893#if H_MV_HLS10_MULTILAYERSPS
     894  if ( !pcSPS->getMultiLayerExtSpsFlag())
     895#else
    847896  if ( pcSPS->getLayerId() == 0 )
     897#endif
    848898  { 
    849899#endif
     
    904954  {
    905955#if H_MV
     956#if H_MV_HLS10_MULTILAYERSPS
     957    if ( pcSPS->getMultiLayerExtSpsFlag() )
     958#else
    906959    if ( pcSPS->getLayerId() > 0 )
     960#endif
    907961    {   
    908962      READ_FLAG( uiCode, "sps_infer_scaling_list_flag" ); pcSPS->setSpsInferScalingListFlag( uiCode == 1 );
     
    10321086  READ_FLAG( uiCode, "inter_view_mv_vert_constraint_flag" );    pcSPS->setInterViewMvVertConstraintFlag(uiCode == 1 ? true : false);
    10331087 
     1088#if !H_MV_HLS10_PPS
    10341089  READ_UVLC( uiCode, "num_scaled_ref_layer_offsets" ); pcSPS->setNumScaledRefLayerOffsets( uiCode );
    10351090
     
    10461101    READ_FLAG( uiCode, "sps_multilayer_ext_reserved_zero_flag[ i ]" );
    10471102  }
     1103#endif
    10481104}
    10491105
     
    10661122}
    10671123#endif
     1124
     1125#if H_MV_HLS10_PPS
     1126Void TDecCavlc::parsePPSMultilayerExtension(TComPPS* pcPPS)
     1127{
     1128  UInt uiCode = 0;
     1129  READ_FLAG( uiCode, "poc_reset_info_present_flag" ); pcPPS->setPocResetInfoPresentFlag( uiCode == 1 );
     1130  READ_FLAG( uiCode, "pps_infer_scaling_list_flag" ); pcPPS->setPpsInferScalingListFlag( uiCode == 1 );
     1131  READ_CODE( 6, uiCode, "pps_scaling_list_ref_layer_id" ); pcPPS->setPpsScalingListRefLayerId( uiCode );
     1132  READ_UVLC( uiCode, "num_ref_loc_offsets" ); assert( uiCode == 0 );
     1133}
     1134
     1135#endif
    10681136#endif
    10691137
     
    10751143#if H_MV
    10761144  READ_FLAG( uiCode, "vps_base_layer_internal_flag" );            pcVPS->setVpsBaseLayerInternalFlag( uiCode == 1 );
     1145#if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL
     1146  READ_FLAG( uiCode, "vps_base_layer_available_flag" );           pcVPS->setVpsBaseLayerAvailableFlag( uiCode == 1 );
     1147#else
    10771148  READ_FLAG( uiCode, "vps_reserved_one_bit" );                    assert( uiCode == 1 );
     1149#endif
    10781150#else
    10791151  READ_CODE( 2,  uiCode,  "vps_reserved_three_2bits" );           assert(uiCode == 3);
     
    10901162  READ_CODE( 16, uiCode,  "vps_reserved_ffff_16bits" );           assert(uiCode == 0xffff);
    10911163  parsePTL ( pcVPS->getPTL(), true, pcVPS->getMaxTLayers()-1);
     1164#if H_MV_HLS10_PTL_INFER_FIX
     1165#if H_MV
     1166  pcVPS->getPTL()->inferGeneralValues ( true, 0, NULL );
     1167  pcVPS->getPTL()->inferSubLayerValues( pcVPS->getMaxTLayers() - 1, 0, NULL );
     1168#endif
     1169#endif
    10921170  UInt subLayerOrderingInfoPresentFlag;
    10931171  READ_FLAG(subLayerOrderingInfoPresentFlag, "vps_sub_layer_ordering_info_present_flag");
     
    11151193  READ_CODE( 6, uiCode, "vps_max_layer_id" );   pcVPS->setVpsMaxLayerId( uiCode );
    11161194
     1195#if H_MV_HLS10_GEN_FIX
     1196  READ_UVLC(    uiCode, "vps_num_layer_sets_minus1" );  pcVPS->setVpsNumLayerSetsMinus1( uiCode );
     1197#else
    11171198  READ_UVLC(    uiCode, "vps_max_num_layer_sets_minus1" );               pcVPS->setVpsNumLayerSetsMinus1( uiCode );
     1199#endif
    11181200  for( UInt opsIdx = 1; opsIdx <= pcVPS->getVpsNumLayerSetsMinus1(); opsIdx ++ )
    11191201  {
     
    12041286  UInt uiCode;
    12051287
     1288#if H_MV_HLS10_PTL
     1289  if( pcVPS->getMaxLayersMinus1() > 0  &&  pcVPS->getVpsBaseLayerInternalFlag() )
     1290  {
     1291    parsePTL( pcVPS->getPTL( 1 ),0, pcVPS->getMaxSubLayersMinus1()  ); 
     1292   
     1293#if !H_MV_HLS10_PTL_INFER_FIX
     1294    // Copy Profile info
     1295    TComPTL temp = *pcVPS->getPTL( 1 );
     1296    *pcVPS->getPTL( 1 ) = *pcVPS->getPTL( 0 );
     1297    pcVPS->getPTL( 1 )->copyLevelFrom( &temp );
     1298#else
     1299    pcVPS->getPTL( 1 )->inferGeneralValues ( false, 1, pcVPS->getPTL( 0 ) );
     1300    pcVPS->getPTL( 1 )->inferSubLayerValues( pcVPS->getMaxSubLayersMinus1(), 1, pcVPS->getPTL( 0 ) );   
     1301#endif
     1302  }
     1303#endif
     1304
    12061305  READ_FLAG( uiCode, "splitting_flag" );                          pcVPS->setSplittingFlag( uiCode == 1 ? true : false );
    12071306
     
    12751374  }
    12761375  pcVPS->setRefLayers();
     1376
     1377#if H_MV_HLS10_ADD_LAYERSETS
     1378  if ( pcVPS->getNumIndependentLayers() > 1 )
     1379  {
     1380    READ_UVLC( uiCode, "num_add_layer_sets"      ); pcVPS->setNumAddLayerSets( uiCode );
     1381  }
     1382  for (Int i = 0; i < pcVPS->getNumAddLayerSets(); i++)
     1383  {
     1384    for (Int j = 1; j < pcVPS->getNumIndependentLayers(); j++)
     1385    {
     1386      READ_CODE( pcVPS->getHighestLayerIdxPlus1Len( j ) , uiCode, "highest_layer_idx_plus1" ); pcVPS->setHighestLayerIdxPlus1( i, j, uiCode );
     1387    }
     1388    pcVPS->deriveAddLayerSetLayerIdList( i );
     1389  }
     1390#endif
     1391
    12771392  READ_FLAG( uiCode, "vps_sub_layers_max_minus1_present_flag" ); pcVPS->setVpsSubLayersMaxMinus1PresentFlag( uiCode == 1 );
    12781393  if ( pcVPS->getVpsSubLayersMaxMinus1PresentFlag() )
     
    13101425  READ_UVLC( uiCode, "vps_num_profile_tier_level_minus1" );  pcVPS->setVpsNumProfileTierLevelMinus1( uiCode ); 
    13111426
     1427#if H_MV_HLS10_PTL
     1428  Int offsetVal =  ( pcVPS->getMaxLayersMinus1() > 0  &&  pcVPS->getVpsBaseLayerInternalFlag() ) ? 2 : 1;   
     1429  for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 2 : 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ )
     1430  {
     1431    READ_FLAG(  uiCode, "vps_profile_present_flag[i]" );    pcVPS->setVpsProfilePresentFlag( i, uiCode == 1 );
     1432    parsePTL ( pcVPS->getPTL( offsetVal ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers()-1);
     1433#if H_MV_HLS10_PTL_INFER_FIX
     1434    pcVPS->getPTL( offsetVal )->inferGeneralValues ( pcVPS->getVpsProfilePresentFlag( i ), offsetVal, pcVPS->getPTL( offsetVal - 1 ) );   
     1435    pcVPS->getPTL( offsetVal )->inferSubLayerValues( pcVPS->getMaxSubLayersMinus1()      , offsetVal, pcVPS->getPTL( offsetVal - 1 ) );   
     1436#else
     1437    if( !pcVPS->getVpsProfilePresentFlag( i ) )
     1438    {
     1439      TComPTL temp = *pcVPS->getPTL( offsetVal );
     1440      *pcVPS->getPTL( offsetVal ) = *pcVPS->getPTL( offsetVal - 1 );
     1441      pcVPS->getPTL( offsetVal )->copyLevelFrom( &temp );
     1442    }
     1443#endif
     1444    offsetVal++;
     1445  }
     1446#else
    13121447  for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ )
    13131448  {
     
    13211456    }
    13221457  }
    1323 
     1458#endif
     1459
     1460#if !H_MV_HLS10_ADD_LAYERSETS
    13241461  if ( pcVPS->getNumIndependentLayers() > 1 )
    13251462  {
     
    13331470    }
    13341471  }
     1472#endif
     1473
    13351474  if (pcVPS->getNumLayerSets() > 1)
    13361475  {
     
    13451484  pcVPS->setLayerSetIdxForOlsMinus1(0, -1);
    13461485
     1486#if H_MV_HLS10_NESSECARY_LAYER
     1487  pcVPS->deriveNecessaryLayerFlags( 0 );
     1488#endif
    13471489  pcVPS->deriveTargetLayerIdList( 0 );
    13481490
     1491#if H_MV_HLS10_PTL_FIX
     1492  if (pcVPS->getVpsBaseLayerInternalFlag() )
     1493  { 
     1494    pcVPS->setProfileTierLevelIdx(0,0, pcVPS->inferProfileTierLevelIdx(0,0) );
     1495  }
     1496#endif
    13491497  for( Int i = 1; i < pcVPS->getNumOutputLayerSets( ); i++ )
    13501498  {
    13511499    if( i >= pcVPS->getNumLayerSets( ) )   
    13521500    {       
     1501#if !VPS_MISC_UPDATES
    13531502      READ_UVLC( uiCode,      "layer_set_idx_for_ols_minus1[i]" ); pcVPS->setLayerSetIdxForOlsMinus1( i, uiCode );
     1503#else
     1504      READ_CODE( pcVPS->getLayerSetIdxForOlsMinus1Len( i ), uiCode, "layer_set_idx_for_ols_minus1[i]" ); pcVPS->setLayerSetIdxForOlsMinus1( i, uiCode );
     1505#endif
    13541506    }
    13551507
     
    13681520      }
    13691521    }
     1522#if H_MV_HLS10_NESSECARY_LAYER
     1523    pcVPS->deriveNecessaryLayerFlags( i );
     1524#endif
    13701525    pcVPS->deriveTargetLayerIdList( i );
    13711526
     1527#if H_MV_HLS10_PTL
     1528    for ( Int j = 0; j < pcVPS->getNumLayersInIdList( pcVPS->olsIdxToLsIdx(i)); j++ )
     1529    {   
     1530      if (pcVPS->getNecessaryLayerFlag( i, j ) && pcVPS->getVpsNumProfileTierLevelMinus1() > 0 )
     1531      {
     1532        READ_CODE( pcVPS->getProfileTierLevelIdxLen(), uiCode,"profile_tier_level_idx[ i ][ j ]" );   pcVPS->setProfileTierLevelIdx( i, j, uiCode );
     1533      }
     1534#if H_MV_HLS10_PTL_FIX
     1535      if (pcVPS->getNecessaryLayerFlag( i, j ) && pcVPS->getVpsNumProfileTierLevelMinus1() == 0 )
     1536      {
     1537        pcVPS->setProfileTierLevelIdx( i , j, pcVPS->inferProfileTierLevelIdx( i, j) );
     1538      }
     1539#endif
     1540    }
     1541#else
    13721542    if ( pcVPS->getProfileLevelTierIdxLen()  > 0 )
    1373     {      
     1543    {
    13741544      READ_CODE( pcVPS->getProfileLevelTierIdxLen(), uiCode,"profile_level_tier_idx[ i ]" );   pcVPS->setProfileLevelTierIdx( i , uiCode );
    13751545    }
     1546#endif
     1547
    13761548    if( pcVPS->getNumOutputLayersInOutputLayerSet( i ) == 1 && pcVPS->getNumDirectRefLayers( pcVPS->getOlsHighestOutputLayerId( i ) ) > 0 )
    13771549    {
     
    14221594  }
    14231595
     1596#if !H_MV_HLS10_GEN_FIX
    14241597  READ_FLAG( uiCode, "vps_reserved_zero_flag" );
     1598#endif
    14251599  parseDpbSize( pcVPS );
    14261600
     
    14841658  if ( pcRepFormat->getChromaAndBitDepthVpsPresentFlag() )
    14851659  { 
    1486   READ_CODE( 2,  uiCode, "chroma_format_vps_idc" );          pcRepFormat->setChromaFormatVpsIdc       ( uiCode );
    1487   if ( pcRepFormat->getChromaFormatVpsIdc() == 3 )
    1488   {
    1489     READ_FLAG( uiCode, "separate_colour_plane_vps_flag" ); pcRepFormat->setSeparateColourPlaneVpsFlag( uiCode == 1 );
    1490   }
    1491   READ_CODE( 4,  uiCode, "bit_depth_vps_luma_minus8" );      pcRepFormat->setBitDepthVpsLumaMinus8    ( uiCode );
    1492   READ_CODE( 4,  uiCode, "bit_depth_vps_chroma_minus8" );    pcRepFormat->setBitDepthVpsChromaMinus8  ( uiCode );
     1660    READ_CODE( 2,  uiCode, "chroma_format_vps_idc" );          pcRepFormat->setChromaFormatVpsIdc       ( uiCode );
     1661    if ( pcRepFormat->getChromaFormatVpsIdc() == 3 )
     1662    {
     1663      READ_FLAG( uiCode, "separate_colour_plane_vps_flag" ); pcRepFormat->setSeparateColourPlaneVpsFlag( uiCode == 1 );
     1664    }
     1665    READ_CODE( 4,  uiCode, "bit_depth_vps_luma_minus8" );      pcRepFormat->setBitDepthVpsLumaMinus8    ( uiCode );
     1666    READ_CODE( 4,  uiCode, "bit_depth_vps_chroma_minus8" );    pcRepFormat->setBitDepthVpsChromaMinus8  ( uiCode );
    14931667  }
    14941668  else
     
    14961670    pcRepFormat->inferChromaAndBitDepth(pcPrevRepFormat, false );
    14971671  }
     1672#if H_MV_HLS10_GEN_VSP_CONF_WIN
     1673  READ_FLAG( uiCode, "conformance_window_vps_flag" ); pcRepFormat->setConformanceWindowVpsFlag( uiCode == 1 );
     1674  if ( pcRepFormat->getConformanceWindowVpsFlag() )
     1675  {
     1676    READ_UVLC( uiCode, "conf_win_vps_left_offset" ); pcRepFormat->setConfWinVpsLeftOffset( uiCode );
     1677    READ_UVLC( uiCode, "conf_win_vps_right_offset" ); pcRepFormat->setConfWinVpsRightOffset( uiCode );
     1678    READ_UVLC( uiCode, "conf_win_vps_top_offset" ); pcRepFormat->setConfWinVpsTopOffset( uiCode );
     1679    READ_UVLC( uiCode, "conf_win_vps_bottom_offset" ); pcRepFormat->setConfWinVpsBottomOffset( uiCode );
     1680  }
     1681#endif
    14981682}
    14991683
     
    15211705  if( pcVPSVUI->getBitRatePresentVpsFlag( )  ||  pcVPSVUI->getPicRatePresentVpsFlag( ) )
    15221706  {
     1707#if H_MV_HLS10_VPS_VUI
     1708    for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i  <  pcVPS->getNumLayerSets(); i++ )
     1709#else
    15231710    for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i  <=  pcVPS->getVpsNumLayerSetsMinus1(); i++ )
     1711#endif
    15241712    {
    15251713      for( Int j = 0; j  <=  pcVPS->getMaxSubLayersInLayerSetMinus1( i ); j++ )
     
    15541742  else
    15551743  {
     1744#if H_MV_HLS10_VPS_VUI
     1745    pcVPSVUI->setVpsNumVideoSignalInfoMinus1( pcVPS->getMaxLayersMinus1() - pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1 );
     1746#else
    15561747    pcVPSVUI->setVpsNumVideoSignalInfoMinus1( pcVPS->getMaxLayersMinus1() );
     1748#endif
    15571749  }
    15581750
     
    15651757  }
    15661758
     1759#if I0045_VPS_VUI_VST_PARAMS
     1760  if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() && pcVPSVUI->getVpsNumVideoSignalInfoMinus1() > 0 )
     1761  {
     1762    for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <=  pcVPS->getMaxLayersMinus1(); i++ )
     1763    {
     1764      READ_CODE( 4, uiCode, "vps_video_signal_info_idx" ); pcVPSVUI->setVpsVideoSignalInfoIdx( i, uiCode );
     1765    }
     1766  }
     1767  else if ( !pcVPSVUI->getVideoSignalInfoIdxPresentFlag() )
     1768  {
     1769    for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <=  pcVPS->getMaxLayersMinus1(); i++ )
     1770    {
     1771      pcVPSVUI->setVpsVideoSignalInfoIdx( i, i );
     1772    }
     1773  }
     1774  else
     1775  {
     1776    for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <=  pcVPS->getMaxLayersMinus1(); i++ )
     1777    {
     1778      pcVPSVUI->setVpsVideoSignalInfoIdx( i, 0 );
     1779    }
     1780  }
     1781#else
    15671782  if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() && pcVPSVUI->getVpsNumVideoSignalInfoMinus1() > 0 )
    15681783  {
     
    15801795    }
    15811796  }
     1797#endif
    15821798  READ_FLAG( uiCode, "tiles_not_in_use_flag" ); pcVPSVUI->setTilesNotInUseFlag( uiCode == 1 );
    15831799  if( !pcVPSVUI->getTilesNotInUseFlag() )
     
    15941810    {
    15951811      for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ) ; j++ )
    1596       { 
     1812      {
     1813#if H_MV_HLS10_REF_PRED_LAYERS
     1814        Int layerIdx = pcVPS->getLayerIdInVps(pcVPS->getIdDirectRefLayer(pcVPS->getLayerIdInNuh( i ) , j  )); 
     1815#else
    15971816        Int layerIdx = pcVPS->getLayerIdInVps(pcVPS->getRefLayerId(pcVPS->getLayerIdInNuh( i ) , j  )); 
     1817#endif
    15981818        if( pcVPSVUI->getTilesInUseFlag( i )  &&  pcVPSVUI->getTilesInUseFlag( layerIdx ) ) 
    15991819        {
     
    16131833    }
    16141834  }
     1835#if H_MV_HLS10_VPS_VUI
     1836  READ_FLAG( uiCode, "single_layer_for_non_irap_flag" ); pcVPSVUI->setSingleLayerForNonIrapFlag( uiCode == 1 );
     1837  READ_FLAG( uiCode, "higher_layer_irap_skip_flag" ); pcVPSVUI->setHigherLayerIrapSkipFlag( uiCode == 1 );
     1838#else
    16151839  READ_CODE( 3, uiCode, "vps_vui_reserved_zero_3bits" );
     1840#endif
    16161841  READ_FLAG( uiCode, "ilp_restricted_ref_layers_flag" ); pcVPSVUI->setIlpRestrictedRefLayersFlag( uiCode == 1 );
    16171842
     
    16221847      for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ); j++ )
    16231848      {
     1849#if H_MV_HLS10_REF_PRED_LAYERS
     1850        if( pcVPS->getVpsBaseLayerInternalFlag() || pcVPS->getIdDirectRefLayer( pcVPS->getLayerIdInNuh( i ), j ) > 0 )
     1851#else
    16241852        if( pcVPS->getVpsBaseLayerInternalFlag() || pcVPS->getRefLayerId( pcVPS->getLayerIdInNuh( i ), j ) > 0 )
     1853#endif
    16251854        {       
    16261855          READ_UVLC( uiCode, "min_spatial_segment_offset_plus1" ); pcVPSVUI->setMinSpatialSegmentOffsetPlus1( i, j, uiCode );
     
    16411870  if ( pcVPSVUI->getVpsVuiBspHrdPresentFlag( ) )
    16421871  {
     1872#if VPS_MISC_UPDATES
     1873    assert(pcVPS->getTimingInfo()->getTimingInfoPresentFlag() == 1);
     1874#endif
    16431875    parseVpsVuiBspHrdParameters( pcVPS );
    16441876  }
     
    16611893
    16621894  TComVpsVuiBspHrdParameters*  vpsVuiBspHrdP = pcVPSVUI->getVpsVuiBspHrdParameters();
    1663  
     1895#if H_MV_HLS10_VPS_VUI_BSP
     1896  assert( vpsVuiBspHrdP == NULL );
     1897  vpsVuiBspHrdP = new TComVpsVuiBspHrdParameters;
     1898  pcVPSVUI->setVpsVuiBspHrdParameters( vpsVuiBspHrdP );
     1899#else
    16641900  assert ( vpsVuiBspHrdP );
    1665 
     1901#endif
    16661902  UInt uiCode;
     1903#if H_MV_HLS10_VPS_VUI_BSP
     1904  READ_UVLC( uiCode, "vps_num_add_hrd_params" ); vpsVuiBspHrdP->setVpsNumAddHrdParams( uiCode );
     1905  vpsVuiBspHrdP->createAfterVpsNumAddHrdParams( pcVPS );
     1906  for( Int i = pcVPS->getNumHrdParameters(); i < pcVPS->getNumHrdParameters() + vpsVuiBspHrdP->getVpsNumAddHrdParams(); i++ )
     1907  { 
     1908    if( i > 0 ) 
     1909    {
     1910      READ_FLAG( uiCode, "cprms_add_present_flag" ); vpsVuiBspHrdP->setCprmsAddPresentFlag( i, uiCode == 1 );
     1911    }
     1912    else
     1913    {
     1914       vpsVuiBspHrdP->setCprmsAddPresentFlag( i, true );
     1915    }
     1916
     1917    READ_UVLC( uiCode, "num_sub_layer_hrd_minus1" ); vpsVuiBspHrdP->setNumSubLayerHrdMinus1( i, uiCode );
     1918    TComHRD* hrdParameters = vpsVuiBspHrdP->getHrdParametermeters( i );
     1919    parseHrdParameters( hrdParameters, vpsVuiBspHrdP->getCprmsAddPresentFlag( i ), vpsVuiBspHrdP->getNumSubLayerHrdMinus1( i ) );     
     1920  }
     1921
     1922  vpsVuiBspHrdP->setNumPartitionsInSchemeMinus1( 0, 0, 0);
     1923  vpsVuiBspHrdP->createAfterNumPartitionsInSchemeMinus1( 0, 0 );
     1924
     1925  for( Int h = 0; h < pcVPS->getNumOutputLayerSets(); h++ )
     1926  {
     1927    if ( h == 0)
     1928    {
     1929      vpsVuiBspHrdP->setNumSignalledPartitioningSchemes( h, 0 );
     1930    }
     1931    else
     1932    {
     1933      READ_UVLC( uiCode, "num_signalled_partitioning_schemes" ); vpsVuiBspHrdP->setNumSignalledPartitioningSchemes( h, uiCode );
     1934    }   
     1935    vpsVuiBspHrdP->createAfterNumSignalledPartitioningSchemes( h );
     1936
     1937    for( Int j = 0; j < vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ) + 1; j++ )
     1938    {
     1939      if ( j == 0 && h == 0 )
     1940      {
     1941        vpsVuiBspHrdP->setNumPartitionsInSchemeMinus1( h, j, uiCode );
     1942      }
     1943      else if( j == 0 )
     1944      {
     1945        vpsVuiBspHrdP->setNumPartitionsInSchemeMinus1( h, j, pcVPS->getNumLayersInIdList( h ) - 1 );
     1946      }
     1947      else
     1948      {
     1949        READ_UVLC( uiCode, "num_partitions_in_scheme_minus1" ); vpsVuiBspHrdP->setNumPartitionsInSchemeMinus1( h, j, uiCode );
     1950      }
     1951      vpsVuiBspHrdP->createAfterNumPartitionsInSchemeMinus1( h, j );
     1952
     1953      for( Int k = 0; k  <=  vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ); k++ ) 
     1954      {
     1955        for( Int r = 0; r < pcVPS->getNumLayersInIdList(pcVPS->olsIdxToLsIdx( h ) )   ; r++ ) 
     1956        {
     1957          if( h == 0 && j == 0 && k == 0 && r == 0 )
     1958          {
     1959             vpsVuiBspHrdP->setLayerIncludedInPartitionFlag( h, j, k, r, true );
     1960          }
     1961          else if ( h > 0 && j == 0 )
     1962          {
     1963             vpsVuiBspHrdP->setLayerIncludedInPartitionFlag( h, j, k, r, (k == r) );
     1964          }
     1965          else
     1966          {
     1967            READ_FLAG( uiCode, "layer_included_in_partition_flag" ); vpsVuiBspHrdP->setLayerIncludedInPartitionFlag( h, j, k, r, uiCode == 1 );
     1968          }         
     1969        }
     1970      }
     1971    } 
     1972    if ( h > 0 )
     1973    {
     1974      for( Int i = 0; i < vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ) + 1; i++ ) 
     1975      {
     1976        for( Int t = 0; t  <=  pcVPS->getMaxSubLayersInLayerSetMinus1( pcVPS->olsIdxToLsIdx( i ) ); t++ )
     1977        { 
     1978          READ_UVLC( uiCode, "num_bsp_schedules_minus1" ); vpsVuiBspHrdP->setNumBspSchedulesMinus1( h, i, t, uiCode );
     1979          vpsVuiBspHrdP->createAfterNumBspSchedulesMinus1( h, i, t );
     1980          for( Int j = 0; j  <=  vpsVuiBspHrdP->getNumBspSchedulesMinus1( h, i, t ); j++ ) 
     1981          {
     1982            for( Int k = 0; k  <=  vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ); k++ )
     1983            { 
     1984              READ_CODE( vpsVuiBspHrdP->getBspHrdIdxLen( pcVPS ), uiCode, "bsp_hrd_idx" ); vpsVuiBspHrdP->setBspHrdIdx( h, i, t, j, k, uiCode );
     1985              READ_UVLC( uiCode, "bsp_sched_idx" ); vpsVuiBspHrdP->setBspSchedIdx( h, i, t, j, k, uiCode );
     1986            } 
     1987          }
     1988        } 
     1989      }
     1990    }
     1991  } 
     1992#else
    16671993  READ_UVLC( uiCode, "vps_num_bsp_hrd_parameters_minus1" ); vpsVuiBspHrdP->setVpsNumBspHrdParametersMinus1( uiCode );
    16681994  for( Int i = 0; i <= vpsVuiBspHrdP->getVpsNumBspHrdParametersMinus1( ); i++ )
     
    17012027    } 
    17022028  } 
    1703 
     2029#endif 
     2030}
    17042031
    17052032Void TDecCavlc::parseVideoSignalInfo( TComVideoSignalInfo* pcVideoSignalInfo )
     
    17332060        for( Int k = 0; k < vps->getNumLayersInIdList( currLsIdx ); k++ )   
    17342061        {
     2062#if H_MV_HLS10_DBP_SIZE
     2063          if ( vps->getNecessaryLayerFlag( i, k ) && ( vps->getVpsBaseLayerInternalFlag() || ( vps->getLayerSetLayerIdList(vps->olsIdxToLsIdx(i),k) != 0 ) ))
     2064          {
     2065            READ_UVLC( uiCode, "max_vps_dec_pic_buffering_minus1" ); dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, uiCode );
     2066          }
     2067          else
     2068          {
     2069            if ( vps->getNecessaryLayerFlag( i, k ) && ( j == 0 ) && ( k == 0 ))
     2070            {
     2071              dpbSize->setMaxVpsDecPicBufferingMinus1(i ,k, j, 0 );
     2072            }
     2073          }
     2074#else
    17352075          READ_UVLC( uiCode, "max_vps_dec_pic_buffering_minus1" ); dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, uiCode );
     2076#endif
    17362077        }
    17372078        READ_UVLC( uiCode, "max_vps_num_reorder_pics" ); dpbSize->setMaxVpsNumReorderPics( i, j, uiCode );
     
    17442085          for( Int k = 0; k < vps->getNumLayersInIdList( vps->olsIdxToLsIdx( i ) ); k++ )   
    17452086          {
    1746             dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) );
     2087#if H_MV_HLS10_DBP_SIZE
     2088            if ( vps->getNecessaryLayerFlag(i, k ) )
     2089            {           
     2090#endif
     2091              dpbSize->setMaxVpsDecPicBufferingMinus1( i, k, j, dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) );
     2092#if H_MV_HLS10_DBP_SIZE
     2093            }
     2094#endif           
    17472095          }
    17482096          dpbSize->setMaxVpsNumReorderPics      ( i, j, dpbSize->getMaxVpsNumReorderPics      ( i, j - 1 ) );
     
    19402288  sps->inferScalingList( parameterSetManager->getActiveSPS( sps->getSpsScalingListRefLayerId() ) );   
    19412289  sps->inferSpsMaxDecPicBufferingMinus1( vps, targetOlsIdx, rpcSlice->getLayerId(), false );
     2290#if !H_MV_HLS10_ADD_LAYERSETS
    19422291  vps->inferDbpSizeLayerSetZero( sps, false );
     2292#endif
    19432293
    19442294  if ( sps->getVuiParametersPresentFlag() )
     
    20082358      esb++;
    20092359      READ_FLAG( uiCode, "discardable_flag" ); rpcSlice->setDiscardableFlag( uiCode == 1 );
     2360#if NON_REF_NAL_TYPE_DISCARDABLE
     2361      if ( uiCode == 1 )
     2362      {
     2363        assert(rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_TRAIL_R &&
     2364          rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_TSA_R &&
     2365          rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_STSA_R &&
     2366          rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_RADL_R &&
     2367          rpcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_RASL_R);
     2368      }
     2369#endif
    20102370    }
    20112371
     
    21552515          rps->checkMaxNumPics(
    21562516            vps->getVpsExtensionFlag(),
     2517#if H_MV_HLS10_MAXNUMPICS
     2518            MAX_INT,  // To be replaced by MaxDbpSize
     2519#else
    21572520            vps->getMaxNumPics( rpcSlice->getLayerId() ),
     2521#endif
    21582522            rpcSlice->getLayerId(),
    21592523            sps->getMaxDecPicBuffering( sps->getSpsMaxSubLayersMinus1() ) - 1 );
     
    22682632        rps->checkMaxNumPics(
    22692633          vps->getVpsExtensionFlag(),
     2634#if H_MV_HLS10_MAXNUMPICS
     2635            MAX_INT,  // To be replaced by MaxDbpsize
     2636#else
    22702637          vps->getMaxNumPics( rpcSlice->getLayerId() ),
     2638#endif
    22712639          rpcSlice->getLayerId(),
    22722640          sps->getMaxDecPicBuffering( sps->getSpsMaxSubLayersMinus1() ) - 1 );
     
    22872655      if (rpcSlice->getSPS()->getTMVPFlagsPresent())
    22882656      {
     2657#if I0044_SLICE_TMVP
     2658        READ_FLAG( uiCode, "slice_temporal_mvp_enabled_flag" );
     2659#else
    22892660        READ_FLAG( uiCode, "slice_temporal_mvp_enable_flag" );
     2661#endif
    22902662        rpcSlice->setEnableTMVPFlag( uiCode == 1 ? true : false );
    22912663      }
     
    26373009
    26383010#if H_3D
     3011#if LGE_FCO_I0116
     3012  if( rpcSlice->getVPS()->hasCamParInSliceHeader( rpcSlice->getViewIndex() )  && rpcSlice->getIsDepth() )
     3013#else
    26393014  if( rpcSlice->getVPS()->hasCamParInSliceHeader( rpcSlice->getViewIndex() )  && !rpcSlice->getIsDepth() )
     3015#endif
    26403016  {
    26413017    UInt uiViewIndex = rpcSlice->getViewIndex();
     
    27233099#endif
    27243100  }
     3101#if INFERENCE_POC_MSB_VAL_PRESENT
     3102  else
     3103  {
     3104    rpcSlice->setSliceSegmentHeaderExtensionLength( 0 );
     3105    rpcSlice->setPocMsbValPresentFlag( false );
     3106  }
     3107#endif
    27253108
    27263109
     
    28153198      READ_FLAG( uiCode, "sub_layer_profile_present_flag[i]" ); rpcPTL->setSubLayerProfilePresentFlag(i, uiCode);
    28163199#if H_MV
    2817     rpcPTL->setSubLayerProfilePresentFlag( i, profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) );
     3200#if !H_MV_HLS10_PTL_INFER_FIX
     3201      rpcPTL->setSubLayerProfilePresentFlag( i, profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) );
     3202#else
     3203      // When profilePresentFlag is equal to 0, sub_layer_profile_present_flag[ i ] shall be equal to 0.
     3204      assert( profilePresentFlag || !rpcPTL->getSubLayerProfilePresentFlag(i) );
     3205#endif
    28183206#else
    28193207    }
     
    28333221  for(Int i = 0; i < maxNumSubLayersMinus1; i++)
    28343222  {
    2835     if( profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) )
     3223#if H_MV_HLS10_PTL_INFER_FIX
     3224#if H_MV
     3225    if( rpcPTL->getSubLayerProfilePresentFlag(i) )         
     3226#else
     3227    if( profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) )         
     3228#endif
     3229#else
     3230    if( profilePresentFlag && rpcPTL->getSubLayerProfilePresentFlag(i) )   
     3231#endif
    28363232    {
    28373233      parseProfileTier(rpcPTL->getSubLayerPTL(i));
     
    28663262  ptl->setFrameOnlyConstraintFlag(uiCode ? true : false);
    28673263 
     3264#if H_MV_HLS10_PTL
     3265#if H_MV_HLS10_PTL_INFER_FIX
     3266  if( ptl->getV2ConstraintsPresentFlag() )
     3267#else
     3268  if( ptl->getProfileIdc( ) ==  4 || ptl->getProfileCompatibilityFlag( 4 )  ||
     3269      ptl->getProfileIdc( ) ==  5 || ptl->getProfileCompatibilityFlag( 5 )  ||
     3270      ptl->getProfileIdc( ) ==  6 || ptl->getProfileCompatibilityFlag( 6 )  ||
     3271      ptl->getProfileIdc( ) ==  7 || ptl->getProfileCompatibilityFlag( 7 ) )
     3272#endif
     3273  {
     3274    READ_FLAG( uiCode, "max_12bit_constraint_flag" );        ptl->setMax12bitConstraintFlag      ( uiCode == 1 );
     3275    READ_FLAG( uiCode, "max_10bit_constraint_flag" );        ptl->setMax10bitConstraintFlag      ( uiCode == 1 );
     3276    READ_FLAG( uiCode, "max_8bit_constraint_flag" );         ptl->setMax8bitConstraintFlag       ( uiCode == 1 );
     3277    READ_FLAG( uiCode, "max_422chroma_constraint_flag" );    ptl->setMax422chromaConstraintFlag  ( uiCode == 1 );
     3278    READ_FLAG( uiCode, "max_420chroma_constraint_flag" );    ptl->setMax420chromaConstraintFlag  ( uiCode == 1 );
     3279    READ_FLAG( uiCode, "max_monochrome_constraint_flag" );   ptl->setMaxMonochromeConstraintFlag ( uiCode == 1 );
     3280    READ_FLAG( uiCode, "intra_constraint_flag" );            ptl->setIntraConstraintFlag         ( uiCode == 1 );
     3281    READ_FLAG( uiCode, "one_picture_only_constraint_flag" ); ptl->setOnePictureOnlyConstraintFlag( uiCode == 1 );
     3282    READ_FLAG( uiCode, "lower_bit_rate_constraint_flag" );   ptl->setLowerBitRateConstraintFlag  ( uiCode == 1 );   
     3283    READ_CODE(16, uiCode, "XXX_reserved_zero_34bits[0..15]");
     3284    READ_CODE(16, uiCode, "XXX_reserved_zero_34bits[16..31]");
     3285    READ_CODE(2 , uiCode, "XXX_reserved_zero_34bits[32..33]");
     3286  }
     3287  else
     3288  {
     3289    READ_CODE(16, uiCode, "XXX_reserved_zero_43bits[0..15]");
     3290    READ_CODE(16, uiCode, "XXX_reserved_zero_43bits[16..31]");
     3291    READ_CODE(11, uiCode, "XXX_reserved_zero_43bits[32..42]");
     3292  }
     3293#if H_MV_HLS10_PTL_INFER_FIX
     3294  if( ptl->getInbldPresentFlag() )
     3295#else
     3296  if( ( ptl->getProfileIdc() >= 1 && ptl->getProfileIdc() <= 5 )  ||
     3297    ptl->getProfileCompatibilityFlag( 1 ) || ptl->getProfileCompatibilityFlag( 2 )  ||
     3298    ptl->getProfileCompatibilityFlag( 3 ) || ptl->getProfileCompatibilityFlag( 4 )  ||
     3299    ptl->getProfileCompatibilityFlag( 5 ) )
     3300#endif
     3301  {
     3302    READ_FLAG( uiCode, "inbld_flag" ); ptl->setInbldFlag( uiCode == 1 );
     3303  }
     3304  else
     3305  {
     3306    READ_FLAG(uiCode, "reserved_zero_bit");
     3307  }
     3308#else
    28683309  READ_CODE(16, uiCode, "XXX_reserved_zero_44bits[0..15]");
    28693310  READ_CODE(16, uiCode, "XXX_reserved_zero_44bits[16..31]");
    28703311  READ_CODE(12, uiCode, "XXX_reserved_zero_44bits[32..43]");
     3312#endif
    28713313}
    28723314
  • trunk/source/Lib/TLibDecoder/TDecCAVLC.h

    r1039 r1066  
    9797#endif
    9898
     99#if H_MV_HLS10_PPS
     100#if H_MV
     101  Void  parsePPSMultilayerExtension( TComPPS* pcPPS );
     102#endif
     103#endif
     104
     105
    99106#if H_3D
    100107  Void  parsePPS            ( TComPPS* pcPPS, TComVPS* pcVPS );
  • trunk/source/Lib/TLibDecoder/TDecCu.cpp

    r1039 r1066  
    859859  // get collocated depth block
    860860  UInt uiDepthStride = 0;
     861#if LGE_FCO_I0116
     862  Pel* pDepthPels = pcCU->getVirtualDepthBlock(pcCU->getZorderIdxInCU(), pcCU->getWidth(0), pcCU->getHeight(0), uiDepthStride);
     863#else
    861864  Pel* pDepthPels = pcCU->getVirtualDepthBlock(0, pcCU->getWidth(0), pcCU->getHeight(0), uiDepthStride);
     865#endif
    862866  AOF( pDepthPels != NULL );
    863867  AOF( uiDepthStride != 0 );
  • trunk/source/Lib/TLibDecoder/TDecSbac.cpp

    r1039 r1066  
    794794
    795795#if MTK_I0099_VPS_EX2
     796#if LGE_FCO_I0116
     797  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFlag && pcTexture->getReconMark())
     798#else
    796799  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFlag)
     800#endif
    797801#else
    798802  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && sps->getUseQTL() && sps->getUsePC())
     
    854858  UInt uiTexturePart = uiMode;
    855859#if MTK_I0099_VPS_EX2
     860#if LGE_FCO_I0116
     861  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFlag && pcTexture->getReconMark())
     862#else
    856863  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFlag )
     864#endif
    857865#else
    858866  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && sps->getUseQTL() && sps->getUsePC())
  • trunk/source/Lib/TLibDecoder/TDecTop.cpp

    r976 r1066  
    229229  }
    230230
     231#if !LGE_FCO_I0116
    231232  if ( pcSlice->getIsDepth())
    232233  {
    233234    return;
    234235  }
     236#endif
    235237
    236238  Int curPoc = pcSlice->getPOC();
     
    667669#if H_MV
    668670  sps->inferSpsMaxDecPicBufferingMinus1( vps, m_targetOptLayerSetIdx, getLayerId(), false );
     671#if !H_MV_HLS10_ADD_LAYERSETS
    669672  vps->inferDbpSizeLayerSetZero( sps, false );
     673#endif
    670674  // When the value of vps_num_rep_formats_minus1 in the active VPS is equal to 0
    671675  if ( vps->getVpsNumRepFormatsMinus1() == 0 )
     
    675679  }
    676680  sps->checkRpsMaxNumPics( vps, getLayerId() );
     681#if H_MV_HLS10_MULTILAYERSPS
     682
     683  if( sps->getLayerId() != 0 )
     684  {
     685    sps->inferSpsMaxSubLayersMinus1( true, vps );
     686  }
     687
     688#if H_MV_HLS10_MULTILAYERSPS
     689  // It is a requirement of bitstream conformance that, when the SPS is referred to by
     690  // any current picture that belongs to an independent non-base layer, the value of
     691  // MultiLayerExtSpsFlag derived from the SPS shall be equal to 0.
     692
     693  if ( m_layerId > 0 && vps->getNumRefLayers( m_layerId ) == 0 )
     694  { 
     695    assert( sps->getMultiLayerExtSpsFlag() == 0 );
     696  }
     697#endif
     698
     699  if( sps->getMultiLayerExtSpsFlag() )
     700  {
     701    sps->setTemporalIdNestingFlag( (sps->getMaxTLayers() > 1) ? vps->getTemporalNestingFlag() : true );
     702  }
     703#else
    677704  if( m_layerId > 0 )
    678705  {
    679706    sps->setTemporalIdNestingFlag( (sps->getMaxTLayers() > 1) ? vps->getTemporalNestingFlag() : true );
    680707  }
     708#endif
    681709#endif
    682710
     
    702730#if H_MV
    703731  m_apcSlicePilot->setVPS(vps); 
     732#if H_MV_HLS10_REF_PRED_LAYERS
     733  // The nuh_layer_id value of the NAL unit containing the PPS that is activated for a layer layerA with nuh_layer_id equal to nuhLayerIdA shall be equal to 0, or nuhLayerIdA, or the nuh_layer_id of a direct or indirect reference layer of layerA.
     734  assert( pps->getLayerId() == m_layerId || pps->getLayerId( ) == 0 || vps->getDependencyFlag( m_layerId, pps->getLayerId() ) );   
     735  // The nuh_layer_id value of the NAL unit containing the SPS that is activated for a layer layerA with nuh_layer_id equal to nuhLayerIdA shall be equal to 0, or nuhLayerIdA, or the nuh_layer_id of a direct or indirect reference layer of layerA.
     736  assert( sps->getLayerId() == m_layerId || sps->getLayerId( ) == 0 || vps->getDependencyFlag( m_layerId, sps->getLayerId() ) );
     737#else
    704738  // The nuh_layer_id value of the NAL unit containing the PPS that is activated for a layer layerA with nuh_layer_id equal to nuhLayerIdA shall be equal to 0, or nuhLayerIdA, or the nuh_layer_id of a direct or indirect reference layer of layerA.
    705739  assert( pps->getLayerId() == m_layerId || pps->getLayerId( ) == 0 || vps->getInDirectDependencyFlag( m_layerId, pps->getLayerId() ) );   
    706740  // The nuh_layer_id value of the NAL unit containing the SPS that is activated for a layer layerA with nuh_layer_id equal to nuhLayerIdA shall be equal to 0, or nuhLayerIdA, or the nuh_layer_id of a direct or indirect reference layer of layerA.
    707741  assert( sps->getLayerId() == m_layerId || sps->getLayerId( ) == 0 || vps->getInDirectDependencyFlag( m_layerId, sps->getLayerId() ) );
     742#endif
    708743  sps->inferRepFormat  ( vps , m_layerId );
    709744  sps->inferScalingList( m_parameterSetManagerDecoder.getActiveSPS( sps->getSpsScalingListRefLayerId() ) );
     745
    710746#endif
    711747  pps->setSPS(sps);
     
    909945   }
    910946#endif
     947   
     948#if I0044_SLICE_TMVP
     949  if ( m_apcSlicePilot->getTLayer() == 0 && m_apcSlicePilot->getEnableTMVPFlag() == 0 )
     950  {
     951    //update all pics in the DPB such that they cannot be used for TMPV ref
     952    TComList<TComPic*>::iterator  iterRefPic = m_cListPic.begin(); 
     953    while( iterRefPic != m_cListPic.end() )
     954    {
     955      TComPic *refPic = *iterRefPic;
     956      if( ( refPic->getLayerId() == m_apcSlicePilot->getLayerId() ) && refPic->getReconMark() )
     957      {
     958        for(Int i = refPic->getNumAllocatedSlice()-1; i >= 0; i--)
     959        {
     960
     961          TComSlice *refSlice = refPic->getSlice(i);
     962          refSlice->setAvailableForTMVPRefFlag( false );
     963        }
     964      }
     965      iterRefPic++;
     966    }
     967  }
     968  m_apcSlicePilot->setAvailableForTMVPRefFlag( true );
     969#endif
     970
    911971  xActivateParameterSets();
    912972
     
    11331193#endif
    11341194    // For generalized B
     1195#if I0044_SLICE_TMVP
     1196    if( m_layerId > 0 && !pcSlice->isIntra() && pcSlice->getEnableTMVPFlag() )
     1197    {
     1198      TComPic* refPic = pcSlice->getRefPic(RefPicList(1 - pcSlice->getColFromL0Flag()), pcSlice->getColRefIdx());
     1199
     1200      assert ( refPic );
     1201      assert ( refPic->getPicSym()->getSlice(0)->getAvailableForTMVPRefFlag() == true );
     1202    }
     1203#endif
     1204
     1205    // For generalized B
    11351206    // note: maybe not existed case (always L0 is copied to L1 if L1 is empty)
    11361207    if (pcSlice->isInterB() && pcSlice->getNumRefIdx(REF_PIC_LIST_1) == 0)
     
    12011272
    12021273#if H_3D_IV_MERGE
     1274#if LGE_FCO_I0116
     1275  if( !pcSlice->getIsDepth() && m_pcCamParsCollector )
     1276#else
    12031277  if( pcSlice->getIsDepth() && m_pcCamParsCollector )
     1278#endif
    12041279  {
    12051280    m_pcCamParsCollector->copyCamParamForSlice( pcSlice );
     
    16521727  for (Int i = 0; i < vps->getNumDirectRefLayers( getLayerId()  ); i++ )
    16531728  {
     1729#if H_MV_HLS10_REF_PRED_LAYERS
     1730    Int refLayerId = vps->getIdDirectRefLayer( m_layerId, i );
     1731#else
    16541732    Int refLayerId = vps->getRefLayerId( m_layerId, i );
     1733#endif
    16551734    allRefLayersInitilizedFlag = allRefLayersInitilizedFlag && m_layerInitilizedFlag[ refLayerId ];
    16561735  }
  • trunk/source/Lib/TLibEncoder/TEncCavlc.cpp

    r1039 r1066  
    4949{
    5050#if H_MV_ENC_DEC_TRAC
     51#if H_MV_HLS10_GEN_FIX
     52  fprintf( g_hTrace, "=========== Sequence Parameter Set LayerId: %d ===========\n", pSPS->getLayerId() );
     53#else
    5154  fprintf( g_hTrace, "=========== Sequence Parameter Set ===========\n" );
     55#endif
    5256#else
    5357  fprintf( g_hTrace, "=========== Sequence Parameter Set ID: %d ===========\n", pSPS->getSPSId() );
     
    5862{
    5963#if H_MV_ENC_DEC_TRAC
     64#if H_MV_HLS10_GEN_FIX
     65  fprintf( g_hTrace, "=========== Picture Parameter Set LayerId: %d ===========\n", pPPS->getLayerId() );
     66#else
    6067  fprintf( g_hTrace, "=========== Picture Parameter Set ===========\n" );
     68#endif
    6169#else
    6270  fprintf( g_hTrace, "=========== Picture Parameter Set ID: %d ===========\n", pPPS->getPPSId() );
     
    241249    }
    242250  }
     251#if !H_MV_HLS10_PPS
    243252#if H_MV
    244253  if ( pcPPS->getLayerId() > 0 )
     
    254263  { 
    255264#endif 
     265#endif
    256266  WRITE_FLAG( pcPPS->getScalingListPresentFlag() ? 1 : 0,                          "pps_scaling_list_data_present_flag" );
    257267  if( pcPPS->getScalingListPresentFlag() )
     
    259269    codeScalingList( m_pcSlice->getScalingList() );
    260270  }
     271#if !H_MV_HLS10_PPS
    261272#if H_MV
    262273  }
     274#endif
    263275#endif
    264276#if PPS_FIX_DEPTH
     
    301313    if ( pcPPS->getPpsMultilayerExtensionFlag() )
    302314    {
     315#if H_MV_HLS10_PPS
     316      codePPSMultilayerExtension( pcPPS );
     317#else
    303318      WRITE_FLAG( pcPPS->getPocResetInfoPresentFlag( ) ? 1 : 0 , "poc_reset_info_present_flag" );
    304319      WRITE_FLAG( 0, "pps_extension_reserved_zero_flag" );
     320#endif
    305321    }
    306322
     
    675691#endif
    676692  WRITE_CODE( pcSPS->getMaxTLayers() - 1,  3,       "sps_max_sub_layers_minus1" );
     693#if H_MV_HLS10_MULTILAYERSPS
     694#if H_MV
     695  }
     696  else
     697  {
     698    WRITE_CODE( pcSPS->getSpsExtOrMaxSubLayersMinus1( ), 3, "sps_ext_or_max_sub_layers_minus1" );
     699  }
     700  if ( !pcSPS->getMultiLayerExtSpsFlag() )
     701  {
     702#endif
     703#endif
     704
    677705  WRITE_FLAG( pcSPS->getTemporalIdNestingFlag() ? 1 : 0,                             "sps_temporal_id_nesting_flag" );
    678706  codePTL(pcSPS->getPTL(), 1, pcSPS->getMaxTLayers() - 1);
     
    682710  WRITE_UVLC( pcSPS->getSPSId (),                   "sps_seq_parameter_set_id" );
    683711#if H_MV
     712#if H_MV_HLS10_MULTILAYERSPS
     713    if ( pcSPS->getMultiLayerExtSpsFlag() )
     714#else
    684715  if ( pcSPS->getLayerId() > 0 )
     716#endif
    685717  {
    686718    WRITE_FLAG( pcSPS->getUpdateRepFormatFlag( ) ? 1 : 0 , "update_rep_format_flag" );
     
    703735  WRITE_UVLC( pcSPS->getPicWidthInLumaSamples (),   "pic_width_in_luma_samples" );
    704736  WRITE_UVLC( pcSPS->getPicHeightInLumaSamples(),   "pic_height_in_luma_samples" );
     737#if !H_MV_HLS10_MULTILAYERSPS
    705738#if H_MV
    706739  }
     740#endif
    707741#endif
    708742  Window conf = pcSPS->getConformanceWindow();
     
    716750    WRITE_UVLC( conf.getWindowBottomOffset() / TComSPS::getWinUnitY(pcSPS->getChromaFormatIdc() ), "conf_win_bottom_offset" );
    717751  }
     752#if H_MV_HLS10_MULTILAYERSPS
    718753#if H_MV
     754}
     755#endif
     756#endif
     757
     758#if H_MV
     759#if H_MV_HLS10_MULTILAYERSPS
     760  if ( !pcSPS->getMultiLayerExtSpsFlag() )
     761#else
    719762  if ( pcSPS->getLayerId() == 0 )
     763#endif
    720764  {
    721765#endif
     
    727771  WRITE_UVLC( pcSPS->getBitsForPOC()-4,                 "log2_max_pic_order_cnt_lsb_minus4" );
    728772#if H_MV
     773#if H_MV_HLS10_MULTILAYERSPS
     774  if ( !pcSPS->getMultiLayerExtSpsFlag())
     775#else
    729776  if ( pcSPS->getLayerId() == 0 )
     777#endif
    730778  { 
    731779#endif
     
    758806  {
    759807#if H_MV
     808#if H_MV_HLS10_MULTILAYERSPS
     809    if ( pcSPS->getMultiLayerExtSpsFlag() )
     810#else
    760811    if ( pcSPS->getLayerId() > 0 )
     812#endif
    761813    {   
    762814      WRITE_FLAG( pcSPS->getSpsInferScalingListFlag( ) ? 1 : 0 , "sps_infer_scaling_list_flag" );
     
    865917{
    866918  WRITE_FLAG( pcSPS->getInterViewMvVertConstraintFlag() ? 1 : 0, "inter_view_mv_vert_constraint_flag" );
    867 
     919#if !H_MV_HLS10_PPS
    868920  WRITE_UVLC( pcSPS->getNumScaledRefLayerOffsets( ), "num_scaled_ref_layer_offsets" );
    869921
     
    880932    WRITE_FLAG( 0, "sps_multilayer_ext_reserved_zero_flag[ j ]" );
    881933  }
    882 }
     934#endif
     935}
     936
     937
     938#if H_MV_HLS10_PPS
     939Void TEncCavlc::codePPSMultilayerExtension(TComPPS* pcPPS)
     940{
     941  WRITE_FLAG( pcPPS->getPocResetInfoPresentFlag( ) ? 1 : 0 , "poc_reset_info_present_flag" );
     942  WRITE_FLAG( pcPPS->getPpsInferScalingListFlag( ) ? 1 : 0 , "pps_infer_scaling_list_flag" );
     943  WRITE_CODE( pcPPS->getPpsScalingListRefLayerId( ), 6, "pps_scaling_list_ref_layer_id" );
     944  WRITE_UVLC( 0, "num_ref_loc_offsets" );
     945}
     946#endif
     947
    883948#endif
    884949
     
    897962#endif
    898963}
    899 #endif
     964
     965
     966#endif
     967
     968
     969
    900970
    901971Void TEncCavlc::codeVPS( TComVPS* pcVPS )
     
    904974#if H_MV
    905975  WRITE_FLAG( pcVPS->getVpsBaseLayerInternalFlag( ) ? 1 : 0 , "vps_base_layer_internal_flag" );
     976#if H_MV_HLS10_GEN_VSP_BASE_LAYER_AVAIL
     977  WRITE_FLAG( pcVPS->getVpsBaseLayerAvailableFlag( ) ? 1 : 0 , "vps_base_layer_available_flag" );
     978#else // H_MV_HLS10_GEN
    906979  WRITE_FLAG( 1                                             , "vps_reserved_one_bit" );
     980#endif // H_MV_HLS10_GEN
    907981#else
    908982  WRITE_CODE( 3,                                    2,        "vps_reserved_three_2bits" );
     
    9301004    }
    9311005  }
    932 
    9331006  assert( pcVPS->getNumHrdParameters() <= MAX_VPS_NUM_HRD_PARAMETERS );
    9341007#if H_MV
    9351008  assert( pcVPS->getVpsMaxLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 );
    9361009  WRITE_CODE( pcVPS->getVpsMaxLayerId(), 6,                 "vps_max_layer_id" ); 
    937  
     1010#if H_MV_HLS10_GEN_FIX
     1011  WRITE_UVLC( pcVPS->getVpsNumLayerSetsMinus1(),  "vps_num_layer_sets_minus1" );
     1012#else
    9381013  WRITE_UVLC( pcVPS->getVpsNumLayerSetsMinus1(),  "vps_max_num_layer_sets_minus1" );
     1014#endif
    9391015  for( UInt opsIdx = 1; opsIdx <= pcVPS->getVpsNumLayerSetsMinus1(); opsIdx ++ )
    9401016  {
     
    10121088#if H_MV
    10131089Void TEncCavlc::codeVPSExtension( TComVPS *pcVPS )
    1014 
     1090{
     1091#if H_MV_HLS10_PTL
     1092  if( pcVPS->getMaxLayersMinus1() > 0  &&  pcVPS->getVpsBaseLayerInternalFlag() )
     1093  {
     1094    codePTL( pcVPS->getPTL( 1 ),0, pcVPS->getMaxSubLayersMinus1()  );
     1095  }
     1096#endif
     1097
    10151098  WRITE_FLAG( pcVPS->getSplittingFlag() ? 1 : 0,             "splitting_flag" );
    10161099
     
    10841167  }
    10851168
     1169#if H_MV_HLS10_ADD_LAYERSETS
     1170  if ( pcVPS->getNumIndependentLayers() > 1 )
     1171  {
     1172    WRITE_UVLC( pcVPS->getNumAddLayerSets( ), "num_add_layer_sets" );
     1173  }
     1174  for (Int i = 0; i < pcVPS->getNumAddLayerSets(); i++)
     1175  {
     1176    for (Int j = 1; j < pcVPS->getNumIndependentLayers(); j++)
     1177    {
     1178      WRITE_CODE( pcVPS->getHighestLayerIdxPlus1( i, j ), pcVPS->getHighestLayerIdxPlus1Len( j )  , "highest_layer_idx_plus1" );
     1179    }
     1180 
     1181  }
     1182#endif
     1183
     1184
    10861185  WRITE_FLAG( pcVPS->getVpsSubLayersMaxMinus1PresentFlag( ) ? 1 : 0 , "vps_sub_layers_max_minus1_present_flag" );
    10871186  if ( pcVPS->getVpsSubLayersMaxMinus1PresentFlag() )
     
    11191218  WRITE_UVLC( pcVPS->getVpsNumProfileTierLevelMinus1( ), "vps_num_profile_tier_level_minus1" );
    11201219
     1220#if H_MV_HLS10_PTL
     1221  Int offsetVal =  ( pcVPS->getMaxLayersMinus1() > 0  &&  pcVPS->getVpsBaseLayerInternalFlag() ) ? 2 : 1;   
     1222  for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 2 : 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ )
     1223  {
     1224    WRITE_FLAG( pcVPS->getVpsProfilePresentFlag( i ) ? 1 : 0, "vps_profile_present_flag[i]" );
     1225    codePTL( pcVPS->getPTL( offsetVal ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers() - 1 );
     1226    offsetVal++;
     1227  }
     1228#else
    11211229  for( Int i = 1; i <= pcVPS->getVpsNumProfileTierLevelMinus1(); i++ )
    11221230  {
     
    11241232    codePTL( pcVPS->getPTL( i ), pcVPS->getVpsProfilePresentFlag( i ), pcVPS->getMaxTLayers() - 1 );
    11251233  }
    1126 
     1234#endif
     1235
     1236#if !H_MV_HLS10_ADD_LAYERSETS
    11271237  if ( pcVPS->getNumIndependentLayers() > 1 )
    11281238  {
     
    11361246    }
    11371247  }
     1248#endif
     1249
    11381250  if (pcVPS->getNumLayerSets() > 1)
    11391251  {
     
    11461258
    11471259
     1260#if H_MV_HLS10_PTL_FIX
     1261  if (pcVPS->getVpsBaseLayerInternalFlag() )
     1262  { 
     1263    assert( pcVPS->getProfileTierLevelIdx(0,0) == pcVPS->inferProfileTierLevelIdx(0,0) );
     1264  }
     1265#endif
    11481266
    11491267
     
    11521270    if( i >= pcVPS->getNumLayerSets( ) )   
    11531271    {     
     1272#if !VPS_MISC_UPDATES
    11541273      WRITE_UVLC( pcVPS->getLayerSetIdxForOlsMinus1( i ),      "layer_set_idx_for_ols_minus1[i]" );
     1274#else
     1275      WRITE_CODE( pcVPS->getLayerSetIdxForOlsMinus1( i ), pcVPS->getLayerSetIdxForOlsMinus1Len( i ) ,      "layer_set_idx_for_ols_minus1[i]" );
     1276#endif
    11551277    }
    11561278
     
    11691291      }
    11701292    }       
    1171 
    1172 
     1293       
     1294#if H_MV_HLS10_PTL
     1295    for ( Int j = 0; j < pcVPS->getNumLayersInIdList( pcVPS->olsIdxToLsIdx(i)); j++ )
     1296    {   
     1297      if (pcVPS->getNecessaryLayerFlag( i, j ) && pcVPS->getVpsNumProfileTierLevelMinus1() > 0 )
     1298      {
     1299        WRITE_CODE( pcVPS->getProfileTierLevelIdx( i, j ), pcVPS->getProfileTierLevelIdxLen() ,"profile_tier_level_idx[ i ][ j ]" );   
     1300      }
     1301#if H_MV_HLS10_PTL_FIX
     1302      if (pcVPS->getNecessaryLayerFlag( i, j ) && pcVPS->getVpsNumProfileTierLevelMinus1() == 0 )
     1303      {
     1304        assert( pcVPS->getProfileTierLevelIdx( i , j ) == pcVPS->inferProfileTierLevelIdx( i, j ) );
     1305      }
     1306#endif
     1307
     1308    }
     1309#else
    11731310    if ( pcVPS->getProfileLevelTierIdxLen()  > 0 )
    11741311    {     
    11751312      WRITE_CODE( pcVPS->getProfileLevelTierIdx( i ), pcVPS->getProfileLevelTierIdxLen() ,"profile_level_tier_idx[ i ]" );   
    11761313    }
     1314#endif
    11771315    if( pcVPS->getNumOutputLayersInOutputLayerSet( i ) == 1 && pcVPS->getNumDirectRefLayers( pcVPS->getOlsHighestOutputLayerId( i ) ) > 0 )
    11781316    {
     
    12241362  }
    12251363
     1364#if !H_MV_HLS10_GEN_FIX
    12261365  WRITE_FLAG( 0, "vps_reserved_zero_flag" );
     1366#endif
    12271367  codeDpbSize( pcVPS );
    12281368
     
    13011441        for( Int k = 0; k < vps->getNumLayersInIdList( currLsIdx ); k++ )   
    13021442        {
     1443#if H_MV_HLS10_DBP_SIZE
     1444          if ( vps->getNecessaryLayerFlag( i, k ) && ( vps->getVpsBaseLayerInternalFlag() || ( vps->getLayerSetLayerIdList(vps->olsIdxToLsIdx(i),k) != 0 ) ))
     1445          {
     1446            WRITE_UVLC( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ), "max_vps_dec_pic_buffering_minus1" );
     1447          }
     1448          else
     1449          {
     1450            if ( vps->getNecessaryLayerFlag( i, k ) && ( j == 0 ) && ( k == 0 ) )
     1451            {
     1452              assert( dpbSize->getMaxVpsDecPicBufferingMinus1(i ,k, j ) ==  0 );
     1453            }
     1454          }
     1455#else
    13031456          WRITE_UVLC( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ), "max_vps_dec_pic_buffering_minus1" );
     1457#endif
    13041458        }
    13051459        WRITE_UVLC( dpbSize->getMaxVpsNumReorderPics( i, j ), "max_vps_num_reorder_pics" );
     
    13121466          for( Int k = 0; k < vps->getNumLayersInIdList( vps->olsIdxToLsIdx( i ) ); k++ )   
    13131467          {
    1314             assert( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) == dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) );
     1468#if H_MV_HLS10_DBP_SIZE
     1469            if ( vps->getNecessaryLayerFlag(i, k ) )
     1470            {           
     1471#endif
     1472              assert( dpbSize->getMaxVpsDecPicBufferingMinus1( i, k, j ) == dpbSize->getMaxVpsDecPicBufferingMinus1( i,k, j - 1 ) );
     1473#if H_MV_HLS10_DBP_SIZE
     1474            }
     1475#endif 
    13151476          }
    13161477          assert( dpbSize->getMaxVpsNumReorderPics      ( i, j ) ==  dpbSize->getMaxVpsNumReorderPics      ( i, j - 1 ) );
     
    13471508    pcRepFormat->inferChromaAndBitDepth(pcPrevRepFormat, true );
    13481509  }
     1510#if H_MV_HLS10_GEN_VSP_CONF_WIN
     1511  WRITE_FLAG( pcRepFormat->getConformanceWindowVpsFlag( ) ? 1 : 0 , "conformance_window_vps_flag" );
     1512  if ( pcRepFormat->getConformanceWindowVpsFlag() )
     1513  {   
     1514    WRITE_UVLC( pcRepFormat->getConfWinVpsLeftOffset( ), "conf_win_vps_left_offset" );
     1515    WRITE_UVLC( pcRepFormat->getConfWinVpsRightOffset( ), "conf_win_vps_right_offset" );
     1516    WRITE_UVLC( pcRepFormat->getConfWinVpsTopOffset( ), "conf_win_vps_top_offset" );
     1517    WRITE_UVLC( pcRepFormat->getConfWinVpsBottomOffset( ), "conf_win_vps_bottom_offset" );
     1518  }
     1519#endif
    13491520}
    13501521
     
    13711542  if( pcVPSVUI->getBitRatePresentVpsFlag( )  ||  pcVPSVUI->getPicRatePresentVpsFlag( ) )
    13721543  {
     1544#if H_MV_HLS10_VPS_VUI
     1545    for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i < pcVPS->getNumLayerSets(); i++ )
     1546#else
    13731547    for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i  <=  pcVPS->getVpsNumLayerSetsMinus1(); i++ )
     1548#endif
    13741549    {
    13751550      for( Int j = 0; j  <=  pcVPS->getMaxSubLayersInLayerSetMinus1( i ); j++ )
     
    14041579  else
    14051580  {
     1581#if H_MV_HLS10_VPS_VUI
     1582    assert( pcVPSVUI->getVpsNumVideoSignalInfoMinus1() == pcVPS->getMaxLayersMinus1() - ( pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1)  );
     1583#else
    14061584    pcVPSVUI->setVpsNumVideoSignalInfoMinus1( pcVPS->getMaxLayersMinus1() );
     1585#endif
    14071586  }
    14081587
     
    14171596  if( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() && pcVPSVUI->getVpsNumVideoSignalInfoMinus1() > 0 )
    14181597  {
     1598#if I0045_VPS_VUI_VST_PARAMS
     1599    for( Int i = pcVPS->getVpsBaseLayerInternalFlag() ? 0 : 1; i <=  pcVPS->getMaxLayersMinus1(); i++ )
     1600    {
     1601      WRITE_CODE( pcVPSVUI->getVpsVideoSignalInfoIdx( i ), 4, "vps_video_signal_info_idx" );
     1602    }
     1603#else
    14191604    for( Int i = 1; i <=  pcVPS->getMaxLayersMinus1(); i++ )
    14201605    {
     
    14291614      assert( pcVPSVUI->getVpsVideoSignalInfoIdx( i  ) == ( pcVPSVUI->getVideoSignalInfoIdxPresentFlag() ? 0 : i ) );
    14301615    }
     1616#endif
    14311617  }
    14321618  WRITE_FLAG( pcVPSVUI->getTilesNotInUseFlag( ) ? 1 : 0 , "tiles_not_in_use_flag" );
     
    14451631      for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ) ; j++ )
    14461632      { 
     1633#if H_MV_HLS10_REF_PRED_LAYERS
     1634        Int layerIdx = pcVPS->getLayerIdInVps(pcVPS->getIdRefLayer(pcVPS->getLayerIdInNuh( i ) , j  )); 
     1635#else
    14471636        Int layerIdx = pcVPS->getLayerIdInVps(pcVPS->getRefLayerId(pcVPS->getLayerIdInNuh( i ) , j  )); 
     1637#endif
    14481638        if( pcVPSVUI->getTilesInUseFlag( i )  &&  pcVPSVUI->getTilesInUseFlag( layerIdx ) ) 
    14491639        {
     
    14631653    }
    14641654  }
     1655#if H_MV_HLS10_VPS_VUI
     1656  WRITE_FLAG( pcVPSVUI->getSingleLayerForNonIrapFlag( ) ? 1 : 0 , "single_layer_for_non_irap_flag" );
     1657  WRITE_FLAG( pcVPSVUI->getHigherLayerIrapSkipFlag( ) ? 1 : 0 , "higher_layer_irap_skip_flag" );
     1658#else
    14651659  WRITE_CODE( 0, 3, "vps_vui_reserved_zero_3bits" );
     1660#endif
    14661661  WRITE_FLAG( pcVPSVUI->getIlpRestrictedRefLayersFlag( ) ? 1 : 0 , "ilp_restricted_ref_layers_flag" );
    14671662
     
    14721667      for( Int j = 0; j < pcVPS->getNumDirectRefLayers( pcVPS->getLayerIdInNuh( i ) ); j++ )
    14731668      {
     1669#if H_MV_HLS10_REF_PRED_LAYERS
     1670        if( pcVPS->getVpsBaseLayerInternalFlag() || pcVPS->getIdRefLayer( pcVPS->getLayerIdInNuh( i ), j ) > 0 )
     1671#else
    14741672        if( pcVPS->getVpsBaseLayerInternalFlag() || pcVPS->getRefLayerId( pcVPS->getLayerIdInNuh( i ), j ) > 0 )
     1673#endif
    14751674        {       
    14761675          WRITE_UVLC( pcVPSVUI->getMinSpatialSegmentOffsetPlus1( i, j ), "min_spatial_segment_offset_plus1" );
     
    15141713
    15151714  assert ( vpsVuiBspHrdP );
    1516 
    15171715 
     1716#if H_MV_HLS10_VPS_VUI_BSP
     1717  WRITE_UVLC( vpsVuiBspHrdP->getVpsNumAddHrdParams( ), "vps_num_add_hrd_params" );
     1718
     1719  for( Int i = pcVPS->getNumHrdParameters(); i < pcVPS->getNumHrdParameters() + vpsVuiBspHrdP->getVpsNumAddHrdParams(); i++ )
     1720  { 
     1721    if( i > 0 ) 
     1722    {
     1723      WRITE_FLAG( vpsVuiBspHrdP->getCprmsAddPresentFlag( i ) ? 1 : 0 , "cprms_add_present_flag" );
     1724    }
     1725    WRITE_UVLC( vpsVuiBspHrdP->getNumSubLayerHrdMinus1( i ), "num_sub_layer_hrd_minus1" );
     1726    TComHRD* hrdParameters = vpsVuiBspHrdP->getHrdParametermeters( i );
     1727    codeHrdParameters( hrdParameters, vpsVuiBspHrdP->getCprmsAddPresentFlag( i ), vpsVuiBspHrdP->getNumSubLayerHrdMinus1( i ) );     
     1728  }
     1729
     1730  for( Int h = 1; h < pcVPS->getNumOutputLayerSets(); h++ )
     1731  { 
     1732    WRITE_UVLC( vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ), "num_signalled_partitioning_schemes" );
     1733
     1734    for( Int j = 1; j < vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ) + 1; j++ )
     1735    { 
     1736      WRITE_UVLC( vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ), "num_partitions_in_scheme_minus1" );
     1737      for( Int k = 0; k  <=  vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ); k++ ) 
     1738      {
     1739        for( Int r = 0; r < pcVPS->getNumLayersInIdList(pcVPS->olsIdxToLsIdx( h ) )   ; r++ ) 
     1740        {
     1741          WRITE_FLAG( vpsVuiBspHrdP->getLayerIncludedInPartitionFlag( h, j, k, r ) ? 1 : 0 , "layer_included_in_partition_flag" );
     1742        }
     1743      }
     1744    } 
     1745    for( Int i = 0; i < vpsVuiBspHrdP->getNumSignalledPartitioningSchemes( h ) + 1; i++ ) 
     1746    {
     1747      for( Int t = 0; t  <=  pcVPS->getMaxSubLayersInLayerSetMinus1( pcVPS->olsIdxToLsIdx( h ) ); t++ )
     1748      { 
     1749        WRITE_UVLC( vpsVuiBspHrdP->getNumBspSchedulesMinus1( h, i, t ), "num_bsp_schedules_minus1" );
     1750        for( Int j = 0; j  <=  vpsVuiBspHrdP->getNumBspSchedulesMinus1( h, i, t ); j++ ) 
     1751        {
     1752          for( Int k = 0; k  <=  vpsVuiBspHrdP->getNumPartitionsInSchemeMinus1( h, j ); k++ )
     1753          { 
     1754            WRITE_CODE( vpsVuiBspHrdP->getBspHrdIdx( h, i, t, j, k ), vpsVuiBspHrdP->getBspHrdIdxLen( pcVPS ), "bsp_hrd_idx" );
     1755            WRITE_UVLC( vpsVuiBspHrdP->getBspSchedIdx( h, i, t, j, k ), "bsp_sched_idx" );
     1756          } 
     1757        }
     1758      } 
     1759    }
     1760  } 
     1761
     1762#else // H_MV_HLS10_GEN
    15181763  WRITE_UVLC( vpsVuiBspHrdP->getVpsNumBspHrdParametersMinus1( ), "vps_num_bsp_hrd_parameters_minus1" );
    15191764  for( Int i = 0; i <= vpsVuiBspHrdP->getVpsNumBspHrdParametersMinus1( ); i++ )
     
    15521797      }
    15531798    } 
    1554   } 
     1799  }
     1800#endif 
    15551801
    1556 
    15571802#endif
    15581803
     
    17331978      esb++;
    17341979      WRITE_FLAG( pcSlice->getDiscardableFlag( ) ? 1 : 0 , "discardable_flag" );
     1980#if NON_REF_NAL_TYPE_DISCARDABLE
     1981      if (pcSlice->getDiscardableFlag( ))
     1982      {
     1983        assert(pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_TRAIL_R &&
     1984          pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_TSA_R &&
     1985          pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_STSA_R &&
     1986          pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_RADL_R &&
     1987          pcSlice->getNalUnitType() != NAL_UNIT_CODED_SLICE_RASL_R);
     1988      }
     1989#endif
    17351990    }
    17361991
     
    18932148      if (pcSlice->getSPS()->getTMVPFlagsPresent())
    18942149      {
     2150#if I0044_SLICE_TMVP
     2151        WRITE_FLAG( pcSlice->getEnableTMVPFlag() ? 1 : 0, "slice_temporal_mvp_enabled_flag" );
     2152#else
    18952153        WRITE_FLAG( pcSlice->getEnableTMVPFlag() ? 1 : 0, "slice_temporal_mvp_enable_flag" );
     2154#endif
    18962155      }
    18972156    }
     
    21262385  }
    21272386#if H_3D
     2387#if LGE_FCO_I0116
     2388  if( pcSlice->getVPS()->hasCamParInSliceHeader( pcSlice->getViewIndex() ) && pcSlice->getIsDepth() )
     2389#else
    21282390  if( pcSlice->getVPS()->hasCamParInSliceHeader( pcSlice->getViewIndex() ) && !pcSlice->getIsDepth() )
     2391#endif
    21292392  {
    21302393    for( UInt uiId = 0; uiId < pcSlice->getViewIndex(); uiId++ )
     
    23122575  WRITE_FLAG(ptl->getFrameOnlyConstraintFlag(), "general_frame_only_constraint_flag");
    23132576 
     2577#if H_MV_HLS10_PTL
     2578#if H_MV_HLS10_PTL_INFER_FIX
     2579  if( ptl->getV2ConstraintsPresentFlag() )
     2580#else
     2581  if( ptl->getProfileIdc( ) ==  4 || ptl->getProfileCompatibilityFlag( 4 )  ||
     2582    ptl->getProfileIdc( ) ==  5 || ptl->getProfileCompatibilityFlag( 5 )  ||
     2583    ptl->getProfileIdc( ) ==  6 || ptl->getProfileCompatibilityFlag( 6 )  ||
     2584    ptl->getProfileIdc( ) ==  7 || ptl->getProfileCompatibilityFlag( 7 ) )
     2585#endif
     2586  {
     2587    WRITE_FLAG( ptl->getMax12bitConstraintFlag( ) ? 1 : 0 , "max_12bit_constraint_flag" );
     2588    WRITE_FLAG( ptl->getMax10bitConstraintFlag( ) ? 1 : 0 , "max_10bit_constraint_flag" );
     2589    WRITE_FLAG( ptl->getMax8bitConstraintFlag( ) ? 1 : 0 , "max_8bit_constraint_flag" );
     2590    WRITE_FLAG( ptl->getMax422chromaConstraintFlag( ) ? 1 : 0 , "max_422chroma_constraint_flag" );
     2591    WRITE_FLAG( ptl->getMax420chromaConstraintFlag( ) ? 1 : 0 , "max_420chroma_constraint_flag" );
     2592    WRITE_FLAG( ptl->getMaxMonochromeConstraintFlag( ) ? 1 : 0 , "max_monochrome_constraint_flag" );
     2593    WRITE_FLAG( ptl->getIntraConstraintFlag( ) ? 1 : 0 , "intra_constraint_flag" );
     2594    WRITE_FLAG( ptl->getOnePictureOnlyConstraintFlag( ) ? 1 : 0 , "one_picture_only_constraint_flag" );
     2595    WRITE_FLAG( ptl->getLowerBitRateConstraintFlag( ) ? 1 : 0 , "lower_bit_rate_constraint_flag" );
     2596    WRITE_CODE( 0, 16, "XXX_reserved_zero_34bits[0..15]");
     2597    WRITE_CODE( 0, 16, "XXX_reserved_zero_34bits[16..31]");
     2598    WRITE_CODE( 0, 2 , "XXX_reserved_zero_34bits[32..33]");
     2599  }
     2600  else
     2601  {
     2602    WRITE_CODE( 0, 16, "XXX_reserved_zero_43bits[0..15]");
     2603    WRITE_CODE( 0, 16, "XXX_reserved_zero_43bits[16..31]");
     2604    WRITE_CODE( 0, 11, "XXX_reserved_zero_43bits[32..42]");
     2605  }
     2606#if H_MV_HLS10_PTL_INFER_FIX
     2607    if( ptl->getInbldPresentFlag() )
     2608#else
     2609  if( ( ptl->getProfileIdc() >= 1 && ptl->getProfileIdc() <= 5 )  ||
     2610    ptl->getProfileCompatibilityFlag( 1 ) || ptl->getProfileCompatibilityFlag( 2 )  ||
     2611    ptl->getProfileCompatibilityFlag( 3 ) || ptl->getProfileCompatibilityFlag( 4 )  ||
     2612    ptl->getProfileCompatibilityFlag( 5 ) )
     2613#endif
     2614  {
     2615    WRITE_FLAG( ptl->getInbldFlag( ) ? 1 : 0 , "inbld_flag" );
     2616  }
     2617  else
     2618  {
     2619    WRITE_FLAG(0, "reserved_zero_bit");
     2620  }
     2621#else
    23142622  WRITE_CODE(0 , 16, "XXX_reserved_zero_44bits[0..15]");
    23152623  WRITE_CODE(0 , 16, "XXX_reserved_zero_44bits[16..31]");
    23162624  WRITE_CODE(0 , 12, "XXX_reserved_zero_44bits[32..43]");
    2317     }
     2625#endif
     2626}
    23182627
    23192628/**
  • trunk/source/Lib/TLibEncoder/TEncCavlc.h

    r1039 r1066  
    107107  Void  codePPS                 ( TComPPS* pcPPS );
    108108
     109#if H_MV_HLS10_PPS
     110#if H_MV
     111  Void codePPSMultilayerExtension( TComPPS* pcPPS );
     112#endif
     113#endif
     114
    109115#if H_3D
    110116  Void  codePPSExtension        ( TComPPS* pcPPS );
  • trunk/source/Lib/TLibEncoder/TEncCu.cpp

    r1039 r1066  
    538538#if MTK_I0099_VPS_EX2
    539539#if MTK_I0099_FIX
     540#if LGE_FCO_I0116
     541      if(depthMapDetect && !bIntraSliceDetect && !rapPic && ( m_pcEncCfg->getUseQTL() || bLimQtPredFalg ) && pcTexture->getReconMark())
     542#else
    540543      if(depthMapDetect && !bIntraSliceDetect && !rapPic && ( m_pcEncCfg->getUseQTL() || bLimQtPredFalg ))
     544#endif
    541545#else
    542546      if(depthMapDetect && !bIntraSliceDetect && !rapPic && bLimQtPredFalg)
     
    25882592  // fetch virtual depth block
    25892593  UInt uiDepthStride = 0;
     2594#if LGE_FCO_I0116
     2595  Pel* pDepthPels = rpcTempCU->getVirtualDepthBlock(rpcTempCU->getZorderIdxInCU(), uiWidth, uiHeight, uiDepthStride);
     2596#else
    25902597  Pel* pDepthPels = rpcTempCU->getVirtualDepthBlock(0, uiWidth, uiHeight, uiDepthStride);
     2598#endif
    25912599  AOF( pDepthPels != NULL );
    25922600  AOF( uiDepthStride != 0 );
  • trunk/source/Lib/TLibEncoder/TEncEntropy.cpp

    r1039 r1066  
    185185  else
    186186  {
     187#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     188    Int ICEnableCandidate = pcCU->getSlice()->getICEnableCandidate(pcCU->getSlice()->getDepth());
     189    Int ICEnableNum = pcCU->getSlice()->getICEnableNum(pcCU->getSlice()->getDepth());
     190    ICEnableCandidate++;
     191    if(pcCU->getICFlag(uiAbsPartIdx))
     192    {
     193      ICEnableNum++;
     194    }
     195    pcCU->getSlice()->setICEnableCandidate(pcCU->getSlice()->getDepth(), ICEnableCandidate);
     196    pcCU->getSlice()->setICEnableNum(pcCU->getSlice()->getDepth(), ICEnableNum);
     197#else
    187198    g_aICEnableCANDIDATE[pcCU->getSlice()->getDepth()]++;
    188199    if(pcCU->getICFlag(uiAbsPartIdx))
     
    190201      g_aICEnableNUM[pcCU->getSlice()->getDepth()]++;
    191202    }
     203#endif
    192204  }
    193205  if( pcCU->isICFlagRequired( uiAbsPartIdx ) )
  • trunk/source/Lib/TLibEncoder/TEncGOP.cpp

    r1039 r1066  
    160160#endif
    161161#endif
    162 
     162#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     163  m_aICEnableCandidate           = pcTEncTop->getICEnableCandidate();
     164  m_aICEnableNum           = pcTEncTop->getICEnableNum();
     165#endif
    163166#if KWU_FIX_URQ
    164167  m_pcRateCtrl           = pcTEncTop->getRateCtrl();
     
    968971#endif   
    969972#endif
     973#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     974    pcSlice->setICEnableCandidate( m_aICEnableCandidate );         
     975    pcSlice->setICEnableNum( m_aICEnableNum );         
     976#endif
    970977    //  Slice info. refinement
    971978#if H_MV
  • trunk/source/Lib/TLibEncoder/TEncGOP.h

    r964 r1066  
    116116#endif
    117117#endif
     118#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     119  Int *m_aICEnableCandidate;
     120  Int *m_aICEnableNum;
     121#endif
    118122  //--Adaptive Loop filter
    119123  TEncSampleAdaptiveOffset*  m_pcSAO;
  • trunk/source/Lib/TLibEncoder/TEncSbac.cpp

    r1039 r1066  
    732732  UInt uiTexturePart = eSize;
    733733#if MTK_I0099_VPS_EX2
     734#if LGE_FCO_I0116
     735  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && bLimQtPredFlag && pcTexture->getReconMark())
     736#else
    734737  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && bLimQtPredFlag )
     738#endif
    735739#else
    736740  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && sps->getUseQTL() && sps->getUsePC() )
     
    11061110
    11071111#if MTK_I0099_VPS_EX2
     1112#if LGE_FCO_I0116
     1113  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && bLimQtPredFlag && pcTexture->getReconMark() )
     1114#else
    11081115  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && bLimQtPredFlag  )
     1116#endif
    11091117#else
    11101118  if(bDepthMapDetect && !bIntraSliceDetect && !rapPic && pcCU->getPic()->getReduceBitsFlag() && sps->getUseQTL() && sps->getUsePC())
  • trunk/source/Lib/TLibEncoder/TEncSearch.cpp

    r1039 r1066  
    30833083        Double dLambda;
    30843084        if ( m_pcRdCost->getUseLambdaScaleVSO() )
     3085        {
    30853086          dLambda = m_pcRdCost->getUseRenModel() ? m_pcRdCost->getLambdaVSO() : m_pcRdCost->getSqrtLambdaVSO();
     3087        }
    30863088        else       
     3089        {
    30873090          dLambda = m_pcRdCost->getSqrtLambda();       
    3088 
    3089         Double cost      = (Double)uiSad + (Double)iModeBits * m_pcRdCost->getSqrtLambda();
     3091        }
     3092
     3093        Double cost      = (Double)uiSad + (Double)iModeBits * dLambda;
    30903094#else
    30913095        Double cost      = (Double)uiSad + (Double)iModeBits * m_pcRdCost->getSqrtLambda();
     
    32123216#if H_3D_FCO
    32133217            TComPic* picTexture  = pcCU->getSlice()->getIvPic(false, pcCU->getSlice()->getViewIndex() );
     3218#if LGE_FCO_I0116
     3219            if ( !picTexture->getReconMark() && (DMM4_IDX == dmmType ) )
     3220#else
    32143221            if ( !picTexture->getReconMark() && (DMM3_IDX == dmmType || DMM4_IDX == dmmType ) )
     3222#endif
    32153223            {
    32163224                continue;
  • trunk/source/Lib/TLibEncoder/TEncTop.cpp

    r1039 r1066  
    7272  ContextModel::buildNextStateTable();
    7373#endif
     74#if H_MV_HLS10_GEN_FIX
     75#if H_MV
     76  m_iNumSubstreams         = 0;
     77#endif
     78#endif
    7479
    7580  m_pcSbacCoders           = NULL;
     
    8489  m_ivPicLists = NULL;
    8590#endif
     91#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     92  m_aICEnableCandidate = NULL;
     93  m_aICEnableNum = NULL;
     94#endif
    8695}
    8796
     
    227236      for (Int iCIIdx = 0; iCIIdx < CI_NUM; iCIIdx ++ )
    228237      {
     238#if H_MV_HLS10_GEN_FIX
     239#if H_MV
     240        xDelete( false, m_pppcRDSbacCoder, iDepth, iCIIdx);
     241        xDelete( false, m_pppcBinCoderCABAC, iDepth, iCIIdx);
     242#else
    229243        delete m_pppcRDSbacCoder[iDepth][iCIIdx];
    230244        delete m_pppcBinCoderCABAC[iDepth][iCIIdx];
     245#endif
     246#endif
    231247      }
    232248    }
     
    234250    for ( iDepth = 0; iDepth < g_uiMaxCUDepth+1; iDepth++ )
    235251    {
     252#if H_MV_HLS10_GEN_FIX
     253#if H_MV
     254      xDelete( true, m_pppcRDSbacCoder  , iDepth);
     255      xDelete( true, m_pppcBinCoderCABAC, iDepth);
     256#else
    236257      delete [] m_pppcRDSbacCoder[iDepth];
    237258      delete [] m_pppcBinCoderCABAC[iDepth];
    238     }
    239    
     259#endif
     260#endif
     261    }
     262
     263#if H_MV_HLS10_GEN_FIX
     264#if H_MV
     265     xDelete( true, m_pppcRDSbacCoder  );
     266     xDelete( true, m_pppcBinCoderCABAC);
     267#else
    240268    delete [] m_pppcRDSbacCoder;
    241269    delete [] m_pppcBinCoderCABAC;
    242 
     270#endif
     271#endif
    243272    for ( UInt ui = 0; ui < m_iNumSubstreams; ui++ )
    244273    {
     
    247276        for (Int iCIIdx = 0; iCIIdx < CI_NUM; iCIIdx ++ )
    248277        {
     278#if H_MV_HLS10_GEN_FIX
     279#if H_MV
     280          xDelete(false, m_ppppcRDSbacCoders  ,ui, iDepth, iCIIdx);
     281          xDelete(false, m_ppppcBinCodersCABAC,ui, iDepth, iCIIdx);
     282#else
    249283          delete m_ppppcRDSbacCoders  [ui][iDepth][iCIIdx];
    250284          delete m_ppppcBinCodersCABAC[ui][iDepth][iCIIdx];
     285#endif
     286#endif
    251287        }
    252288      }
     
    254290      for ( iDepth = 0; iDepth < g_uiMaxCUDepth+1; iDepth++ )
    255291      {
     292#if H_MV_HLS10_GEN_FIX
     293#if H_MV
     294        xDelete(true, m_ppppcRDSbacCoders  ,ui, iDepth);
     295        xDelete(true, m_ppppcBinCodersCABAC,ui, iDepth);       
     296#else
    256297        delete [] m_ppppcRDSbacCoders  [ui][iDepth];
    257298        delete [] m_ppppcBinCodersCABAC[ui][iDepth];
    258       }
     299#endif
     300#endif
     301      }
     302
     303
     304#if H_MV_HLS10_GEN_FIX
     305#if H_MV
     306      xDelete(true, m_ppppcRDSbacCoders,   ui);
     307      xDelete(true, m_ppppcBinCodersCABAC, ui);     
     308#else
    259309      delete[] m_ppppcRDSbacCoders  [ui];
    260310      delete[] m_ppppcBinCodersCABAC[ui];
    261     }
     311#endif
     312#endif
     313    }
     314#if H_MV_HLS10_GEN_FIX
     315#if H_MV
     316    xDelete(true, m_ppppcRDSbacCoders    ) ;
     317    xDelete(true, m_ppppcBinCodersCABAC);
     318    xDelete(true, m_pcSbacCoders);
     319    xDelete(true, m_pcBinCoderCABACs);
     320    xDelete(true, m_pcRDGoOnSbacCoders); 
     321    xDelete(true, m_pcRDGoOnBinCodersCABAC);
     322    xDelete(true, m_pcBitCounters);
     323    xDelete(true, m_pcRdCosts);
     324#else
    262325    delete[] m_ppppcRDSbacCoders;
    263326    delete[] m_ppppcBinCodersCABAC;
     
    268331  delete[] m_pcBitCounters;
    269332  delete[] m_pcRdCosts;
    270  
     333#endif
     334#endif
     335
    271336#if !H_MV
    272337    // destroy ROM
     
    305370
    306371  xInitPPSforTiles();
    307 
     372#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     373  m_aICEnableCandidate = new Int[ 10 ];
     374  m_aICEnableNum = new Int[ 10 ];
     375
     376  for(int i=0;i<10;i++)
     377  {
     378    m_aICEnableCandidate[i]=0;
     379    m_aICEnableNum[i]=0;
     380  }
     381#endif
    308382  // initialize processing unit classes
    309383  m_cGOPEncoder.  init( this );
     
    695769#if H_MV 
    696770  m_cSPS.setUpdateRepFormatFlag           ( false );   
     771#if H_MV_HLS10_MULTILAYERSPS 
     772  Bool multiLayerExtensionFlag  = ( getLayerId() > 0 ) && ( m_cVPS->getNumRefLayers( getLayerId() ) > 0 );
     773 
     774  m_cSPS.setSpsExtOrMaxSubLayersMinus1( multiLayerExtensionFlag ? 7 : m_maxTempLayer - 1 );
     775  if ( multiLayerExtensionFlag )
     776  {
     777    m_cSPS.setSpsInferScalingListFlag   ( true );
     778    m_cSPS.setSpsScalingListRefLayerId( m_cVPS->getIdRefLayer( getLayerId(), 0 ) );
     779  }
     780#else
    697781  m_cSPS.setSpsInferScalingListFlag       ( m_layerId > 0 && m_cVPS->getInDirectDependencyFlag( getLayerIdInVps(), 0 ) );
    698782  m_cSPS.setSpsScalingListRefLayerId      ( 0              );
    699   m_cSPS.setSpsExtensionPresentFlag              ( true );
     783#endif
     784  m_cSPS.setSpsExtensionPresentFlag       ( true );
    700785  m_cSPS.setSpsMultilayerExtensionFlag    ( true );
    701786#if H_3D
     
    778863    for( Int is = 0; is < targetDecLayerIdList.size(); is++  )
    779864    {
     865#if H_MV_HLS10_ADD_LAYERSETS
     866      if ( m_cVPS->getNecessaryLayerFlag( ols, is ) )
     867      {     
     868        m_cSPS.inferSpsMaxDecPicBufferingMinus1( m_cVPS, ols, targetDecLayerIdList[is], true );       
     869      }
     870#else
    780871      m_cSPS.inferSpsMaxDecPicBufferingMinus1( m_cVPS, ols, targetDecLayerIdList[is], true );       
    781     }
    782   }
    783 
     872#endif
     873    }
     874  }
     875#if !H_MV_HLS10_ADD_LAYERSETS
    784876  m_cVPS->inferDbpSizeLayerSetZero( &m_cSPS, true );
     877#endif
    785878#endif
    786879  m_cSPS.setPCMBitDepthLuma (g_uiPCMBitDepthLuma);
  • trunk/source/Lib/TLibEncoder/TEncTop.h

    r872 r1066  
    8080  TComPicLists*           m_ivPicLists;                   ///< access to picture lists of other layers
    8181#endif
     82#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     83  Int *m_aICEnableCandidate;
     84  Int *m_aICEnableNum;
     85#endif
    8286  // encoder search
    8387  TEncSearch              m_cSearch;                      ///< encoder search class
     
    146150  Void  xInitPPSforTiles  ();
    147151  Void  xInitRPS          (Bool isFieldCoding);           ///< initialize PPS from encoder options
    148 
     152#if H_MV_HLS10_GEN_FIX
     153#if H_MV
     154
     155  template <class T>     Void  xDelete( Bool ar, T inArray )
     156  {
     157    if( inArray != NULL)
     158    {
     159      if ( ar )
     160      {     
     161        delete[] inArray;
     162      }
     163      else
     164      {
     165        delete inArray;
     166      }
     167    }
     168  }
     169
     170  template <class T>     Void  xDelete( Bool ar, T inArray, Int idx1 )
     171  {
     172    if( inArray != NULL)
     173    {
     174        xDelete( ar, inArray[idx1]);
     175    }
     176  }
     177
     178  template <class T>     Void  xDelete( Bool ar, T inArray, Int idx1, Int idx2 )
     179  {
     180    if( inArray != NULL )
     181    {
     182      xDelete( ar, inArray[idx1], idx2 );
     183    }
     184  }
     185
     186  template <class T>     Void  xDelete( Bool ar, T inArray, Int idx1, Int idx2, Int idx3 )
     187  {
     188    if( inArray != NULL )
     189    {
     190      xDelete( ar, inArray[idx1], idx2, idx3 );
     191    }
     192  }
     193
     194#endif
     195#endif
    149196public:
    150197  TEncTop();
     
    161208#if H_MV 
    162209  TComPicLists* getIvPicLists() { return m_ivPicLists; }
     210#endif
     211#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     212  Int *getICEnableCandidate() { return m_aICEnableCandidate; }
     213  Int *getICEnableNum() { return m_aICEnableNum; }
    163214#endif
    164215  Void      deletePicBuffer ();
     
    221272  Void                    setIvPicLists         ( TComPicLists* picLists) { m_ivPicLists = picLists; }
    222273#endif
     274#if MTK_LOW_LATENCY_IC_ENCODING_H0086_FIX
     275  Void                    setICEnableCandidate         ( Int* ICEnableCandidate) { m_aICEnableCandidate = ICEnableCandidate; }
     276  Void                    setICEnableNum         ( Int* ICEnableNum) { m_aICEnableNum = ICEnableNum; }
     277#endif
    223278  // -------------------------------------------------------------------------------------------------------------------
    224279  // encoder function
Note: See TracChangeset for help on using the changeset viewer.