Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / modules / rtp_rtcp / source / ssrc_database.h
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
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_