Ticket #1330: repeated-PS-HM-16.1.patch

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

    From 39346b4748b11b4a925f6001461b9d86520383e2 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/8] 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 73c02c3..1a33c5f 100644
    a b public: 
    15221522
    15231523  ~ParameterSetMap()
    15241524  {
    1525     for (typename std::map<Int,T *>::iterator i = m_paramsetMap.begin(); i!= m_paramsetMap.end(); i++)
     1525    for (typename std::map<Int, std::vector<T *> >::iterator i = m_paramsetMap.begin(); i!= m_paramsetMap.end(); i++)
    15261526    {
    1527       delete (*i).second;
     1527      for (typename std::vector<T *>::iterator i2 = (*i).second.begin(); i2!= (*i).second.end(); ++i2) {
     1528        delete *i2;
     1529      }
    15281530    }
    15291531  }
    15301532
    15311533  Void storePS(Int psId, T *ps)
    15321534  {
    15331535    assert ( psId < m_maxId );
    1534     if ( m_paramsetMap.find(psId) != m_paramsetMap.end() )
    1535     {
    1536       delete m_paramsetMap[psId];
    1537     }
    1538     m_paramsetMap[psId] = ps;
     1536    m_paramsetMap[psId].push_back(ps);
    15391537  }
    15401538
    15411539  Void mergePSList(ParameterSetMap<T> &rPsList)
    15421540  {
    1543     for (typename std::map<Int,T *>::iterator i = rPsList.m_paramsetMap.begin(); i!= rPsList.m_paramsetMap.end(); i++)
     1541    for (typename std::map<Int, std::vector<T *> >::iterator i = rPsList.m_paramsetMap.begin(); i!= rPsList.m_paramsetMap.end(); i++)
    15441542    {
    1545       storePS(i->first, i->second);
     1543      size_t sz1=m_paramsetMap[i->first].size();
     1544      size_t sz2=i->second.size();
     1545      m_paramsetMap[i->first].resize(sz1+sz2);
     1546      memcpy(&(m_paramsetMap[i->first][sz1]), &(i->second[0]), sz2*sizeof(T*));
    15461547    }
    15471548    rPsList.m_paramsetMap.clear();
    15481549  }
    public: 
    15501551
    15511552  T* getPS(Int psId)
    15521553  {
    1553     return ( m_paramsetMap.find(psId) == m_paramsetMap.end() ) ? NULL : m_paramsetMap[psId];
     1554    return ( m_paramsetMap.find(psId) == m_paramsetMap.end() ) ? NULL : m_paramsetMap[psId].back();
    15541555  }
    15551556
    15561557  T* getFirstPS()
    15571558  {
    1558     return (m_paramsetMap.begin() == m_paramsetMap.end() ) ? NULL : m_paramsetMap.begin()->second;
     1559    return (m_paramsetMap.begin() == m_paramsetMap.end() ) ? NULL : m_paramsetMap.begin()->second.back();
    15591560  }
    15601561
    15611562private:
    1562   std::map<Int,T *> m_paramsetMap;
     1563  std::map<Int, std::vector<T *> > m_paramsetMap;
    15631564  Int               m_maxId;
    15641565};
    15651566