| 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_
 | 
| 
 |