• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_
12 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_
13 
14 #include <map>
15 
16 #include "webrtc/system_wrappers/interface/static_instance.h"
17 #include "webrtc/typedefs.h"
18 
19 namespace webrtc {
20 class CriticalSectionWrapper;
21 
22 class SSRCDatabase
23 {
24 public:
25     static SSRCDatabase* GetSSRCDatabase();
26     static void ReturnSSRCDatabase();
27 
28     uint32_t CreateSSRC();
29     int32_t RegisterSSRC(const uint32_t ssrc);
30     int32_t ReturnSSRC(const uint32_t ssrc);
31 
32 protected:
33     SSRCDatabase();
34     virtual ~SSRCDatabase();
35 
CreateInstance()36     static SSRCDatabase* CreateInstance() { return new SSRCDatabase(); }
37 
38 private:
39     // Friend function to allow the SSRC destructor to be accessed from the
40     // template class.
41     friend SSRCDatabase* GetStaticInstance<SSRCDatabase>(
42         CountOperation count_operation);
43     static SSRCDatabase* StaticInstance(CountOperation count_operation);
44 
45     uint32_t GenerateRandom();
46 
47     std::map<uint32_t, uint32_t>    _ssrcMap;
48 
49     CriticalSectionWrapper* _critSect;
50 };
51 }  // namespace webrtc
52 
53 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_
54