- add third_party src.
[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 #ifndef WEBRTC_NO_STL
15 #include <map>
16 #endif
17
18 #include "webrtc/system_wrappers/interface/static_instance.h"
19 #include "webrtc/typedefs.h"
20
21 namespace webrtc {
22 class CriticalSectionWrapper;
23
24 class SSRCDatabase
25 {
26 public:
27     static SSRCDatabase* GetSSRCDatabase();
28     static void ReturnSSRCDatabase();
29
30     uint32_t CreateSSRC();
31     int32_t RegisterSSRC(const uint32_t ssrc);
32     int32_t ReturnSSRC(const uint32_t ssrc);
33
34 protected:
35     SSRCDatabase();
36     virtual ~SSRCDatabase();
37
38     static SSRCDatabase* CreateInstance() { return new SSRCDatabase(); }
39
40 private:
41     // Friend function to allow the SSRC destructor to be accessed from the
42     // template class.
43     friend SSRCDatabase* GetStaticInstance<SSRCDatabase>(
44         CountOperation count_operation);
45     static SSRCDatabase* StaticInstance(CountOperation count_operation);
46
47     uint32_t GenerateRandom();
48
49 #ifdef WEBRTC_NO_STL
50     int _numberOfSSRC;
51     int _sizeOfSSRC;
52
53     uint32_t* _ssrcVector;
54 #else
55     std::map<uint32_t, uint32_t>    _ssrcMap;
56 #endif
57
58     CriticalSectionWrapper* _critSect;
59 };
60 }  // namespace webrtc
61
62 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_SSRC_DATABASE_H_