Ticket #1330: repeated-PS-HM-15.0-RExt-8.1.patch

File repeated-PS-HM-15.0-RExt-8.1.patch, 2.5 KB (added by jackh, 8 years ago)
  • source/Lib/TLibCommon/TComSlice.h

    From 52fa94953fbd848ff75f4bdf14d33e8defa713a7 Mon Sep 17 00:00:00 2001
    From: Jack Haughton <jack.haughton@argondesign.com>
    Date: Mon, 6 Oct 2014 13:59:54 +0100
    Subject: [PATCH 1/9] Fix repeated parameter set bug
    
    ---
     source/Lib/TLibCommon/TComSlice.h |   25 +++++++++++++------------
     1 file changed, 13 insertions(+), 12 deletions(-)
    
    diff --git a/source/Lib/TLibCommon/TComSlice.h b/source/Lib/TLibCommon/TComSlice.h
    index 5be1da2..54fba6f 100644
    a b public: 
    15201520
    15211521  ~ParameterSetMap()
    15221522  {
    1523     for (typename std::map<Int,T *>::iterator i = m_paramsetMap.begin(); i!= m_paramsetMap.end(); i++)
     1523    for (typename std::map<Int, std::vector<T *> >::iterator i = m_paramsetMap.begin(); i!= m_paramsetMap.end(); i++)
    15241524    {
    1525       delete (*i).second;
     1525      for (typename std::vector<T *>::iterator i2 = (*i).second.begin(); i2!= (*i).second.end(); ++i2) {
     1526        delete *i2;
     1527      }
    15261528    }
    15271529  }
    15281530
    15291531  Void storePS(Int psId, T *ps)
    15301532  {
    15311533    assert ( psId < m_maxId );
    1532     if ( m_paramsetMap.find(psId) != m_paramsetMap.end() )
    1533     {
    1534       delete m_paramsetMap[psId];
    1535     }
    1536     m_paramsetMap[psId] = ps;
     1534    m_paramsetMap[psId].push_back(ps);
    15371535  }
    15381536
    15391537  Void mergePSList(ParameterSetMap<T> &rPsList)
    15401538  {
    1541     for (typename std::map<Int,T *>::iterator i = rPsList.m_paramsetMap.begin(); i!= rPsList.m_paramsetMap.end(); i++)
     1539    for (typename std::map<Int, std::vector<T *> >::iterator i = rPsList.m_paramsetMap.begin(); i!= rPsList.m_paramsetMap.end(); i++)
    15421540    {
    1543       storePS(i->first, i->second);
     1541      size_t sz1=m_paramsetMap[i->first].size();
     1542      size_t sz2=i->second.size();
     1543      m_paramsetMap[i->first].resize(sz1+sz2);
     1544      memcpy(&(m_paramsetMap[i->first][sz1]), &(i->second[0]), sz2*sizeof(T*));
    15441545    }
    15451546    rPsList.m_paramsetMap.clear();
    15461547  }
    public: 
    15481549
    15491550  T* getPS(Int psId)
    15501551  {
    1551     return ( m_paramsetMap.find(psId) == m_paramsetMap.end() ) ? NULL : m_paramsetMap[psId];
     1552    return ( m_paramsetMap.find(psId) == m_paramsetMap.end() ) ? NULL : m_paramsetMap[psId].back();
    15521553  }
    15531554
    15541555  T* getFirstPS()
    15551556  {
    1556     return (m_paramsetMap.begin() == m_paramsetMap.end() ) ? NULL : m_paramsetMap.begin()->second;
     1557    return (m_paramsetMap.begin() == m_paramsetMap.end() ) ? NULL : m_paramsetMap.begin()->second.back();
    15571558  }
    15581559
    15591560private:
    1560   std::map<Int,T *> m_paramsetMap;
     1561  std::map<Int, std::vector<T *> > m_paramsetMap;
    15611562  Int               m_maxId;
    15621563};
    15631564