1 /*
2  *  Copyright (c) 2012 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_VOICE_ENGINE_VOE_STANDARD_TEST_H
12 #define WEBRTC_VOICE_ENGINE_VOE_STANDARD_TEST_H
13 
14 #include <stdio.h>
15 #include <string>
16 
17 #include "gflags/gflags.h"
18 #include "webrtc/voice_engine/include/voe_audio_processing.h"
19 #include "webrtc/voice_engine/include/voe_base.h"
20 #include "webrtc/voice_engine/include/voe_dtmf.h"
21 #include "webrtc/voice_engine/include/voe_errors.h"
22 #include "webrtc/voice_engine/include/voe_file.h"
23 #include "webrtc/voice_engine/include/voe_rtp_rtcp.h"
24 #include "webrtc/voice_engine/test/auto_test/resource_manager.h"
25 #include "webrtc/voice_engine/test/auto_test/voe_test_common.h"
26 #include "webrtc/voice_engine/test/auto_test/voe_test_interface.h"
27 #ifdef WEBRTC_VOICE_ENGINE_CODEC_API
28 #include "webrtc/voice_engine/include/voe_codec.h"
29 #endif
30 #ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API
31 #include "webrtc/voice_engine/include/voe_external_media.h"
32 #endif
33 #ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API
34 #include "webrtc/voice_engine/include/voe_hardware.h"
35 #endif
36 #include "webrtc/voice_engine/include/voe_network.h"
37 #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API
38 #include "webrtc/voice_engine/include/voe_video_sync.h"
39 #endif
40 #ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API
41 #include "webrtc/voice_engine/include/voe_volume_control.h"
42 #endif
43 
44 #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
45 namespace webrtc {
46 class CriticalSectionWrapper;
47 class VoENetEqStats;
48 }
49 #endif
50 
51 #if defined(WEBRTC_ANDROID)
52 extern char mobileLogMsg[640];
53 #endif
54 
55 DECLARE_bool(include_timing_dependent_tests);
56 
57 namespace voetest {
58 
59 class SubAPIManager {
60  public:
SubAPIManager()61   SubAPIManager()
62     : _base(true),
63       _codec(false),
64       _dtmf(false),
65       _externalMedia(false),
66       _file(false),
67       _hardware(false),
68       _netEqStats(false),
69       _network(false),
70       _rtp_rtcp(false),
71       _videoSync(false),
72       _volumeControl(false),
73       _apm(false) {
74 #ifdef WEBRTC_VOICE_ENGINE_CODEC_API
75       _codec = true;
76 #endif
77 #ifdef WEBRTC_VOICE_ENGINE_DTMF_API
78       _dtmf = true;
79 #endif
80 #ifdef WEBRTC_VOICE_ENGINE_EXTERNAL_MEDIA_API
81       _externalMedia = true;
82 #endif
83 #ifdef WEBRTC_VOICE_ENGINE_FILE_API
84       _file = true;
85 #endif
86 #ifdef WEBRTC_VOICE_ENGINE_HARDWARE_API
87       _hardware = true;
88 #endif
89 #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
90       _netEqStats = true;
91 #endif
92       _network = true;
93 #ifdef WEBRTC_VOICE_ENGINE_RTP_RTCP_API
94       _rtp_rtcp = true;
95 #endif
96 #ifdef WEBRTC_VOICE_ENGINE_VIDEO_SYNC_API
97       _videoSync = true;
98 #endif
99 #ifdef WEBRTC_VOICE_ENGINE_VOLUME_CONTROL_API
100       _volumeControl = true;
101 #endif
102 #ifdef WEBRTC_VOICE_ENGINE_AUDIO_PROCESSING_API
103       _apm = true;
104 #endif
105   }
106 
107   void DisplayStatus() const;
108 
109  private:
110   bool _base, _codec, _dtmf;
111   bool _externalMedia, _file, _hardware;
112   bool _netEqStats, _network, _rtp_rtcp, _videoSync, _volumeControl, _apm;
113 };
114 
115 class VoETestManager {
116  public:
117   VoETestManager();
118   ~VoETestManager();
119 
120   // Must be called after construction.
121   bool Init();
122 
123   void GetInterfaces();
124   int ReleaseInterfaces();
125 
AudioFilename()126   const char* AudioFilename() const {
127     const std::string& result = resource_manager_.long_audio_file_path();
128     if (result.length() == 0) {
129       TEST_LOG("ERROR: Failed to open input file!");
130     }
131     return result.c_str();
132   }
133 
VoiceEnginePtr()134   VoiceEngine* VoiceEnginePtr() const {
135     return voice_engine_;
136   }
BasePtr()137   VoEBase* BasePtr() const {
138     return voe_base_;
139   }
CodecPtr()140   VoECodec* CodecPtr() const {
141     return voe_codec_;
142   }
VolumeControlPtr()143   VoEVolumeControl* VolumeControlPtr() const {
144     return voe_volume_control_;
145   }
DtmfPtr()146   VoEDtmf* DtmfPtr() const {
147     return voe_dtmf_;
148   }
RTP_RTCPPtr()149   VoERTP_RTCP* RTP_RTCPPtr() const {
150     return voe_rtp_rtcp_;
151   }
APMPtr()152   VoEAudioProcessing* APMPtr() const {
153     return voe_apm_;
154   }
155 
NetworkPtr()156   VoENetwork* NetworkPtr() const {
157     return voe_network_;
158   }
159 
FilePtr()160   VoEFile* FilePtr() const {
161     return voe_file_;
162   }
163 
HardwarePtr()164   VoEHardware* HardwarePtr() const {
165     return voe_hardware_;
166   }
167 
VideoSyncPtr()168   VoEVideoSync* VideoSyncPtr() const {
169     return voe_vsync_;
170   }
171 
ExternalMediaPtr()172   VoEExternalMedia* ExternalMediaPtr() const {
173     return voe_xmedia_;
174   }
175 
176 #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
NetEqStatsPtr()177   VoENetEqStats* NetEqStatsPtr() const {
178     return voe_neteq_stats_;
179   }
180 #endif
181 
182  private:
183   bool                   initialized_;
184 
185   VoiceEngine*           voice_engine_;
186   VoEBase*               voe_base_;
187   VoECodec*              voe_codec_;
188   VoEDtmf*               voe_dtmf_;
189   VoEExternalMedia*      voe_xmedia_;
190   VoEFile*               voe_file_;
191   VoEHardware*           voe_hardware_;
192   VoENetwork*            voe_network_;
193 #ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API
194   VoENetEqStats*         voe_neteq_stats_;
195 #endif
196   VoERTP_RTCP*           voe_rtp_rtcp_;
197   VoEVideoSync*          voe_vsync_;
198   VoEVolumeControl*      voe_volume_control_;
199   VoEAudioProcessing*    voe_apm_;
200 
201   ResourceManager        resource_manager_;
202 };
203 
204 }  // namespace voetest
205 
206 #endif // WEBRTC_VOICE_ENGINE_VOE_STANDARD_TEST_H
207