blob: 703b6a4470e686c13505f506f728d3b8470625ee [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
tommi@webrtc.orga990e122012-04-26 15:28:22 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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
henrike@webrtc.org82f014a2013-09-10 18:24:07 +000011#if defined(WEBRTC_ANDROID)
12#if defined(WEBRTC_ANDROID_OPENSLES)
13#include "webrtc/modules/audio_device/android/audio_manager_jni.h"
14#else
pbos@webrtc.org956aa7e2013-05-21 13:52:32 +000015#include "webrtc/modules/audio_device/android/audio_device_jni_android.h"
leozwang@webrtc.org2db85bc2012-09-18 20:19:00 +000016#endif
henrike@webrtc.org82f014a2013-09-10 18:24:07 +000017#endif
leozwang@webrtc.org2db85bc2012-09-18 20:19:00 +000018
minyue@webrtc.orge509f942013-09-12 17:03:00 +000019#include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
pbos@webrtc.org956aa7e2013-05-21 13:52:32 +000020#include "webrtc/system_wrappers/interface/trace.h"
21#include "webrtc/voice_engine/voice_engine_impl.h"
henrika@google.com73d65512011-09-07 15:11:18 +000022
niklase@google.com470e71d2011-07-07 08:21:25 +000023namespace webrtc
24{
25
26// Counter to be ensure that we can add a correct ID in all static trace
27// methods. It is not the nicest solution, especially not since we already
28// have a counter in VoEBaseImpl. In other words, there is room for
29// improvement here.
pbos@webrtc.org6141e132013-04-09 10:09:10 +000030static int32_t gVoiceEngineInstanceCounter = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000031
minyue@webrtc.orge509f942013-09-12 17:03:00 +000032VoiceEngine* GetVoiceEngine(const Config* config, bool owns_config)
niklase@google.com470e71d2011-07-07 08:21:25 +000033{
minyue@webrtc.orge509f942013-09-12 17:03:00 +000034#if (defined _WIN32)
35 HMODULE hmod = LoadLibrary(TEXT("VoiceEngineTestingDynamic.dll"));
niklase@google.com470e71d2011-07-07 08:21:25 +000036
minyue@webrtc.orge509f942013-09-12 17:03:00 +000037 if (hmod) {
38 typedef VoiceEngine* (*PfnGetVoiceEngine)(void);
39 PfnGetVoiceEngine pfn = (PfnGetVoiceEngine)GetProcAddress(
40 hmod,"GetVoiceEngine");
41 if (pfn) {
42 VoiceEngine* self = pfn();
43 if (owns_config) {
44 delete config;
45 }
46 return (self);
47 }
48 }
49#endif
50
51 VoiceEngineImpl* self = new VoiceEngineImpl(config, owns_config);
tommi@webrtc.org0989fb72013-02-15 15:07:32 +000052 if (self != NULL)
niklase@google.com470e71d2011-07-07 08:21:25 +000053 {
tommi@webrtc.orga990e122012-04-26 15:28:22 +000054 self->AddRef(); // First reference. Released in VoiceEngine::Delete.
niklase@google.com470e71d2011-07-07 08:21:25 +000055 gVoiceEngineInstanceCounter++;
56 }
tommi@webrtc.org0989fb72013-02-15 15:07:32 +000057 return self;
niklase@google.com470e71d2011-07-07 08:21:25 +000058}
niklase@google.com470e71d2011-07-07 08:21:25 +000059
tommi@webrtc.orga990e122012-04-26 15:28:22 +000060int VoiceEngineImpl::AddRef() {
61 return ++_ref_count;
62}
63
64// This implements the Release() method for all the inherited interfaces.
65int VoiceEngineImpl::Release() {
66 int new_ref = --_ref_count;
67 assert(new_ref >= 0);
68 if (new_ref == 0) {
69 WEBRTC_TRACE(kTraceApiCall, kTraceVoice, -1,
70 "VoiceEngineImpl self deleting (voiceEngine=0x%p)",
71 this);
72
73 delete this;
74 }
75
76 return new_ref;
77}
78
minyue@webrtc.orge509f942013-09-12 17:03:00 +000079VoiceEngine* VoiceEngine::Create() {
80 Config* config = new Config();
81 config->Set<AudioCodingModuleFactory>(new AudioCodingModuleFactory());
niklase@google.com470e71d2011-07-07 08:21:25 +000082
minyue@webrtc.orge509f942013-09-12 17:03:00 +000083 return GetVoiceEngine(config, true);
84}
niklase@google.com470e71d2011-07-07 08:21:25 +000085
minyue@webrtc.orge509f942013-09-12 17:03:00 +000086VoiceEngine* VoiceEngine::Create(const Config& config) {
87 return GetVoiceEngine(&config, false);
niklase@google.com470e71d2011-07-07 08:21:25 +000088}
89
pbos@webrtc.org92135212013-05-14 08:31:39 +000090int VoiceEngine::SetTraceFilter(unsigned int filter)
niklase@google.com470e71d2011-07-07 08:21:25 +000091{
92 WEBRTC_TRACE(kTraceApiCall, kTraceVoice,
93 VoEId(gVoiceEngineInstanceCounter, -1),
94 "SetTraceFilter(filter=0x%x)", filter);
95
96 // Remember old filter
andrew@webrtc.org90805182013-09-05 16:40:43 +000097 uint32_t oldFilter = Trace::level_filter();
98 Trace::set_level_filter(filter);
niklase@google.com470e71d2011-07-07 08:21:25 +000099
100 // If previous log was ignored, log again after changing filter
101 if (kTraceNone == oldFilter)
102 {
103 WEBRTC_TRACE(kTraceApiCall, kTraceVoice, -1,
104 "SetTraceFilter(filter=0x%x)", filter);
105 }
106
andrew@webrtc.org90805182013-09-05 16:40:43 +0000107 return 0;
niklase@google.com470e71d2011-07-07 08:21:25 +0000108}
109
110int VoiceEngine::SetTraceFile(const char* fileNameUTF8,
pbos@webrtc.org92135212013-05-14 08:31:39 +0000111 bool addFileCounter)
niklase@google.com470e71d2011-07-07 08:21:25 +0000112{
113 int ret = Trace::SetTraceFile(fileNameUTF8, addFileCounter);
114 WEBRTC_TRACE(kTraceApiCall, kTraceVoice,
115 VoEId(gVoiceEngineInstanceCounter, -1),
116 "SetTraceFile(fileNameUTF8=%s, addFileCounter=%d)",
117 fileNameUTF8, addFileCounter);
118 return (ret);
119}
120
121int VoiceEngine::SetTraceCallback(TraceCallback* callback)
122{
123 WEBRTC_TRACE(kTraceApiCall, kTraceVoice,
124 VoEId(gVoiceEngineInstanceCounter, -1),
125 "SetTraceCallback(callback=0x%x)", callback);
126 return (Trace::SetTraceCallback(callback));
127}
128
tommi@webrtc.orga990e122012-04-26 15:28:22 +0000129bool VoiceEngine::Delete(VoiceEngine*& voiceEngine)
niklase@google.com470e71d2011-07-07 08:21:25 +0000130{
131 if (voiceEngine == NULL)
niklase@google.com470e71d2011-07-07 08:21:25 +0000132 return false;
niklase@google.com470e71d2011-07-07 08:21:25 +0000133
tommi@webrtc.org0989fb72013-02-15 15:07:32 +0000134 VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine);
tommi@webrtc.orga990e122012-04-26 15:28:22 +0000135 // Release the reference that was added in GetVoiceEngine.
136 int ref = s->Release();
niklase@google.com470e71d2011-07-07 08:21:25 +0000137 voiceEngine = NULL;
138
tommi@webrtc.orga990e122012-04-26 15:28:22 +0000139 if (ref != 0) {
140 WEBRTC_TRACE(kTraceWarning, kTraceVoice, -1,
141 "VoiceEngine::Delete did not release the very last reference. "
142 "%d references remain.", ref);
143 }
144
niklase@google.com470e71d2011-07-07 08:21:25 +0000145 return true;
146}
147
148int VoiceEngine::SetAndroidObjects(void* javaVM, void* env, void* context)
149{
leozwang@webrtc.orgcf1375a2012-09-21 17:39:45 +0000150#ifdef WEBRTC_ANDROID
151#ifdef WEBRTC_ANDROID_OPENSLES
henrike@webrtc.org82f014a2013-09-10 18:24:07 +0000152 AudioManagerJni::SetAndroidAudioDeviceObjects(javaVM, env, context);
leozwang@webrtc.orgcf1375a2012-09-21 17:39:45 +0000153 return 0;
154#else
leozwang@webrtc.org2db85bc2012-09-18 20:19:00 +0000155 return AudioDeviceAndroidJni::SetAndroidAudioDeviceObjects(
156 javaVM, env, context);
leozwang@webrtc.orgcf1375a2012-09-21 17:39:45 +0000157#endif
niklase@google.com470e71d2011-07-07 08:21:25 +0000158#else
leozwang@webrtc.org2db85bc2012-09-18 20:19:00 +0000159 return -1;
niklase@google.com470e71d2011-07-07 08:21:25 +0000160#endif
161}
162
pbos@webrtc.orgd900e8b2013-07-03 15:12:26 +0000163} // namespace webrtc