blob: 79f0ed60e9e6667596204b424bc7940e6447f413 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellander1afca732016-02-07 20:46:45 -08002 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellander1afca732016-02-07 20:46:45 -08004 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010011#ifndef WEBRTC_MEDIA_ENGINE_WEBRTCVOE_H_
12#define WEBRTC_MEDIA_ENGINE_WEBRTCVOE_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013
kwibergbfefb032016-05-01 14:53:46 -070014#include <memory>
15
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010016#include "webrtc/media/engine/webrtccommon.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000017
18#include "webrtc/common_types.h"
19#include "webrtc/modules/audio_device/include/audio_device.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000020#include "webrtc/voice_engine/include/voe_base.h"
21#include "webrtc/voice_engine/include/voe_codec.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000022#include "webrtc/voice_engine/include/voe_errors.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000023
24namespace cricket {
25// automatically handles lifetime of WebRtc VoiceEngine
26class scoped_voe_engine {
27 public:
28 explicit scoped_voe_engine(webrtc::VoiceEngine* e) : ptr(e) {}
nissec16fa5e2017-02-07 07:18:43 -080029 // RTC_DCHECK, to ensure that there are no leaks at shutdown
30 ~scoped_voe_engine() {
31 if (ptr) {
32 const bool success = webrtc::VoiceEngine::Delete(ptr);
33 RTC_DCHECK(success);
34 }
35 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000036 // Releases the current pointer.
37 void reset() {
38 if (ptr) {
nissec16fa5e2017-02-07 07:18:43 -080039 const bool success = webrtc::VoiceEngine::Delete(ptr);
40 RTC_DCHECK(success);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000041 ptr = NULL;
42 }
43 }
44 webrtc::VoiceEngine* get() const { return ptr; }
45 private:
46 webrtc::VoiceEngine* ptr;
47};
48
kwiberg686a8ef2016-02-26 03:00:35 -080049// unique_ptr-like class to handle obtaining and releasing WebRTC interface
50// pointers.
henrike@webrtc.org28e20752013-07-10 00:45:36 +000051template<class T>
52class scoped_voe_ptr {
53 public:
54 explicit scoped_voe_ptr(const scoped_voe_engine& e)
55 : ptr(T::GetInterface(e.get())) {}
56 explicit scoped_voe_ptr(T* p) : ptr(p) {}
57 ~scoped_voe_ptr() { if (ptr) ptr->Release(); }
58 T* operator->() const { return ptr; }
59 T* get() const { return ptr; }
60
61 // Releases the current pointer.
62 void reset() {
63 if (ptr) {
64 ptr->Release();
65 ptr = NULL;
66 }
67 }
68
69 private:
70 T* ptr;
71};
72
73// Utility class for aggregating the various WebRTC interface.
74// Fake implementations can also be injected for testing.
75class VoEWrapper {
76 public:
77 VoEWrapper()
solenberg83862e32017-03-28 05:07:15 -070078 : engine_(webrtc::VoiceEngine::Create()), base_(engine_) {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000079 }
solenberg83862e32017-03-28 05:07:15 -070080 VoEWrapper(webrtc::VoEBase* base)
81 : engine_(NULL), base_(base) {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000082 }
83 ~VoEWrapper() {}
84 webrtc::VoiceEngine* engine() const { return engine_.get(); }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000085 webrtc::VoEBase* base() const { return base_.get(); }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000086 int error() { return base_->LastError(); }
87
88 private:
89 scoped_voe_engine engine_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000090 scoped_voe_ptr<webrtc::VoEBase> base_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000091};
henrike@webrtc.org28e20752013-07-10 00:45:36 +000092} // namespace cricket
93
kjellander@webrtc.org5ad12972016-02-12 06:39:40 +010094#endif // WEBRTC_MEDIA_ENGINE_WEBRTCVOE_H_