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


Ignore:
Timestamp:
4 Mar 2015, 09:55:40 (10 years ago)
Author:
seregin
Message:

revert back using layerIdx for m_ppcTEncTop, fix RefLayerId settings and related

Location:
branches/SHM-dev/source/App/TAppEncoder
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/App/TAppEncoder/TAppEncCfg.cpp

    r1045 r1057  
    772772  string* cfg_ReconFile      [MAX_LAYERS];
    773773  Double* cfg_fQP            [MAX_LAYERS];
     774  Int*    cfg_layerId        [MAX_LAYERS];
    774775#if REPN_FORMAT_IN_VPS
    775776  Int*    cfg_repFormatIdx  [MAX_LAYERS];
     
    911912    cfg_repFormatIdx[layer] = &m_acLayerCfg[layer].m_repFormatIdx;
    912913#endif
     914    cfg_layerId[layer]              = &m_acLayerCfg[layer].m_layerId;
    913915    cfg_SourceWidth[layer]          = &m_acLayerCfg[layer].m_iSourceWidth;
    914916    cfg_SourceHeight[layer]         = &m_acLayerCfg[layer].m_iSourceHeight;
     
    11221124  ("RepFormatIdx%d",                                cfg_repFormatIdx,                           -1, MAX_LAYERS, "Index to the representation format structure used from the VPS")
    11231125#endif
     1126  ("LayerId%d",                                     cfg_layerId,                                -1, MAX_LAYERS,  "Layer id")
    11241127#if VPS_EXTN_DIRECT_REF_LAYERS
    11251128  ("NumSamplePredRefLayers%d",                      cfg_numSamplePredRefLayers,                 -1, MAX_LAYERS, "Number of sample prediction reference layers")
     
    11301133  ("PredLayerIds%d",                                cfg_predLayerIdsPtr,                string(""), MAX_LAYERS, "inter-layer prediction layer IDs")
    11311134#endif
    1132   ("NumLayers",                                     m_numLayers,                                             1, "Number of layers to code")
     1135  ("NumLayers",                                     m_numLayers,                                             1, "Number of layers to code") 
    11331136#if Q0078_ADD_LAYER_SETS
    11341137#if OUTPUT_LAYER_SETS_CONFIG
     
    46014604    for(Int i = 0; i < m_acLayerCfg[layerIdx].m_numSamplePredRefLayers; i++)
    46024605    {
    4603       xConfirmPara(m_acLayerCfg[layerIdx].m_samplePredRefLayerIds[i] > layerIdx, "Cannot reference higher layers");
    4604       xConfirmPara(m_acLayerCfg[layerIdx].m_samplePredRefLayerIds[i] == layerIdx, "Cannot reference the current layer itself");
     4606      xConfirmPara(m_acLayerCfg[layerIdx].m_samplePredRefLayerIds[i] > m_acLayerCfg[layerIdx].m_layerId, "Cannot reference higher layers");
     4607      xConfirmPara(m_acLayerCfg[layerIdx].m_samplePredRefLayerIds[i] == m_acLayerCfg[layerIdx].m_layerId, "Cannot reference the current layer itself");
    46054608    }
    46064609  }
     
    46124615    for(Int i = 0; i < m_acLayerCfg[layerIdx].m_numMotionPredRefLayers; i++)
    46134616    {
    4614       xConfirmPara(m_acLayerCfg[layerIdx].m_motionPredRefLayerIds[i] > layerIdx, "Cannot reference higher layers");
    4615       xConfirmPara(m_acLayerCfg[layerIdx].m_motionPredRefLayerIds[i] == layerIdx, "Cannot reference the current layer itself");
     4617      xConfirmPara(m_acLayerCfg[layerIdx].m_motionPredRefLayerIds[i] > m_acLayerCfg[layerIdx].m_layerId, "Cannot reference higher layers");
     4618      xConfirmPara(m_acLayerCfg[layerIdx].m_motionPredRefLayerIds[i] == m_acLayerCfg[layerIdx].m_layerId, "Cannot reference the current layer itself");
    46164619    }
    46174620  }
  • branches/SHM-dev/source/App/TAppEncoder/TAppEncCfg.h

    r1045 r1057  
    6161#if SVC_EXTENSION
    6262  TAppEncLayerCfg m_acLayerCfg [MAX_LAYERS];
     63  Int       m_layerId;
    6364  Int       m_numLayers;                                      ///< number of layers
    6465  Int       m_scalabilityMask[MAX_VPS_NUM_SCALABILITY_TYPES]; ///< scalability_mask
     
    577578#if SVC_EXTENSION
    578579  Int  getNumFrameToBeEncoded()    {return m_framesToBeEncoded; }
    579   Int  getNumLayer()               {return m_numLayers;        }
     580  Int  getNumLayer()               {return m_numLayers;         }
    580581  Int  getGOPSize()                {return m_iGOPSize;          }
    581582#if O0194_DIFFERENT_BITDEPTH_EL_BL
  • branches/SHM-dev/source/App/TAppEncoder/TAppEncLayerCfg.h

    r1030 r1057  
    3030  string    m_cInputFile;                                     ///< source file name
    3131  string    m_cReconFile;                                     ///< output reconstruction file
    32 
     32  Int       m_layerId;                                        ///< layer Id
    3333  Int       m_iFrameRate;                                     ///< source frame-rates (Hz)
    3434  Int       m_iSourceWidth;                                   ///< source width in pixel
     
    209209  Int     getNumActiveRefLayers()     {return m_numActiveRefLayers;}
    210210  Int*    getPredLayerIds()           {return m_predLayerIds;     }
    211   Int     getPredLayerId(Int i)       {return m_predLayerIds[i];  }
     211  Int     getPredLayerIdx(Int i)      {return m_predLayerIds[i];  }
    212212#endif
    213213#if RC_SHVC_HARMONIZATION
  • branches/SHM-dev/source/App/TAppEncoder/TAppEncTop.cpp

    r1045 r1057  
    301301#endif
    302302    // set layer ID
    303     m_acTEncTop[layer].setLayerId ( layer );
    304     m_acTEncTop[layer].setNumLayer ( m_numLayers );
    305     m_acTEncTop[layer].setLayerEnc(m_apcTEncTop);
     303    m_acTEncTop[layer].setLayerId                                         ( m_acLayerCfg[layer].m_layerId == -1 ? layer : m_acLayerCfg[layer].m_layerId );
     304    m_acTEncTop[layer].setNumLayer                                        ( m_numLayers );
     305    m_acTEncTop[layer].setLayerEnc                                        ( m_apcTEncTop );
    306306
    307307    //====== Coding Structure ========
     
    354354    if(layer)
    355355    {
     356      UInt prevLayerIdx = m_acLayerCfg[layer].getPredLayerIdx(m_acLayerCfg[layer].getNumActiveRefLayers() - 1);
     357      UInt prevLayerId  = m_acTEncTop[layer].getRefLayerId(prevLayerIdx);
     358
    356359      for(Int i = 0; i < MAX_VPS_LAYER_IDX_PLUS1; i++)
    357360      {
     
    363366        // Not included in the configuration file; assume that each layer depends on previous layer
    364367        m_acTEncTop[layer].setNumSamplePredRefLayers                      (1);      // One sample pred ref. layer
    365         m_acTEncTop[layer].setSamplePredRefLayerId                        (0, layer - 1);   // Previous layer
    366         m_acTEncTop[layer].setSamplePredEnabledFlag                       (layer - 1, true);
     368        m_acTEncTop[layer].setSamplePredRefLayerId                        (prevLayerIdx, prevLayerId);   // Previous layer
     369        m_acTEncTop[layer].setSamplePredEnabledFlag                       (prevLayerIdx, true);
    367370      }
    368371      else
     
    372375        {
    373376          m_acTEncTop[layer].setSamplePredRefLayerId                      ( i, m_acLayerCfg[layer].getSamplePredRefLayerId(i));
    374           m_acTEncTop[layer].setSamplePredEnabledFlag                     (m_acLayerCfg[layer].getSamplePredRefLayerId(i), true);
    375377        }
    376378      }
     
    379381        // Not included in the configuration file; assume that each layer depends on previous layer
    380382        m_acTEncTop[layer].setNumMotionPredRefLayers                      (1);      // One motion pred ref. layer
    381         m_acTEncTop[layer].setMotionPredRefLayerId                        (0, layer - 1);   // Previous layer
    382         m_acTEncTop[layer].setMotionPredEnabledFlag                       (layer - 1, true);
     383        m_acTEncTop[layer].setMotionPredRefLayerId                        (prevLayerIdx, prevLayerId);   // Previous layer
     384        m_acTEncTop[layer].setMotionPredEnabledFlag                       (prevLayerIdx, true);
    383385      }
    384386      else
     
    388390        {
    389391          m_acTEncTop[layer].setMotionPredRefLayerId                      ( i, m_acLayerCfg[layer].getMotionPredRefLayerId(i));
    390           m_acTEncTop[layer].setMotionPredEnabledFlag                     (m_acLayerCfg[layer].getMotionPredRefLayerId(i), true);
    391392        }
    392393      }
     
    395396      assert( layer < MAX_LAYERS );
    396397
    397       for (Int i = 0; i < layer; i++)
    398       {
    399         if (m_acTEncTop[layer].getSamplePredEnabledFlag(i) || m_acTEncTop[layer].getMotionPredEnabledFlag(i))
     398      for (Int i = 0; i < m_acLayerCfg[layer].m_layerId; i++)
     399      {
     400        Int refLayerId = -1;
     401
     402        for( Int layerIdc = 0; layerIdc < m_acTEncTop[layer].getNumSamplePredRefLayers(); layerIdc++ )
    400403        {
    401           m_acTEncTop[layer].setRefLayerId                                (numDirectRefLayers, i);
     404          if( m_acLayerCfg[layer].getSamplePredRefLayerId(layerIdc) == i )
     405          {
     406            refLayerId = i;
     407            m_acTEncTop[layer].setSamplePredEnabledFlag( numDirectRefLayers, true );
     408            break;
     409          }
     410        }
     411
     412        for( Int layerIdc = 0; layerIdc < m_acTEncTop[layer].getNumMotionPredRefLayers(); layerIdc++ )
     413        {
     414          if( m_acLayerCfg[layer].getMotionPredRefLayerId(layerIdc) == i )
     415          {
     416            refLayerId = i;
     417            m_acTEncTop[layer].setMotionPredEnabledFlag( numDirectRefLayers, true );
     418            break;
     419          }
     420        }
     421
     422        if( refLayerId >= 0 )
     423        {
     424          m_acTEncTop[layer].setRefLayerId                                ( numDirectRefLayers, refLayerId );
    402425          numDirectRefLayers++;
    403426        }
    404427      }
    405       m_acTEncTop[layer].setNumDirectRefLayers                            (numDirectRefLayers);
     428
     429      m_acTEncTop[layer].setNumDirectRefLayers                            ( numDirectRefLayers );
    406430
    407431      if(m_acLayerCfg[layer].getNumActiveRefLayers() == -1)
     
    410434        for( Int i = 0; i < m_acTEncTop[layer].getNumActiveRefLayers(); i++ )
    411435        {
    412           m_acTEncTop[layer].setPredLayerId(i, i);
     436          m_acTEncTop[layer].setPredLayerIdx(i, i);
    413437        }
    414438      }
     
    418442        for(Int i = 0; i < m_acTEncTop[layer].getNumActiveRefLayers(); i++)
    419443        {
    420           m_acTEncTop[layer].setPredLayerId                               ( i, m_acLayerCfg[layer].getPredLayerId(i));
     444          m_acTEncTop[layer].setPredLayerIdx                              ( i, m_acLayerCfg[layer].getPredLayerIdx(i));
    421445        }
    422446      }
     
    12661290  for(i = 1; i < vps->getMaxLayers(); i++)
    12671291  {
    1268     vps->setLayerIdInNuh(i, i);
     1292    vps->setLayerIdInNuh(i, m_acLayerCfg[i].m_layerId);   
    12691293    vps->setLayerIdxInVps(vps->getLayerIdInNuh(i), i);
    12701294    vps->setDimensionId(i, 0, i);
     1295
     1296    if( m_acLayerCfg[i].m_layerId != i )
     1297    {
     1298      vps->setNuhLayerIdPresentFlag(true);
     1299    }
    12711300  }
    12721301
     
    12961325
    12971326#if VPS_EXTN_OP_LAYER_SETS
    1298   vps->setMaxLayerId(m_numLayers - 1);    // Set max-layer ID
     1327  vps->setMaxLayerId( m_acLayerCfg[m_numLayers - 1].m_layerId );    // Set max-layer ID
    12991328
    13001329  vps->setVpsExtensionFlag( m_numLayers > 1 ? true : false );
     
    15291558  Bool isDefaultDirectDependencyTypeSet = false;
    15301559#endif
    1531   for (UInt layerCtr = 1; layerCtr <= vps->getMaxLayers() - 1; layerCtr++)
     1560  for (UInt layerCtr = 1; layerCtr < vps->getMaxLayers(); layerCtr++)
    15321561  {
    15331562    UInt layerId = vps->getLayerIdInNuh(layerCtr);
    15341563    vps->setNumDirectRefLayers(layerId, m_acTEncTop[layerCtr].getNumDirectRefLayers());
    1535     maxDirectRefLayers = max<UInt>(maxDirectRefLayers, vps->getNumDirectRefLayers(layerCtr));
    1536 
    1537     for (i = 0; i < vps->getNumDirectRefLayers(layerCtr); i++)
     1564    maxDirectRefLayers = max<UInt>(maxDirectRefLayers, vps->getNumDirectRefLayers(layerId));
     1565
     1566    for (i = 0; i < vps->getNumDirectRefLayers(layerId); i++)
    15381567    {
    15391568      vps->setRefLayerId(layerId, i, m_acTEncTop[layerCtr].getRefLayerId(i));
     
    15451574      vps->setDirectDependencyFlag(layerCtr, refLayerCtr, false);
    15461575    }
    1547     for (i = 0; i < vps->getNumDirectRefLayers(layerCtr); i++)
     1576    for (i = 0; i < vps->getNumDirectRefLayers(layerId); i++)
    15481577    {
    15491578      vps->setDirectDependencyFlag(layerCtr, vps->getLayerIdxInVps(m_acTEncTop[layerCtr].getRefLayerId(i)), true);
Note: See TracChangeset for help on using the changeset viewer.