blob: e171bbca0189a8a421ab40c4fc149424c111b7dd [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
henrike@webrtc.org28e20752013-07-10 00:45:36 +000020namespace cricket {
21
Fredrik Solenbergd3ddc1b2015-05-07 17:07:34 +020022#define WEBRTC_CHECK_CHANNEL(channel) \
23 if (channels_.find(channel) == channels_.end()) return -1;
24
solenbergf7a53352016-08-31 05:18:22 -070025#define WEBRTC_STUB(method, args) \
26 int method args override { return 0; }
27
solenbergf7a53352016-08-31 05:18:22 -070028#define WEBRTC_FUNC(method, args) int method args override
29
solenberg83862e32017-03-28 05:07:15 -070030class FakeWebRtcVoiceEngine : public webrtc::VoEBase {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000031 public:
henrike@webrtc.org28e20752013-07-10 00:45:36 +000032 struct Channel {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000033 std::vector<webrtc::CodecInst> recv_codecs;
solenberg88499ec2016-09-07 07:34:41 -070034 size_t neteq_capacity = 0;
solenbergbc37fc82016-04-04 09:54:44 -070035 bool neteq_fast_accelerate = false;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000036 };
37
Fredrik Solenberg2a877972017-12-15 16:42:15 +010038 FakeWebRtcVoiceEngine() {}
solenbergff976312016-03-30 23:28:51 -070039 ~FakeWebRtcVoiceEngine() override {
solenberg26c8c912015-11-27 04:00:25 -080040 RTC_CHECK(channels_.empty());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000041 }
42
henrike@webrtc.org28e20752013-07-10 00:45:36 +000043 bool IsInited() const { return inited_; }
44 int GetLastChannel() const { return last_channel_; }
wu@webrtc.org9caf2762013-12-11 18:25:07 +000045 int GetNumChannels() const { return static_cast<int>(channels_.size()); }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000046 void set_fail_create_channel(bool fail_create_channel) {
47 fail_create_channel_ = fail_create_channel;
48 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000049
50 WEBRTC_STUB(Release, ());
51
52 // webrtc::VoEBase
ossu5f7cfa52016-05-30 08:11:28 -070053 WEBRTC_FUNC(Init,
54 (webrtc::AudioDeviceModule* adm,
55 webrtc::AudioProcessing* audioproc,
56 const rtc::scoped_refptr<webrtc::AudioDecoderFactory>&
57 decoder_factory)) {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000058 inited_ = true;
59 return 0;
60 }
Fredrik Solenberg55900fd2017-11-23 20:22:55 +010061 void Terminate() override {
henrike@webrtc.org28e20752013-07-10 00:45:36 +000062 inited_ = false;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000063 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000064 WEBRTC_FUNC(CreateChannel, ()) {
solenberg88499ec2016-09-07 07:34:41 -070065 return CreateChannel(webrtc::VoEBase::ChannelConfig());
henrike@webrtc.org28e20752013-07-10 00:45:36 +000066 }
solenberg88499ec2016-09-07 07:34:41 -070067 WEBRTC_FUNC(CreateChannel, (const webrtc::VoEBase::ChannelConfig& config)) {
68 if (fail_create_channel_) {
69 return -1;
70 }
71 Channel* ch = new Channel();
solenberg88499ec2016-09-07 07:34:41 -070072 ch->neteq_capacity = config.acm_config.neteq_config.max_packets_in_buffer;
73 ch->neteq_fast_accelerate =
74 config.acm_config.neteq_config.enable_fast_accelerate;
75 channels_[++last_channel_] = ch;
76 return last_channel_;
wu@webrtc.org364f2042013-11-20 21:49:41 +000077 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000078 WEBRTC_FUNC(DeleteChannel, (int channel)) {
79 WEBRTC_CHECK_CHANNEL(channel);
80 delete channels_[channel];
81 channels_.erase(channel);
82 return 0;
83 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000084
solenberg88499ec2016-09-07 07:34:41 -070085 size_t GetNetEqCapacity() const {
Henrik Lundin64dad832015-05-11 12:44:23 +020086 auto ch = channels_.find(last_channel_);
nisseede5da42017-01-12 05:15:36 -080087 RTC_DCHECK(ch != channels_.end());
Henrik Lundin64dad832015-05-11 12:44:23 +020088 return ch->second->neteq_capacity;
89 }
Henrik Lundin5263b3c2015-06-01 10:29:41 +020090 bool GetNetEqFastAccelerate() const {
91 auto ch = channels_.find(last_channel_);
nissec16fa5e2017-02-07 07:18:43 -080092 RTC_CHECK(ch != channels_.end());
Henrik Lundin5263b3c2015-06-01 10:29:41 +020093 return ch->second->neteq_fast_accelerate;
94 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000095
96 private:
solenbergbc37fc82016-04-04 09:54:44 -070097 bool inited_ = false;
98 int last_channel_ = -1;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000099 std::map<int, Channel*> channels_;
solenbergbc37fc82016-04-04 09:54:44 -0700100 bool fail_create_channel_ = false;
solenberg059fb442016-10-26 05:12:24 -0700101
Fredrik Solenberg2a877972017-12-15 16:42:15 +0100102 RTC_DISALLOW_COPY_AND_ASSIGN(FakeWebRtcVoiceEngine);
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000103};
104
henrike@webrtc.org28e20752013-07-10 00:45:36 +0000105} // namespace cricket
106
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200107#endif // MEDIA_ENGINE_FAKEWEBRTCVOICEENGINE_H_