Changeset 805 in SHVCSoftware for branches/SHM-6-dev/source/Lib


Ignore:
Timestamp:
17 Jun 2014, 16:58:15 (11 years ago)
Author:
nokia
Message:

Fix layer set array sizes

Location:
branches/SHM-6-dev/source/Lib
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-6-dev/source/Lib/TLibCommon/TComRom.h

    r778 r805  
    159159
    160160#ifndef ENC_DEC_TRACE
    161 # define ENC_DEC_TRACE 1
     161# define ENC_DEC_TRACE 0
    162162#endif
    163163
  • branches/SHM-6-dev/source/Lib/TLibCommon/TComSlice.cpp

    r799 r805  
    27112711  setNumIndependentLayers(numIndependentLayers);
    27122712}
     2713
     2714void TComVPS::setLayerIdIncludedFlagsForAddLayerSets()
     2715{
     2716  for (UInt i = 0; i < getNumAddLayerSets(); i++)
     2717  {
     2718    for (UInt j = 1; j < getNumIndependentLayers(); j++)
     2719    {
     2720      Int layerNum = 0;
     2721      Int lsIdx = getVpsNumLayerSetsMinus1() + 1 + i;
     2722      for (Int layerId = 0; layerId < MAX_VPS_LAYER_ID_PLUS1; layerId++)
     2723      {
     2724        setLayerIdIncludedFlag(false, lsIdx, layerId);
     2725      }
     2726      for (Int treeIdx = 1; treeIdx < getNumIndependentLayers(); treeIdx++)
     2727      {
     2728        for (Int layerCnt = 0; layerCnt < getHighestLayerIdxPlus1(i, j); layerCnt++)
     2729        {
     2730          setLayerSetLayerIdList(lsIdx, layerNum, getTreePartitionLayerId(treeIdx, layerCnt));
     2731          setLayerIdIncludedFlag(true, lsIdx, getTreePartitionLayerId(treeIdx, layerCnt));
     2732          layerNum++;
     2733        }
     2734      }
     2735      setNumLayersInIdList(lsIdx, layerNum);
     2736    }
     2737  }
     2738}
     2739
    27132740#endif
    27142741
  • branches/SHM-6-dev/source/Lib/TLibCommon/TComSlice.h

    r798 r805  
    140140 
    141141  Void  create  (Int numberOfEntries);
    142 #if Q0078_ADD_LAYER_SETS
    143   Void  copy(TComRPSList& a);
    144 #endif
    145142  Void  destroy();
    146143
     
    487484#if SVC_EXTENSION
    488485#if DERIVE_LAYER_ID_LIST_VARIABLES
     486#if Q0078_ADD_LAYER_SETS
     487  Int         m_layerSetLayerIdList[MAX_VPS_LAYER_SETS_PLUS1 + MAX_NUM_ADD_LAYER_SETS][MAX_VPS_LAYER_ID_PLUS1];
     488  Int         m_numLayerInIdList[MAX_VPS_LAYER_SETS_PLUS1 + MAX_NUM_ADD_LAYER_SETS];
     489#else
    489490  Int         m_layerSetLayerIdList[MAX_VPS_LAYER_SETS_PLUS1][MAX_VPS_LAYER_ID_PLUS1];
    490491  Int         m_numLayerInIdList[MAX_VPS_LAYER_SETS_PLUS1];
     492#endif
    491493#endif
    492494#if !P0125_REVERT_VPS_EXTN_OFFSET_TO_RESERVED
     
    498500  UInt        m_numLayerSets;
    499501#if Q0078_ADD_LAYER_SETS
    500   Bool        m_layerIdIncludedFlag[2*MAX_VPS_LAYER_SETS_PLUS1][MAX_VPS_LAYER_ID_PLUS1];
     502  UInt        m_vpsNumLayerSetsMinus1;
     503  Bool        m_layerIdIncludedFlag[MAX_VPS_LAYER_SETS_PLUS1 + MAX_NUM_ADD_LAYER_SETS][MAX_VPS_LAYER_ID_PLUS1];
    501504#else
    502505  Bool        m_layerIdIncludedFlag[MAX_VPS_LAYER_SETS_PLUS1][MAX_VPS_LAYER_ID_PLUS1];
     
    520523#endif
    521524#if BITRATE_PICRATE_SIGNALLING
     525#if Q0078_ADD_LAYER_SETS
     526  UInt       m_maxSLInLayerSetMinus1[MAX_VPS_LAYER_SETS_PLUS1 + MAX_NUM_ADD_LAYER_SETS];
     527#else
    522528  UInt       m_maxSLInLayerSetMinus1[MAX_VPS_LAYER_SETS_PLUS1];
     529#endif
    523530#endif
    524531   
     
    536543  // Target output layer signalling related
    537544  UInt       m_numOutputLayerSets;
     545#if Q0078_ADD_LAYER_SETS
     546  UInt       m_outputLayerSetIdx[MAX_VPS_LAYER_SETS_PLUS1 + 2*MAX_NUM_ADD_LAYER_SETS];
     547  Bool       m_outputLayerFlag[MAX_VPS_LAYER_SETS_PLUS1 + 2*MAX_NUM_ADD_LAYER_SETS][MAX_VPS_LAYER_ID_PLUS1];
     548#else
    538549  UInt       m_outputLayerSetIdx[MAX_VPS_LAYER_SETS_PLUS1];
    539550  Bool       m_outputLayerFlag[MAX_VPS_LAYER_SETS_PLUS1][MAX_VPS_LAYER_ID_PLUS1];
     551#endif
    540552#endif
    541553#if VPS_EXTN_DIRECT_REF_LAYERS
     
    633645
    634646#if P0300_ALT_OUTPUT_LAYER_FLAG
     647#if Q0078_ADD_LAYER_SETS
     648  Bool       m_altOutputLayerFlag[MAX_VPS_LAYER_SETS_PLUS1 + 2*MAX_NUM_ADD_LAYER_SETS];
     649#else
    635650  Bool       m_altOutputLayerFlag[MAX_VPS_LAYER_SETS_PLUS1];
     651#endif
    636652#else
    637653#if O0153_ALT_OUTPUT_LAYER_FLAG
     
    664680#if Q0078_ADD_LAYER_SETS
    665681  Int        m_numAddLayerSets;
    666   UInt       m_highestLayerIdxPlus1[MAX_VPS_LAYER_SETS_PLUS1][MAX_NUM_LAYER_IDS];
    667   UInt       m_predictedLayerId[MAX_NUM_LAYER_IDS][64];
     682  UInt       m_highestLayerIdxPlus1[MAX_NUM_ADD_LAYER_SETS][MAX_NUM_LAYER_IDS];
     683  UInt       m_predictedLayerId[MAX_NUM_LAYER_IDS][MAX_NUM_LAYER_IDS];
    668684  UInt       m_numPredictedLayers[MAX_NUM_LAYER_IDS];
    669685  Int        m_numIndependentLayers;
     
    684700  Int        m_maxVpsLatencyIncreasePlus1  [MAX_VPS_OP_LAYER_SETS_PLUS1][MAX_LAYERS];
    685701#if CHANGE_NUMSUBDPB_IDX
     702#if Q0078_ADD_LAYER_SETS
     703  Int        m_numSubDpbs                  [MAX_VPS_LAYER_SETS_PLUS1 + 2*MAX_NUM_ADD_LAYER_SETS];
     704#else
    686705  Int        m_numSubDpbs                  [MAX_VPS_LAYER_SETS_PLUS1];
     706#endif
    687707#else
    688708  Int        m_numSubDpbs                  [MAX_VPS_OP_LAYER_SETS_PLUS1];
     
    816836#endif
    817837#if Q0078_ADD_LAYER_SETS
     838  void    setLayerIdIncludedFlagsForAddLayerSets();
     839  UInt    getVpsNumLayerSetsMinus1()                                             { return m_vpsNumLayerSetsMinus1; }
     840  Void    setVpsNumLayerSetsMinus1(UInt x)                                       { m_vpsNumLayerSetsMinus1 = x; }
    818841  UInt    getNumAddLayerSets()                                                   { return m_numAddLayerSets; }
    819842  Void    setNumAddLayerSets(UInt x)                                             { m_numAddLayerSets = x; }
    820   UInt    getHighestLayerIdxPlus1(UInt set, UInt idx)                             { return m_highestLayerIdxPlus1[set][idx]; }
    821   Void    setHighestLayerIdxPlus1(UInt set, UInt idx, UInt layerIdx)              { m_highestLayerIdxPlus1[set][idx] = layerIdx; }
     843  UInt    getHighestLayerIdxPlus1(UInt set, UInt idx)                            { return m_highestLayerIdxPlus1[set][idx]; }
     844  Void    setHighestLayerIdxPlus1(UInt set, UInt idx, UInt layerIdx)             { m_highestLayerIdxPlus1[set][idx] = layerIdx; }
    822845  Void    setPredictedLayerIds();
    823846  UInt    getPredictedLayerId(UInt layerIdx, UInt predIdx)                       { return m_predictedLayerId[layerIdx][predIdx]; }
  • branches/SHM-6-dev/source/Lib/TLibCommon/TypeDef.h

    r804 r805  
    204204
    205205#define Q0078_ADD_LAYER_SETS             1      ///< JCTVC-Q0078: additional layer sets and layer set config
     206#if Q0078_ADD_LAYER_SETS
     207#define MAX_NUM_ADD_LAYER_SETS           1023
     208#endif
    206209
    207210#define VPS_DPB_SIZE_TABLE               1      ///< JCTVC-O0217: DPB operations: signaling DPB-related parameters
  • branches/SHM-6-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r802 r805  
    973973  assert( pcVPS->getMaxLayerId()       < MAX_VPS_LAYER_ID_PLUS1 );
    974974  READ_CODE( 6, uiCode, "vps_max_layer_id" );           pcVPS->setMaxLayerId( uiCode );
     975#if Q0078_ADD_LAYER_SETS
     976  READ_UVLC(uiCode, "vps_num_layer_sets_minus1");  pcVPS->setVpsNumLayerSetsMinus1(uiCode);
     977  pcVPS->setNumLayerSets(pcVPS->getVpsNumLayerSetsMinus1() + 1);
     978  for (UInt opsIdx = 1; opsIdx <= pcVPS->getVpsNumLayerSetsMinus1(); opsIdx++)
     979#else
    975980  READ_UVLC(    uiCode, "vps_num_layer_sets_minus1" );  pcVPS->setNumLayerSets( uiCode + 1 );
    976981  for( UInt opsIdx = 1; opsIdx <= ( pcVPS->getNumLayerSets() - 1 ); opsIdx ++ )
     982#endif
    977983  {
    978984    // Operation point set
     
    13101316      }
    13111317    }
    1312 
    1313     for (i = 0; i < vps->getNumAddLayerSets(); i++)
    1314     {
    1315       for (j = 1; j < vps->getNumIndependentLayers(); j++)
    1316       {
    1317         Int layerNum = 0;
    1318         Int lsIdx = vps->getNumLayerSets() + i;
    1319         for (Int layerId = 0; layerId < MAX_VPS_LAYER_ID_PLUS1; layerId++)
    1320         {
    1321           vps->setLayerIdIncludedFlag(false, lsIdx, layerId);
    1322         }
    1323         for (Int treeIdx = 1; treeIdx < vps->getNumIndependentLayers(); treeIdx++)
    1324         {
    1325           for (Int layerCnt = 0; layerCnt < vps->getHighestLayerIdxPlus1(i, j); layerCnt++)
    1326           {
    1327             vps->setLayerSetLayerIdList(lsIdx, layerNum, vps->getTreePartitionLayerId(treeIdx, layerCnt));
    1328             vps->setLayerIdIncludedFlag(true, lsIdx, vps->getTreePartitionLayerId(treeIdx, layerCnt));
    1329             layerNum++;
    1330           }
    1331         }
    1332         vps->setNumLayersInIdList(lsIdx, layerNum);
    1333       }
    1334     }
     1318    vps->setNumLayerSets(vps->getNumLayerSets() + vps->getNumAddLayerSets());
     1319    vps->setLayerIdIncludedFlagsForAddLayerSets();
    13351320  }
    13361321#endif
     
    13941379      vps->setOutputLayerSetIdx( i, i );
    13951380    }
     1381#if Q0078_ADD_LAYER_SETS
     1382    if ( i > vps->getVpsNumLayerSetsMinus1() || vps->getDefaultTargetOutputLayerIdc() >= 2 )
     1383#else
    13961384    if ( i > (vps->getNumLayerSets() - 1) || vps->getDefaultTargetOutputLayerIdc() >= 2 )
     1385#endif
    13971386    {
    13981387      Int lsIdx = vps->getOutputLayerSetIdx(i);
     
    21352124  Bool parseFlag = vps->getBitRatePresentVpsFlag() || vps->getPicRatePresentVpsFlag();
    21362125
     2126#if Q0078_ADD_LAYER_SETS
     2127  for( i = 0; i <= vps->getVpsNumLayerSetsMinus1(); i++ )
     2128#else
    21372129  for( i = 0; i < vps->getNumLayerSets(); i++ )
     2130#endif
    21382131  {
    21392132#if BITRATE_PICRATE_SIGNALLING
     
    23672360        parseHrdParameters(vps->getBspHrd(i), i==0 ? 1 : vps->getBspCprmsPresentFlag(i), vps->getMaxTLayers()-1);
    23682361      }
     2362#if Q0078_ADD_LAYER_SETS
     2363      for (UInt h = 1; h <= vps->getVpsNumLayerSetsMinus1(); h++)
     2364#else
    23692365      for( UInt h = 1; h <= (vps->getNumLayerSets()-1); h++ )
     2366#endif
    23702367      {
    23712368        READ_UVLC( uiCode, "num_bitstream_partitions[i]"); vps->setNumBitstreamPartitions(h, uiCode);
     
    27762773          if(rpcSlice->getVPS()->getVpsExtensionFlag()==1)
    27772774          {
     2775#if Q0078_ADD_LAYER_SETS
     2776              for (Int ii = 1; ii < (rpcSlice->getVPS()->getVpsNumLayerSetsMinus1() + 1); ii++)  // prevent assert error when num_add_layer_sets > 0
     2777#else
    27782778              for (Int ii=1; ii< rpcSlice->getVPS()->getNumOutputLayerSets(); ii++ )
     2779#endif
    27792780              {
    27802781                  Int layerSetIdxForOutputLayerSet = rpcSlice->getVPS()->getOutputLayerSetIdx( ii );
     
    27892790                  if(chkAssert)
    27902791                  {
     2792                      // There may be something wrong here (layer id assumed to be layer idx?)
    27912793                      assert(rps->getNumberOfNegativePictures() <= rpcSlice->getVPS()->getMaxVpsDecPicBufferingMinus1(ii , rpcSlice->getLayerId() , rpcSlice->getVPS()->getMaxSLayersInLayerSetMinus1(ii)));
    27922794                      assert(rps->getNumberOfPositivePictures() <= rpcSlice->getVPS()->getMaxVpsDecPicBufferingMinus1(ii , rpcSlice->getLayerId() , rpcSlice->getVPS()->getMaxSLayersInLayerSetMinus1(ii)) - rps->getNumberOfNegativePictures());
  • branches/SHM-6-dev/source/Lib/TLibEncoder/TEncCavlc.cpp

    r802 r805  
    745745#endif
    746746  WRITE_CODE( pcVPS->getMaxLayerId(), 6,                       "vps_max_layer_id" );
     747#if Q0078_ADD_LAYER_SETS
     748  WRITE_UVLC(pcVPS->getVpsNumLayerSetsMinus1(),                "vps_num_layer_sets_minus1");
     749  for (UInt opsIdx = 1; opsIdx <= pcVPS->getVpsNumLayerSetsMinus1(); opsIdx++)
     750#else
    747751  WRITE_UVLC( pcVPS->getNumLayerSets() - 1,                 "vps_num_layer_sets_minus1" );
    748   for( UInt opsIdx = 1; opsIdx <= ( pcVPS->getNumLayerSets() - 1 ); opsIdx ++ )
     752  for (UInt opsIdx = 1; opsIdx <= (pcVPS->getNumLayerSets() - 1); opsIdx++)
     753#endif
    749754  {
    750755    // Operation point set
     
    10651070#if P0295_DEFAULT_OUT_LAYER_IDC
    10661071    }
     1072#if Q0078_ADD_LAYER_SETS
     1073    if ( i > vps->getVpsNumLayerSetsMinus1() || vps->getDefaultTargetOutputLayerIdc() >= 2 ) //Instead of == 2, >= 2 is used to follow the agreement that value 3 should be interpreted as 2
     1074#else
    10671075    if ( i > (vps->getNumLayerSets() - 1) || vps->getDefaultTargetOutputLayerIdc() >= 2 ) //Instead of == 2, >= 2 is used to follow the agreement that value 3 should be interpreted as 2
     1076#endif
    10681077    {
    10691078#endif
     
    14691478  if( vps->getBitRatePresentVpsFlag() || vps->getPicRatePresentVpsFlag() )
    14701479  {
     1480#if Q0078_ADD_LAYER_SETS
     1481    for( i = 0; i <= vps->getVpsNumLayerSetsMinus1(); i++ )
     1482#else
    14711483    for( i = 0; i < vps->getNumLayerSets(); i++ )
     1484#endif
    14721485    {
    14731486#if BITRATE_PICRATE_SIGNALLING
     
    16411654        codeHrdParameters(vps->getBspHrd(i), i==0 ? 1 : vps->getBspCprmsPresentFlag(i), vps->getMaxTLayers()-1);
    16421655      }
     1656#if Q0078_ADD_LAYER_SETS
     1657      for( UInt h = 1; h <= vps->getVpsNumLayerSetsMinus1(); h++ )
     1658#else
    16431659      for( UInt h = 1; h <= (vps->getNumLayerSets()-1); h++ )
     1660#endif
    16441661      {
    16451662        WRITE_UVLC( vps->getNumBitstreamPartitions(h), "num_bitstream_partitions[i]");
Note: See TracChangeset for help on using the changeset viewer.