Index: webrtc/test/fake_voice_engine.h |
diff --git a/webrtc/test/fake_voice_engine.h b/webrtc/test/fake_voice_engine.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..72f6b27dd2e3c6d995427e4aa4ae9c53ee238926 |
--- /dev/null |
+++ b/webrtc/test/fake_voice_engine.h |
@@ -0,0 +1,421 @@ |
+/* |
+ * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
+ * |
+ * Use of this source code is governed by a BSD-style license |
+ * that can be found in the LICENSE file in the root of the source |
+ * tree. An additional intellectual property rights grant can be found |
+ * in the file PATENTS. All contributing project authors may |
+ * be found in the AUTHORS file in the root of the source tree. |
+ */ |
+ |
+#ifndef WEBRTC_AUDIO_FAKE_VOICE_ENGINE_H_ |
+#define WEBRTC_AUDIO_FAKE_VOICE_ENGINE_H_ |
+ |
+#include <vector> |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+#include "webrtc/voice_engine/voice_engine_impl.h" |
+ |
+namespace webrtc { |
+namespace test { |
+ |
+// NOTE: This class inherits from VoiceEngineImpl so that its clients will be |
+// able to get the various interfaces as usual, via T::GetInterface(). |
+class FakeVoiceEngine final : public VoiceEngineImpl { |
+ public: |
+ const int kSendChannelId = 1; |
+ const int kReceiveChannelId = 2; |
+ |
+ const int kRecvJitterBufferDelay = -7; |
+ const int kRecvPlayoutBufferDelay = 302; |
+ const unsigned int kRecvSpeechOutputLevel = 99; |
+ |
+ FakeVoiceEngine() : VoiceEngineImpl(new Config(), true) { |
+ // Increase ref count so this object isn't automatically deleted whenever |
+ // interfaces are Release():d. |
+ ++_ref_count; |
+ } |
+ ~FakeVoiceEngine() override { |
+ // Decrease ref count before base class d-tor is called; otherwise it will |
+ // trigger an assertion. |
+ --_ref_count; |
+ } |
+ |
+ const CallStatistics& GetRecvCallStats() const { |
+ static const CallStatistics kStats = { |
+ 345, 678, 901, 234, -1, 0, 0, 567, 890, 123 |
+ }; |
+ return kStats; |
+ } |
+ |
+ const CodecInst& GetRecvRecCodecInst() const { |
+ static const CodecInst kStats = { |
+ 123, "codec_name", 96000, -1, -1, -1 |
+ }; |
+ return kStats; |
+ } |
+ |
+ const NetworkStatistics& GetRecvNetworkStats() const { |
+ static const NetworkStatistics kStats = { |
+ 123, 456, false, 0, 0, 789, 12, 345, 678, 901, -1, -1, -1, -1, -1, 0 |
+ }; |
+ return kStats; |
+ } |
+ |
+ const AudioDecodingCallStats& GetRecvAudioDecodingCallStats() const { |
+ static AudioDecodingCallStats stats; |
+ if (stats.calls_to_silence_generator == 0) { |
+ stats.calls_to_silence_generator = 234; |
+ stats.calls_to_neteq = 567; |
+ stats.decoded_normal = 890; |
+ stats.decoded_plc = 123; |
+ stats.decoded_cng = 456; |
+ stats.decoded_plc_cng = 789; |
+ } |
+ return stats; |
+ } |
+ |
+ // VoEBase |
+ int RegisterVoiceEngineObserver(VoiceEngineObserver& observer) override { |
+ return -1; |
+ } |
+ int DeRegisterVoiceEngineObserver() override { return -1; } |
+ int Init(AudioDeviceModule* external_adm = NULL, |
+ AudioProcessing* audioproc = NULL) override { return -1; } |
+ AudioProcessing* audio_processing() override { return nullptr; } |
+ int Terminate() override { return -1; } |
+ int CreateChannel() override { return -1; } |
+ int CreateChannel(const Config& config) override { return -1; } |
+ int DeleteChannel(int channel) override { return -1; } |
+ int StartReceive(int channel) override { return -1; } |
+ int StopReceive(int channel) override { return -1; } |
+ int StartPlayout(int channel) override { return -1; } |
+ int StopPlayout(int channel) override { return -1; } |
+ int StartSend(int channel) override { return -1; } |
+ int StopSend(int channel) override { return -1; } |
+ int GetVersion(char version[1024]) override { return -1; } |
+ int LastError() override { return -1; } |
+ AudioTransport* audio_transport() { return nullptr; } |
+ int AssociateSendChannel(int channel, int accociate_send_channel) override { |
+ return -1; |
+ } |
+ |
+ // VoECodec |
+ int NumOfCodecs() override { return -1; } |
+ int GetCodec(int index, CodecInst& codec) override { return -1; } |
+ int SetSendCodec(int channel, const CodecInst& codec) override { return -1; } |
+ int GetSendCodec(int channel, CodecInst& codec) override { return -1; } |
+ int SetBitRate(int channel, int bitrate_bps) override { return -1; } |
+ int GetRecCodec(int channel, CodecInst& codec) override { |
+ EXPECT_EQ(channel, kReceiveChannelId); |
+ codec = GetRecvRecCodecInst(); |
+ return 0; |
+ } |
+ int SetRecPayloadType(int channel, const CodecInst& codec) override { |
+ return -1; |
+ } |
+ int GetRecPayloadType(int channel, CodecInst& codec) override { return -1; } |
+ int SetSendCNPayloadType(int channel, int type, |
+ PayloadFrequencies frequency = kFreq16000Hz) override { return -1; } |
+ int SetVADStatus(int channel, |
+ bool enable, |
+ VadModes mode = kVadConventional, |
+ bool disableDTX = false) override { return -1; } |
+ int GetVADStatus(int channel, |
+ bool& enabled, |
+ VadModes& mode, |
+ bool& disabledDTX) override { return -1; } |
+ int SetOpusMaxPlaybackRate(int channel, int frequency_hz) override { |
+ return -1; |
+ } |
+ int SetOpusDtx(int channel, bool enable_dtx) override { return -1; } |
+ RtcEventLog* GetEventLog() override { return nullptr; } |
+ |
+ // VoEDtmf |
+ int SendTelephoneEvent(int channel, |
+ int eventCode, |
+ bool outOfBand = true, |
+ int lengthMs = 160, |
+ int attenuationDb = 10) override { return -1; } |
+ int SetSendTelephoneEventPayloadType(int channel, |
+ unsigned char type) override { |
+ return -1; |
+ } |
+ int GetSendTelephoneEventPayloadType(int channel, |
+ unsigned char& type) override { |
+ return -1; |
+ } |
+ int SetDtmfFeedbackStatus(bool enable, |
+ bool directFeedback = false) override { return -1; } |
+ int GetDtmfFeedbackStatus(bool& enabled, bool& directFeedback) override { |
+ return -1; |
+ } |
+ int PlayDtmfTone(int eventCode, |
+ int lengthMs = 200, |
+ int attenuationDb = 10) override { return -1; } |
+ |
+ // VoEExternalMedia |
+ int RegisterExternalMediaProcessing( |
+ int channel, |
+ ProcessingTypes type, |
+ VoEMediaProcess& processObject) override { return -1; } |
+ int DeRegisterExternalMediaProcessing(int channel, |
+ ProcessingTypes type) override { |
+ return -1; |
+ } |
+ int GetAudioFrame(int channel, |
+ int desired_sample_rate_hz, |
+ AudioFrame* frame) override { return -1; } |
+ int SetExternalMixing(int channel, bool enable) override { return -1; } |
+ |
+ // VoEFile |
+ int StartPlayingFileLocally( |
+ int channel, |
+ const char fileNameUTF8[1024], |
+ bool loop = false, |
+ FileFormats format = kFileFormatPcm16kHzFile, |
+ float volumeScaling = 1.0, |
+ int startPointMs = 0, |
+ int stopPointMs = 0) override { return -1; } |
+ int StartPlayingFileLocally( |
+ int channel, |
+ InStream* stream, |
+ FileFormats format = kFileFormatPcm16kHzFile, |
+ float volumeScaling = 1.0, |
+ int startPointMs = 0, |
+ int stopPointMs = 0) override { return -1; } |
+ int StopPlayingFileLocally(int channel) override { return -1; } |
+ int IsPlayingFileLocally(int channel) override { return -1; } |
+ int StartPlayingFileAsMicrophone( |
+ int channel, |
+ const char fileNameUTF8[1024], |
+ bool loop = false, |
+ bool mixWithMicrophone = false, |
+ FileFormats format = kFileFormatPcm16kHzFile, |
+ float volumeScaling = 1.0) override { return -1; } |
+ int StartPlayingFileAsMicrophone( |
+ int channel, |
+ InStream* stream, |
+ bool mixWithMicrophone = false, |
+ FileFormats format = kFileFormatPcm16kHzFile, |
+ float volumeScaling = 1.0) override { return -1; } |
+ int StopPlayingFileAsMicrophone(int channel) override { return -1; } |
+ int IsPlayingFileAsMicrophone(int channel) override { return -1; } |
+ int StartRecordingPlayout(int channel, |
+ const char* fileNameUTF8, |
+ CodecInst* compression = NULL, |
+ int maxSizeBytes = -1) override { return -1; } |
+ int StopRecordingPlayout(int channel) override { return -1; } |
+ int StartRecordingPlayout(int channel, |
+ OutStream* stream, |
+ CodecInst* compression = NULL) override { |
+ return -1; |
+ } |
+ int StartRecordingMicrophone(const char* fileNameUTF8, |
+ CodecInst* compression = NULL, |
+ int maxSizeBytes = -1) override { return -1; } |
+ int StartRecordingMicrophone(OutStream* stream, |
+ CodecInst* compression = NULL) override { |
+ return -1; |
+ } |
+ int StopRecordingMicrophone() override { return -1; } |
+ |
+ // VoEHardware |
+ int GetNumOfRecordingDevices(int& devices) override { return -1; } |
+ |
+ // Gets the number of audio devices available for playout. |
+ int GetNumOfPlayoutDevices(int& devices) override { return -1; } |
+ |
+ // Gets the name of a specific recording device given by an |index|. |
+ // On Windows Vista/7, it also retrieves an additional unique ID |
+ // (GUID) for the recording device. |
+ int GetRecordingDeviceName(int index, |
+ char strNameUTF8[128], |
+ char strGuidUTF8[128]) override { return -1; } |
+ |
+ // Gets the name of a specific playout device given by an |index|. |
+ // On Windows Vista/7, it also retrieves an additional unique ID |
+ // (GUID) for the playout device. |
+ int GetPlayoutDeviceName(int index, |
+ char strNameUTF8[128], |
+ char strGuidUTF8[128]) override { return -1; } |
+ |
+ // Sets the audio device used for recording. |
+ int SetRecordingDevice( |
+ int index, |
+ StereoChannel recordingChannel = kStereoBoth) override { return -1; } |
+ |
+ // Sets the audio device used for playout. |
+ int SetPlayoutDevice(int index) override { return -1; } |
+ |
+ // Sets the type of audio device layer to use. |
+ int SetAudioDeviceLayer(AudioLayers audioLayer) override { return -1; } |
+ |
+ // Gets the currently used (active) audio device layer. |
+ int GetAudioDeviceLayer(AudioLayers& audioLayer) override { return -1; } |
+ |
+ // Native sample rate controls (samples/sec) |
+ int SetRecordingSampleRate(unsigned int samples_per_sec) override { |
+ return -1; |
+ } |
+ int RecordingSampleRate(unsigned int* samples_per_sec) const override { |
+ return -1; |
+ } |
+ int SetPlayoutSampleRate(unsigned int samples_per_sec) override { |
+ return -1; |
+ } |
+ int PlayoutSampleRate(unsigned int* samples_per_sec) const override { |
+ return -1; |
+ } |
+ |
+ // Queries and controls platform audio effects on Android devices. |
+ bool BuiltInAECIsAvailable() const override { return false; } |
+ int EnableBuiltInAEC(bool enable) override { return -1; } |
+ bool BuiltInAGCIsAvailable() const override { return false; } |
+ int EnableBuiltInAGC(bool enable) override { return -1; } |
+ bool BuiltInNSIsAvailable() const override { return false; } |
+ int EnableBuiltInNS(bool enable) override { return -1; } |
+ |
+ // VoENetwork |
+ int RegisterExternalTransport(int channel, Transport& transport) override { |
+ return -1; |
+ } |
+ int DeRegisterExternalTransport(int channel) override { return -1; } |
+ int ReceivedRTPPacket(int channel, |
+ const void* data, |
+ size_t length) override { return -1; } |
+ int ReceivedRTPPacket(int channel, |
+ const void* data, |
+ size_t length, |
+ const PacketTime& packet_time) override { return -1; } |
+ int ReceivedRTCPPacket(int channel, |
+ const void* data, |
+ size_t length) { return -1; } |
+ |
+ // VoENetEqStats |
+ int GetNetworkStatistics(int channel, NetworkStatistics& stats) override { |
+ EXPECT_EQ(channel, kReceiveChannelId); |
+ stats = GetRecvNetworkStats(); |
+ return 0; |
+ } |
+ int GetDecodingCallStatistics(int channel, |
+ AudioDecodingCallStats* stats) const override { |
+ EXPECT_EQ(channel, kReceiveChannelId); |
+ EXPECT_NE(nullptr, stats); |
+ *stats = GetRecvAudioDecodingCallStats(); |
+ return 0; |
+ } |
+ |
+ // VoERTP_RTCP |
+ int SetLocalSSRC(int channel, unsigned int ssrc) override { return -1; } |
+ int GetLocalSSRC(int channel, unsigned int& ssrc) override { return -1; } |
+ int GetRemoteSSRC(int channel, unsigned int& ssrc) override { |
+ EXPECT_EQ(channel, kReceiveChannelId); |
+ ssrc = 0; |
+ return 0; |
+ } |
+ int SetSendAudioLevelIndicationStatus(int channel, |
+ bool enable, |
+ unsigned char id = 1) override { |
+ return -1; |
+ } |
+ int SetSendAbsoluteSenderTimeStatus(int channel, |
+ bool enable, |
+ unsigned char id) override { return -1; } |
+ int SetReceiveAbsoluteSenderTimeStatus(int channel, |
+ bool enable, |
+ unsigned char id) override { |
+ return -1; |
+ } |
+ int SetRTCPStatus(int channel, bool enable) override { return -1; } |
+ int GetRTCPStatus(int channel, bool& enabled) override { return -1; } |
+ int SetRTCP_CNAME(int channel, const char cName[256]) override { return -1; } |
+ int GetRTCP_CNAME(int channel, char cName[256]) { return -1; } |
+ int GetRemoteRTCP_CNAME(int channel, char cName[256]) override { return -1; } |
+ int GetRemoteRTCPData(int channel, |
+ unsigned int& NTPHigh, |
+ unsigned int& NTPLow, |
+ unsigned int& timestamp, |
+ unsigned int& playoutTimestamp, |
+ unsigned int* jitter = NULL, |
+ unsigned short* fractionLost = NULL) override { |
+ return -1; |
+ } |
+ int GetRTPStatistics(int channel, |
+ unsigned int& averageJitterMs, |
+ unsigned int& maxJitterMs, |
+ unsigned int& discardedPackets) override { return -1; } |
+ int GetRTCPStatistics(int channel, CallStatistics& stats) override { |
+ EXPECT_EQ(channel, kReceiveChannelId); |
+ stats = GetRecvCallStats(); |
+ return 0; |
+ } |
+ int GetRemoteRTCPReportBlocks( |
+ int channel, |
+ std::vector<ReportBlock>* receive_blocks) override { return -1; } |
+ int SetNACKStatus(int channel, bool enable, int maxNoPackets) override { |
+ return -1; |
+ } |
+ |
+ // VoEVideoSync |
+ int GetPlayoutBufferSize(int& buffer_ms) override { return -1; } |
+ int SetMinimumPlayoutDelay(int channel, int delay_ms) override { return -1; } |
+ int SetInitialPlayoutDelay(int channel, int delay_ms) override { return -1; } |
+ int GetDelayEstimate(int channel, |
+ int* jitter_buffer_delay_ms, |
+ int* playout_buffer_delay_ms) override { |
+ EXPECT_EQ(channel, kReceiveChannelId); |
+ *jitter_buffer_delay_ms = kRecvJitterBufferDelay; |
+ *playout_buffer_delay_ms = kRecvPlayoutBufferDelay; |
+ return 0; |
+ } |
+ int GetLeastRequiredDelayMs(int channel) const override { return -1; } |
+ int SetInitTimestamp(int channel, unsigned int timestamp) override { |
+ return -1; |
+ } |
+ int SetInitSequenceNumber(int channel, short sequenceNumber) override { |
+ return -1; |
+ } |
+ int GetPlayoutTimestamp(int channel, unsigned int& timestamp) override { |
+ return -1; |
+ } |
+ int GetRtpRtcp(int channel, |
+ RtpRtcp** rtpRtcpModule, |
+ RtpReceiver** rtp_receiver) override { return -1; } |
+ |
+ // VoEVolumeControl |
+ int SetSpeakerVolume(unsigned int volume) override { return -1; } |
+ int GetSpeakerVolume(unsigned int& volume) override { return -1; } |
+ int SetMicVolume(unsigned int volume) override { return -1; } |
+ int GetMicVolume(unsigned int& volume) override { return -1; } |
+ int SetInputMute(int channel, bool enable) override { return -1; } |
+ int GetInputMute(int channel, bool& enabled) override { return -1; } |
+ int GetSpeechInputLevel(unsigned int& level) override { return -1; } |
+ int GetSpeechOutputLevel(int channel, unsigned int& level) override { |
+ return -1; |
+ } |
+ int GetSpeechInputLevelFullRange(unsigned int& level) override { return -1; } |
+ int GetSpeechOutputLevelFullRange(int channel, |
+ unsigned int& level) override { |
+ EXPECT_EQ(channel, kReceiveChannelId); |
+ level = kRecvSpeechOutputLevel; |
+ return 0; |
+ } |
+ int SetChannelOutputVolumeScaling(int channel, float scaling) override { |
+ return -1; |
+ } |
+ int GetChannelOutputVolumeScaling(int channel, float& scaling) override { |
+ return -1; |
+ } |
+ int SetOutputVolumePan(int channel, float left, float right) override { |
+ return -1; |
+ } |
+ int GetOutputVolumePan(int channel, float& left, float& right) override { |
+ return -1; |
+ } |
+}; |
+} // namespace test |
+} // namespace webrtc |
+ |
+#endif // WEBRTC_AUDIO_FAKE_VOICE_ENGINE_H_ |