diff options
author | andresp@webrtc.org <andresp@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-07-10 07:41:59 +0000 |
---|---|---|
committer | andresp@webrtc.org <andresp@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-07-10 07:41:59 +0000 |
commit | 91b438940b4c2d3252fe67545d84f70cd54be37c (patch) | |
tree | 2afcf9c4ccc48dcfa3e6fec1f1a85974294cd45c /modules | |
parent | 61f437efd95fb6ef3f6afeb14b9968b8dcab0ebb (diff) | |
download | webrtc-91b438940b4c2d3252fe67545d84f70cd54be37c.tar.gz |
Revert "Remove remains of WEBRTC_NO_STL." (rev 6641).
Reason breaks linux_memcheck.
TBR=stefan@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/16869004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@6645 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'modules')
-rw-r--r-- | modules/rtp_rtcp/source/ssrc_database.cc | 94 | ||||
-rw-r--r-- | modules/rtp_rtcp/source/ssrc_database.h | 9 |
2 files changed, 103 insertions, 0 deletions
diff --git a/modules/rtp_rtcp/source/ssrc_database.cc b/modules/rtp_rtcp/source/ssrc_database.cc index 1594a17a..df09b01b 100644 --- a/modules/rtp_rtcp/source/ssrc_database.cc +++ b/modules/rtp_rtcp/source/ssrc_database.cc @@ -57,12 +57,45 @@ SSRCDatabase::CreateSSRC() uint32_t ssrc = GenerateRandom(); +#ifndef WEBRTC_NO_STL + while(_ssrcMap.find(ssrc) != _ssrcMap.end()) { ssrc = GenerateRandom(); } _ssrcMap[ssrc] = 0; +#else + if(_sizeOfSSRC <= _numberOfSSRC) + { + // allocate more space + const int newSize = _sizeOfSSRC + 10; + uint32_t* tempSSRCVector = new uint32_t[newSize]; + memcpy(tempSSRCVector, _ssrcVector, _sizeOfSSRC*sizeof(uint32_t)); + delete [] _ssrcVector; + + _ssrcVector = tempSSRCVector; + _sizeOfSSRC = newSize; + } + + // check if in DB + if(_ssrcVector) + { + for (int i=0; i<_numberOfSSRC; i++) + { + if (_ssrcVector[i] == ssrc) + { + // we have a match + i = 0; // start over with a new ssrc + ssrc = GenerateRandom(); + } + + } + // add to database + _ssrcVector[_numberOfSSRC] = ssrc; + _numberOfSSRC++; + } +#endif return ssrc; } @@ -70,7 +103,39 @@ int32_t SSRCDatabase::RegisterSSRC(const uint32_t ssrc) { CriticalSectionScoped lock(_critSect); + +#ifndef WEBRTC_NO_STL + _ssrcMap[ssrc] = 0; + +#else + if(_sizeOfSSRC <= _numberOfSSRC) + { + // allocate more space + const int newSize = _sizeOfSSRC + 10; + uint32_t* tempSSRCVector = new uint32_t[newSize]; + memcpy(tempSSRCVector, _ssrcVector, _sizeOfSSRC*sizeof(uint32_t)); + delete [] _ssrcVector; + + _ssrcVector = tempSSRCVector; + _sizeOfSSRC = newSize; + } + // check if in DB + if(_ssrcVector) + { + for (int i=0; i<_numberOfSSRC; i++) + { + if (_ssrcVector[i] == ssrc) + { + // we have a match + return -1; + } + } + // add to database + _ssrcVector[_numberOfSSRC] = ssrc; + _numberOfSSRC++; + } +#endif return 0; } @@ -78,7 +143,26 @@ int32_t SSRCDatabase::ReturnSSRC(const uint32_t ssrc) { CriticalSectionScoped lock(_critSect); + +#ifndef WEBRTC_NO_STL _ssrcMap.erase(ssrc); + +#else + if(_ssrcVector) + { + for (int i=0; i<_numberOfSSRC; i++) + { + if (_ssrcVector[i] == ssrc) + { + // we have a match + // remove from database + _ssrcVector[i] = _ssrcVector[_numberOfSSRC-1]; + _numberOfSSRC--; + break; + } + } + } +#endif return 0; } @@ -94,12 +178,22 @@ SSRCDatabase::SSRCDatabase() srand(tv.tv_usec); #endif +#ifdef WEBRTC_NO_STL + _sizeOfSSRC = 10; + _numberOfSSRC = 0; + _ssrcVector = new uint32_t[10]; +#endif _critSect = CriticalSectionWrapper::CreateCriticalSection(); } SSRCDatabase::~SSRCDatabase() { +#ifdef WEBRTC_NO_STL + delete [] _ssrcVector; +#else _ssrcMap.clear(); +#endif + delete _critSect; } uint32_t SSRCDatabase::GenerateRandom() diff --git a/modules/rtp_rtcp/source/ssrc_database.h b/modules/rtp_rtcp/source/ssrc_database.h index 2d4932af..e1f90e79 100644 --- a/modules/rtp_rtcp/source/ssrc_database.h +++ b/modules/rtp_rtcp/source/ssrc_database.h @@ -11,7 +11,9 @@ #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_ #define WEBRTC_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_ +#ifndef WEBRTC_NO_STL #include <map> +#endif #include "webrtc/system_wrappers/interface/static_instance.h" #include "webrtc/typedefs.h" @@ -44,7 +46,14 @@ private: uint32_t GenerateRandom(); +#ifdef WEBRTC_NO_STL + int _numberOfSSRC; + int _sizeOfSSRC; + + uint32_t* _ssrcVector; +#else std::map<uint32_t, uint32_t> _ssrcMap; +#endif CriticalSectionWrapper* _critSect; }; |