Injectable audio encoders: WebRtcVoiceEngine and company
These are the changes made to WebRtcVoiceEngine and surrounding
code. It still contains some things that are inelegant, like how
AudioCodecSpec and AudioFormatInfo is ferried around in
SendCodecSpec. This should probably be resolved before landing.
There are also a few test still that are disabled. They should be
removed or fixed, as the case may be.
I've put this CL up to get a better overview of the changes made and
how reviewable they are.
BUG=webrtc:5806
Review-Url: https://codereview.webrtc.org/2705093002
Cr-Commit-Position: refs/heads/master@{#17904}
diff --git a/webrtc/test/BUILD.gn b/webrtc/test/BUILD.gn
index d7c1f8a..9f40c09 100644
--- a/webrtc/test/BUILD.gn
+++ b/webrtc/test/BUILD.gn
@@ -407,6 +407,7 @@
"../audio",
"../base:rtc_base_approved",
"../call",
+ "../modules/audio_coding:builtin_audio_encoder_factory",
"../modules/audio_mixer:audio_mixer_impl",
"../modules/audio_processing",
"../video",
diff --git a/webrtc/test/call_test.cc b/webrtc/test/call_test.cc
index 6ec3fda..f5850e5 100644
--- a/webrtc/test/call_test.cc
+++ b/webrtc/test/call_test.cc
@@ -15,6 +15,7 @@
#include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
#include "webrtc/base/checks.h"
#include "webrtc/config.h"
+#include "webrtc/modules/audio_coding/codecs/builtin_audio_encoder_factory.h"
#include "webrtc/modules/audio_mixer/audio_mixer_impl.h"
#include "webrtc/test/testsupport/fileutils.h"
#include "webrtc/voice_engine/include/voe_base.h"
@@ -38,6 +39,7 @@
num_audio_streams_(0),
num_flexfec_streams_(0),
decoder_factory_(CreateBuiltinAudioDecoderFactory()),
+ encoder_factory_(CreateBuiltinAudioEncoderFactory()),
fake_send_audio_device_(nullptr),
fake_recv_audio_device_(nullptr) {}
@@ -222,8 +224,10 @@
audio_send_config_ = AudioSendStream::Config(send_transport);
audio_send_config_.voe_channel_id = voe_send_.channel_id;
audio_send_config_.rtp.ssrc = kAudioSendSsrc;
- audio_send_config_.send_codec_spec.codec_inst =
- CodecInst{kAudioSendPayloadType, "OPUS", 48000, 960, 2, 64000};
+ audio_send_config_.send_codec_spec =
+ rtc::Optional<AudioSendStream::Config::SendCodecSpec>(
+ {kAudioSendPayloadType, {"OPUS", 48000, 2, {{"stereo", "1"}}}});
+ audio_send_config_.encoder_factory = encoder_factory_;
}
// TODO(brandtr): Update this when we support multistream protection.
diff --git a/webrtc/test/call_test.h b/webrtc/test/call_test.h
index b9523f5..39df343 100644
--- a/webrtc/test/call_test.h
+++ b/webrtc/test/call_test.h
@@ -123,6 +123,7 @@
size_t num_audio_streams_;
size_t num_flexfec_streams_;
rtc::scoped_refptr<AudioDecoderFactory> decoder_factory_;
+ rtc::scoped_refptr<AudioEncoderFactory> encoder_factory_;
test::FakeVideoRenderer fake_renderer_;
private:
diff --git a/webrtc/test/mock_voe_channel_proxy.h b/webrtc/test/mock_voe_channel_proxy.h
index 26645d4..bd6bb4c 100644
--- a/webrtc/test/mock_voe_channel_proxy.h
+++ b/webrtc/test/mock_voe_channel_proxy.h
@@ -30,6 +30,9 @@
MOCK_METHOD2(SetEncoderForMock,
bool(int payload_type,
std::unique_ptr<AudioEncoder>* encoder));
+ MOCK_METHOD1(
+ ModifyEncoder,
+ void(rtc::FunctionView<void(std::unique_ptr<AudioEncoder>*)> modifier));
MOCK_METHOD1(SetRTCPStatus, void(bool enable));
MOCK_METHOD1(SetLocalSSRC, void(uint32_t ssrc));
MOCK_METHOD1(SetRTCP_CNAME, void(const std::string& c_name));
@@ -68,11 +71,6 @@
MOCK_METHOD1(SetChannelOutputVolumeScaling, void(float scaling));
MOCK_METHOD1(SetRtcEventLog, void(RtcEventLog* event_log));
MOCK_METHOD1(SetRtcpRttStats, void(RtcpRttStats* rtcp_rtt_stats));
- MOCK_METHOD1(EnableAudioNetworkAdaptor,
- void(const std::string& config_string));
- MOCK_METHOD0(DisableAudioNetworkAdaptor, void());
- MOCK_METHOD2(SetReceiverFrameLengthRange,
- void(int min_frame_length_ms, int max_frame_length_ms));
MOCK_METHOD2(GetAudioFrameWithInfo,
AudioMixer::Source::AudioFrameInfo(int sample_rate_hz,
AudioFrame* audio_frame));
@@ -86,14 +84,6 @@
MOCK_CONST_METHOD0(GetPlayoutTimestamp, uint32_t());
MOCK_METHOD1(SetMinimumPlayoutDelay, void(int delay_ms));
MOCK_CONST_METHOD1(GetRecCodec, bool(CodecInst* codec_inst));
- MOCK_CONST_METHOD1(GetSendCodec, bool(CodecInst* codec_inst));
- MOCK_METHOD1(SetVADStatus, bool(bool enable));
- MOCK_METHOD1(SetCodecFECStatus, bool(bool enable));
- MOCK_METHOD1(SetOpusDtx, bool(bool enable));
- MOCK_METHOD1(SetOpusMaxPlaybackRate, bool(int frequency_hz));
- MOCK_METHOD1(SetSendCodec, bool(const CodecInst& codec_inst));
- MOCK_METHOD2(SetSendCNPayloadType,
- bool(int type, PayloadFrequencies frequency));
MOCK_METHOD1(SetReceiveCodecs,
void(const std::map<int, SdpAudioFormat>& codecs));
MOCK_METHOD1(OnTwccBasedUplinkPacketLossRate, void(float packet_loss_rate));