Ticket #78: multiple-layer-patch.patch

File multiple-layer-patch.patch, 2.4 KB (added by eeehey, 9 years ago)

patch to fix multiple layer encoder assertion

  • App/TAppEncoder/TAppEncTop.cpp

     
    15641564  for (UInt layerCtr = 1; layerCtr < vps->getMaxLayers(); layerCtr++)
    15651565  {
    15661566    UInt layerId = vps->getLayerIdInNuh(layerCtr);
     1567    Int numDirectRefLayers = 0;
     1568
    15671569    vps->setNumDirectRefLayers(layerId, m_acTEncTop[layerCtr].getNumDirectRefLayers());
    15681570    maxDirectRefLayers = max<UInt>(maxDirectRefLayers, vps->getNumDirectRefLayers(layerId));
    15691571
     
    15871589    {
    15881590      if (vps->getDirectDependencyFlag(layerCtr, refLayerCtr))
    15891591      {
    1590         assert(m_acTEncTop[layerCtr].getSamplePredEnabledFlag(refLayerCtr) || m_acTEncTop[layerCtr].getMotionPredEnabledFlag(refLayerCtr));
    1591         vps->setDirectDependencyType(layerCtr, refLayerCtr, ((m_acTEncTop[layerCtr].getSamplePredEnabledFlag(refLayerCtr) ? 1 : 0) |
    1592           (m_acTEncTop[layerCtr].getMotionPredEnabledFlag(refLayerCtr) ? 2 : 0)) - 1);
     1592        assert(m_acTEncTop[layerCtr].getSamplePredEnabledFlag(numDirectRefLayers) || m_acTEncTop[layerCtr].getMotionPredEnabledFlag(numDirectRefLayers));
     1593        vps->setDirectDependencyType(layerCtr, refLayerCtr, ((m_acTEncTop[layerCtr].getSamplePredEnabledFlag(numDirectRefLayers) ? 1 : 0) |
     1594          (m_acTEncTop[layerCtr].getMotionPredEnabledFlag(numDirectRefLayers) ? 2 : 0)) - 1);
    15931595#if O0096_DEFAULT_DEPENDENCY_TYPE
    15941596        if (!isDefaultDirectDependencyTypeSet)
    15951597        {
     
    16021604          vps->setDefaultDirectDependecyTypeFlag(0);
    16031605        }
    16041606#endif
     1607        numDirectRefLayers ++;
    16051608      }
    16061609      else
    16071610      {
  • Lib/TLibEncoder/TEncGOP.cpp

     
    13151315        UInt refLayerIdc = pcSlice->getInterLayerPredLayerIdc(i);
    13161316        UInt refLayerId = pcSlice->getVPS()->getRefLayerId(m_layerId, refLayerIdc);
    13171317#if VPS_EXTN_DIRECT_REF_LAYERS
    1318         TComList<TComPic*> *cListPic = m_ppcTEncTop[refLayerIdc]->getRefLayerEnc(refLayerIdc)->getListPic();
     1318        TComList<TComPic*> *cListPic = m_ppcTEncTop[pcSlice->getVPS()->getLayerIdxInVps(m_layerId)]->getRefLayerEnc(refLayerIdc)->getListPic();
    13191319#else
    13201320        TComList<TComPic*> *cListPic = m_ppcTEncTop[pcSlice->getVPS()->getLayerIdxInVps(m_layerId)-1]->getListPic();
    13211321#endif