blob: 7e8e5c2b28c9a24a3ce7330bb0f410035e9dd8db [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellander1afca732016-02-07 20:46:45 -08002 * Copyright (c) 2010 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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MEDIA_ENGINE_FAKEWEBRTCVOICEENGINE_H_
12#define MEDIA_ENGINE_FAKEWEBRTCVOICEENGINE_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013
henrike@webrtc.org28e20752013-07-10 00:45:36 +000014#include <map>
15#include <vector>
16
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "media/engine/webrtcvoe.h"
18#include "rtc_base/checks.h"
buildbot@webrtc.orgf875f152014-04-14 16:06:21 +000019
solenberg76377c52017-02-21 00:54:31 -080020namespace webrtc {
21namespace voe {
22class TransmitMixer;
23} // namespace voe
24} // namespace webrtc
25
henrike@webrtc.org28e20752013-07-10 00:45:36 +000026namespace cricket {
27
Fredrik Solenbergd3ddc1b2015-05-07 17:07:34 +020028#define WEBRTC_CHECK_CHANNEL(channel) \
29 if (channels_.find(channel) == channels_.end()) return -1;
30
solenbergf7a53352016-08-31 05:18:22 -070031#define WEBRTC_STUB(method, args) \
32 int method args override { return 0; }
33
solenbergf7a53352016-08-31 05:18:22 -070034#define WEBRTC_FUNC(method, args) int method args override
35
solenberg83862e32017-03-28 05:07:15 -070036class FakeWebRtcVoiceEngine : public webrtc::VoEBase {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000037 public:
henrike@webrtc.org28e20752013-07-10 00:45:36 +000038 struct Channel {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000039 std::vector<webrtc::CodecInst> recv_codecs;
solenberg88499ec2016-09-07 07:34:41 -070040 size_t neteq_capacity = 0;
solenbergbc37fc82016-04-04 09:54:44 -070041 bool neteq_fast_accelerate = false;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000042 };
43
peaha9cc40b2017-06-29 08:32:09 -070044 explicit FakeWebRtcVoiceEngine(webrtc::voe::TransmitMixer* transmit_mixer)
45 : transmit_mixer_(transmit_mixer) {}
solenbergff976312016-03-30 23:28:51 -070046 ~FakeWebRtcVoiceEngine() override {
solenberg26c8c912015-11-27 04:00:25 -080047 RTC_CHECK(channels_.empty());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000048 }
49
henrike@webrtc.org28e20752013-07-10 00:45:36 +000050 bool IsInited() const { return inited_; }
51 int GetLastChannel() const { return last_channel_; }
wu@webrtc.org9caf2762013-12-11 18:25:07 +000052 int GetNumChannels() const { return static_cast<int>(channels_.size()); }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000053 void set_fail_create_channel(bool fail_create_channel) {
54 fail_create_channel_ = fail_create_channel;
55 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000056
57 WEBRTC_STUB(Release, ());
58
59 // webrtc::VoEBase
ossu5f7cfa52016-05-30 08:11:28 -070060 WEBRTC_FUNC(Init,
61 (webrtc::AudioDeviceModule* adm,
62 webrtc::AudioProcessing* audioproc,
63 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
64 decoder_factory)) {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000065 inited_ = true;
66 return 0;
67 }
68 WEBRTC_FUNC(Terminate, ()) {
69 inited_ = false;
70 return 0;
71 }
solenbergff976312016-03-30 23:28:51 -070072 webrtc::AudioDeviceModule* audio_device_module() override {
solenbergbc37fc82016-04-04 09:54:44 -070073 return nullptr;
solenbergff976312016-03-30 23:28:51 -070074 }
solenberg76377c52017-02-21 00:54:31 -080075 webrtc::voe::TransmitMixer* transmit_mixer() override {
76 return transmit_mixer_;
77 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000078 WEBRTC_FUNC(CreateChannel, ()) {
solenberg88499ec2016-09-07 07:34:41 -070079 return CreateChannel(webrtc::VoEBase::ChannelConfig());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000080 }
solenberg88499ec2016-09-07 07:34:41 -070081 WEBRTC_FUNC(CreateChannel, (const webrtc::VoEBase::ChannelConfig& config)) {
82 if (fail_create_channel_) {
83 return -1;
84 }
85 Channel* ch = new Channel();
solenberg88499ec2016-09-07 07:34:41 -070086 ch->neteq_capacity = config.acm_config.neteq_config.max_packets_in_buffer;
87 ch->neteq_fast_accelerate =
88 config.acm_config.neteq_config.enable_fast_accelerate;
89 channels_[++last_channel_] = ch;
90 return last_channel_;
wu@webrtc.org364f2042013-11-20 21:49:41 +000091 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000092 WEBRTC_FUNC(DeleteChannel, (int channel)) {
93 WEBRTC_CHECK_CHANNEL(channel);
94 delete channels_[channel];
95 channels_.erase(channel);
96 return 0;
97 }
aleloi84ef6152016-08-04 05:28:21 -070098 WEBRTC_STUB(StartPlayout, (int channel));
Taylor Brandstetter1a018dc2016-03-08 12:37:39 -080099 WEBRTC_STUB(StartSend, (int channel));
aleloi84ef6152016-08-04 05:28:21 -0700100 WEBRTC_STUB(StopPlayout, (int channel));
Taylor Brandstetter1a018dc2016-03-08 12:37:39 -0800101 WEBRTC_STUB(StopSend, (int channel));
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000102
solenberg88499ec2016-09-07 07:34:41 -0700103 size_t GetNetEqCapacity() const {
Henrik Lundin64dad832015-05-11 12:44:23 +0200104 auto ch = channels_.find(last_channel_);
nisseede5da42017-01-12 05:15:36 -0800105 RTC_DCHECK(ch != channels_.end());
Henrik Lundin64dad832015-05-11 12:44:23 +0200106 return ch->second->neteq_capacity;
107 }
Henrik Lundin5263b3c2015-06-01 10:29:41 +0200108 bool GetNetEqFastAccelerate() const {
109 auto ch = channels_.find(last_channel_);
nissec16fa5e2017-02-07 07:18:43 -0800110 RTC_CHECK(ch != channels_.end());
Henrik Lundin5263b3c2015-06-01 10:29:41 +0200111 return ch->second->neteq_fast_accelerate;
112 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000113
114 private:
solenbergbc37fc82016-04-04 09:54:44 -0700115 bool inited_ = false;
116 int last_channel_ = -1;
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000117 std::map<int, Channel*> channels_;
solenbergbc37fc82016-04-04 09:54:44 -0700118 bool fail_create_channel_ = false;
solenberg76377c52017-02-21 00:54:31 -0800119 webrtc::voe::TransmitMixer* transmit_mixer_ = nullptr;
solenberg059fb442016-10-26 05:12:24 -0700120
121 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(FakeWebRtcVoiceEngine);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000122};
123
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000124} // namespace cricket
125
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200126#endif // MEDIA_ENGINE_FAKEWEBRTCVOICEENGINE_H_