10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2010 Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef TALK_SESSION_PHONE_FAKEWEBRTCVOICEENGINE_H_ 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TALK_SESSION_PHONE_FAKEWEBRTCVOICEENGINE_H_ 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <list> 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <map> 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/codec.h" 36ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org#include "talk/media/base/rtputils.h" 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/voiceprocessor.h" 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/webrtc/fakewebrtccommon.h" 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/webrtc/webrtcvoe.h" 40cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/basictypes.h" 41cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/gunit.h" 42cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "webrtc/base/stringutils.h" 43440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#ifdef USE_WEBRTC_DEV_BRANCH 44440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#include "webrtc/modules/audio_processing/include/audio_processing.h" 45440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#endif 465462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org#include "webrtc/video_engine/include/vie_network.h" 47afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace cricket { 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Function returning stats will return these values 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// for all values based on type. 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst int kIntStatValue = 123; 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst float kFractionLostStatValue = 0.5; 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const char kFakeDefaultDeviceName[] = "Fake Default"; 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kFakeDefaultDeviceId = -1; 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const char kFakeDeviceName[] = "Fake Device"; 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifdef WIN32 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kFakeDeviceId = 0; 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#else 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kFakeDeviceId = 1; 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 64ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.orgstatic const int kOpusBandwidthNb = 4000; 65ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.orgstatic const int kOpusBandwidthMb = 6000; 66ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.orgstatic const int kOpusBandwidthWb = 8000; 67ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.orgstatic const int kOpusBandwidthSwb = 12000; 68ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.orgstatic const int kOpusBandwidthFb = 20000; 69ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org 703ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org// Verify the header extension ID, if enabled, is within the bounds specified in 713ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org// [RFC5285]: 1-14 inclusive. 723ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org#define WEBRTC_CHECK_HEADER_EXTENSION_ID(enable, id) \ 733ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org do { \ 743ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org if (enable && (id < 1 || id > 14)) { \ 753ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org return -1; \ 763ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org } \ 773ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org } while (0); 783ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org 79440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#ifdef USE_WEBRTC_DEV_BRANCH 80440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.orgclass FakeAudioProcessing : public webrtc::AudioProcessing { 81440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org public: 82440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org FakeAudioProcessing() : experimental_ns_enabled_(false) {} 83440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org 84440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(Initialize, ()) 85440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(Initialize, ( 86440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org int input_sample_rate_hz, 87440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org int output_sample_rate_hz, 88440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org int reverse_sample_rate_hz, 89440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org webrtc::AudioProcessing::ChannelLayout input_layout, 90440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org webrtc::AudioProcessing::ChannelLayout output_layout, 91440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org webrtc::AudioProcessing::ChannelLayout reverse_layout)); 92440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org 93440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_VOID_FUNC(SetExtraOptions, (const webrtc::Config& config)) { 94440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org experimental_ns_enabled_ = config.Get<webrtc::ExperimentalNs>().enabled; 95440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org } 96440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org 97440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(set_sample_rate_hz, (int rate)); 98440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(input_sample_rate_hz, ()); 99440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(sample_rate_hz, ()); 100440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(proc_sample_rate_hz, ()); 101440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(proc_split_sample_rate_hz, ()); 102440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(num_input_channels, ()); 103440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(num_output_channels, ()); 104440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(num_reverse_channels, ()); 105440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_VOID_STUB(set_output_will_be_muted, (bool muted)); 106440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_BOOL_STUB_CONST(output_will_be_muted, ()); 107440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(ProcessStream, (webrtc::AudioFrame* frame)); 108440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(ProcessStream, ( 109440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org const float* const* src, 110440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org int samples_per_channel, 111440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org int input_sample_rate_hz, 112440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org webrtc::AudioProcessing::ChannelLayout input_layout, 113440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org int output_sample_rate_hz, 114440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org webrtc::AudioProcessing::ChannelLayout output_layout, 115440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org float* const* dest)); 116440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(AnalyzeReverseStream, (webrtc::AudioFrame* frame)); 117440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(AnalyzeReverseStream, ( 118440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org const float* const* data, 119440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org int samples_per_channel, 120440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org int sample_rate_hz, 121440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org webrtc::AudioProcessing::ChannelLayout layout)); 122440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(set_stream_delay_ms, (int delay)); 123440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(stream_delay_ms, ()); 124440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_BOOL_STUB_CONST(was_stream_delay_set, ()); 125440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_VOID_STUB(set_stream_key_pressed, (bool key_pressed)); 126440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_BOOL_STUB_CONST(stream_key_pressed, ()); 127440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_VOID_STUB(set_delay_offset_ms, (int offset)); 128440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB_CONST(delay_offset_ms, ()); 129440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(StartDebugRecording, (const char filename[kMaxFilenameSize])); 130440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(StartDebugRecording, (FILE* handle)); 131440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org WEBRTC_STUB(StopDebugRecording, ()); 132440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org virtual webrtc::EchoCancellation* echo_cancellation() const OVERRIDE { 133440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org return NULL; 134440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org } 135440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org virtual webrtc::EchoControlMobile* echo_control_mobile() const OVERRIDE { 136440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org return NULL; 137440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org } 138440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org virtual webrtc::GainControl* gain_control() const OVERRIDE { return NULL; } 139440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org virtual webrtc::HighPassFilter* high_pass_filter() const OVERRIDE { 140440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org return NULL; 141440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org } 142440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org virtual webrtc::LevelEstimator* level_estimator() const OVERRIDE { 143440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org return NULL; 144440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org } 145440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org virtual webrtc::NoiseSuppression* noise_suppression() const OVERRIDE { 146440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org return NULL; 147440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org } 148440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org virtual webrtc::VoiceDetection* voice_detection() const OVERRIDE { 149440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org return NULL; 150440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org } 151440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org 152440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org bool experimental_ns_enabled() { 153440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org return experimental_ns_enabled_; 154440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org } 155440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org 156440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org private: 157440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org bool experimental_ns_enabled_; 158440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org}; 159440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#endif 160440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass FakeWebRtcVoiceEngine 1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : public webrtc::VoEAudioProcessing, 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::VoEBase, public webrtc::VoECodec, public webrtc::VoEDtmf, 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::VoEFile, public webrtc::VoEHardware, 1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::VoEExternalMedia, public webrtc::VoENetEqStats, 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::VoENetwork, public webrtc::VoERTP_RTCP, 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::VoEVideoSync, public webrtc::VoEVolumeControl { 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org struct DtmfInfo { 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DtmfInfo() 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : dtmf_event_code(-1), 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org dtmf_out_of_band(false), 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org dtmf_length_ms(-1) {} 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int dtmf_event_code; 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool dtmf_out_of_band; 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int dtmf_length_ms; 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org struct Channel { 17929b36076e91f73262536dc3878f1d27987bdf9febuildbot@webrtc.org explicit Channel() 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : external_transport(false), 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send(false), 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org playout(false), 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org volume_scale(1.0), 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org volume_pan_left(1.0), 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org volume_pan_right(1.0), 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org file(false), 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org vad(false), 18807617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org codec_fec(false), 189ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org max_encoding_bandwidth(0), 19007617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org red(false), 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nack(false), 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_processor_registered(false), 1935c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org rx_agc_enabled(false), 1945c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org rx_agc_mode(webrtc::kAgcDefault), 1950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cn8_type(13), 1960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cn16_type(105), 1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org dtmf_type(106), 19807617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org red_type(117), 1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nack_max_packets(0), 200afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org vie_network(NULL), 201afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org video_channel(-1), 2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send_ssrc(0), 2033ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org send_audio_level_ext_(-1), 2042ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org receive_audio_level_ext_(-1), 2053ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org send_absolute_sender_time_ext_(-1), 20629b36076e91f73262536dc3878f1d27987bdf9febuildbot@webrtc.org receive_absolute_sender_time_ext_(-1) { 2070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org memset(&send_codec, 0, sizeof(send_codec)); 2085c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org memset(&rx_agc_config, 0, sizeof(rx_agc_config)); 2090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool external_transport; 2110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool send; 2120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool playout; 2130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org float volume_scale; 2140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org float volume_pan_left; 2150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org float volume_pan_right; 2160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool file; 2170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool vad; 21807617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org bool codec_fec; 219ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org int max_encoding_bandwidth; 22007617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org bool red; 2210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool nack; 2220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool media_processor_registered; 2235c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org bool rx_agc_enabled; 2245c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org webrtc::AgcModes rx_agc_mode; 2255c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org webrtc::AgcConfig rx_agc_config; 2260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int cn8_type; 2270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int cn16_type; 2280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int dtmf_type; 22907617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org int red_type; 2300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int nack_max_packets; 231afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org webrtc::ViENetwork* vie_network; 232afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org int video_channel; 2330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 send_ssrc; 2343ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org int send_audio_level_ext_; 2352ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org int receive_audio_level_ext_; 2363ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org int send_absolute_sender_time_ext_; 2373ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org int receive_absolute_sender_time_ext_; 2380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DtmfInfo dtmf_info; 2390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<webrtc::CodecInst> recv_codecs; 2400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst send_codec; 241afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org webrtc::PacketTime last_rtp_packet_time; 2420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::list<std::string> packets; 2430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 2440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeWebRtcVoiceEngine(const cricket::AudioCodec* const* codecs, 2460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int num_codecs) 2470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : inited_(false), 2480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org last_channel_(-1), 2490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fail_create_channel_(false), 2500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codecs_(codecs), 2510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org num_codecs_(num_codecs), 252a32dfc68b5624bdc8e3901c1a91adb869f919ef8wu@webrtc.org num_set_send_codecs_(0), 2530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ec_enabled_(false), 2540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ec_metrics_enabled_(false), 2550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cng_enabled_(false), 2560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ns_enabled_(false), 2570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org agc_enabled_(false), 2580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org highpass_filter_enabled_(false), 2590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stereo_swapping_enabled_(false), 2600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typing_detection_enabled_(false), 2610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ec_mode_(webrtc::kEcDefault), 2620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org aecm_mode_(webrtc::kAecmSpeakerphone), 2630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ns_mode_(webrtc::kNsDefault), 2640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org agc_mode_(webrtc::kAgcDefault), 2650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org observer_(NULL), 2660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org playout_fail_channel_(-1), 2670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send_fail_channel_(-1), 2680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fail_start_recording_microphone_(false), 2690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org recording_microphone_(false), 2705c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org recording_sample_rate_(-1), 2715c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org playout_sample_rate_(-1), 2720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_processor_(NULL) { 2730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org memset(&agc_config_, 0, sizeof(agc_config_)); 2740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~FakeWebRtcVoiceEngine() { 2760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Ought to have all been deleted by the WebRtcVoiceMediaChannel 2770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // destructors, but just in case ... 2780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (std::map<int, Channel*>::const_iterator i = channels_.begin(); 2790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org i != channels_.end(); ++i) { 2800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete i->second; 2810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsExternalMediaProcessorRegistered() const { 2850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return media_processor_ != NULL; 2860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsInited() const { return inited_; } 2880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetLastChannel() const { return last_channel_; } 289f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org int GetChannelFromLocalSsrc(uint32 local_ssrc) const { 290f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org for (std::map<int, Channel*>::const_iterator iter = channels_.begin(); 291f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org iter != channels_.end(); ++iter) { 292f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org if (local_ssrc == iter->second->send_ssrc) 293f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return iter->first; 294f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org } 295f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org return -1; 296f99f1011aa4cd22bd86ba2e4f7d239ea1b766ec8wu@webrtc.org } 297cfd624796c7321c5ffac2249b407cdd0d496e00awu@webrtc.org int GetNumChannels() const { return static_cast<int>(channels_.size()); } 2980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetPlayout(int channel) { 2990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_[channel]->playout; 3000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetSend(int channel) { 3020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_[channel]->send; 3030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetRecordingMicrophone() { 3050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return recording_microphone_; 3060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetVAD(int channel) { 3080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_[channel]->vad; 3090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 31007617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org bool GetRED(int channel) { 31107617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org return channels_[channel]->red; 31207617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org } 31307617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org bool GetCodecFEC(int channel) { 31407617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org return channels_[channel]->codec_fec; 3150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 316ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org int GetMaxEncodingBandwidth(int channel) { 317ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org return channels_[channel]->max_encoding_bandwidth; 318ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org } 3190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetNACK(int channel) { 3200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_[channel]->nack; 3210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetNACKMaxPackets(int channel) { 3230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_[channel]->nack_max_packets; 3240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 325afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org webrtc::ViENetwork* GetViENetwork(int channel) { 326afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 3275462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org // WARNING: This pointer is for verification purposes only. Calling 3285462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org // functions on it may result in undefined behavior! 329afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org return channels_[channel]->vie_network; 330afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org } 331afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org int GetVideoChannel(int channel) { 332afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 333afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org return channels_[channel]->video_channel; 334afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org } 335afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org const webrtc::PacketTime& GetLastRtpPacketTime(int channel) { 336afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 337afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org return channels_[channel]->last_rtp_packet_time; 338afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org } 3390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetSendCNPayloadType(int channel, bool wideband) { 3400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (wideband) ? 3410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->cn16_type : 3420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->cn8_type; 3430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetSendTelephoneEventPayloadType(int channel) { 3450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_[channel]->dtmf_type; 3460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 34707617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org int GetSendREDPayloadType(int channel) { 34807617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org return channels_[channel]->red_type; 3490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckPacket(int channel, const void* data, size_t len) { 3510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool result = !CheckNoPacket(channel); 3520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (result) { 3530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string packet = channels_[channel]->packets.front(); 3540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org result = (packet == std::string(static_cast<const char*>(data), len)); 3550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->packets.pop_front(); 3560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return result; 3580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckNoPacket(int channel) { 3600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_[channel]->packets.empty(); 3610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TriggerCallbackOnError(int channel_num, int err_code) { 3630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT(observer_ != NULL); 3640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org observer_->CallbackOnError(channel_num, err_code); 3650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_playout_fail_channel(int channel) { 3670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org playout_fail_channel_ = channel; 3680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_send_fail_channel(int channel) { 3700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send_fail_channel_ = channel; 3710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_fail_start_recording_microphone( 3730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool fail_start_recording_microphone) { 3740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fail_start_recording_microphone_ = fail_start_recording_microphone; 3750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_fail_create_channel(bool fail_create_channel) { 3770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fail_create_channel_ = fail_create_channel; 3780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TriggerProcessPacket(MediaProcessorDirection direction) { 3800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ProcessingTypes pt = 3810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (direction == cricket::MPD_TX) ? 3820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::kRecordingPerChannel : webrtc::kPlaybackAllChannelsMixed; 3830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (media_processor_ != NULL) { 3840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_processor_->Process(0, 3850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org pt, 3860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NULL, 3870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 0, 3880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 0, 3890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org true); 3900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 39229b36076e91f73262536dc3878f1d27987bdf9febuildbot@webrtc.org int AddChannel() { 3933db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org if (fail_create_channel_) { 3943db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org return -1; 3953db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org } 39629b36076e91f73262536dc3878f1d27987bdf9febuildbot@webrtc.org Channel* ch = new Channel(); 3973db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org for (int i = 0; i < NumOfCodecs(); ++i) { 3983db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org webrtc::CodecInst codec; 3993db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org GetCodec(i, codec); 4003db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org ch->recv_codecs.push_back(codec); 4013db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org } 4023db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org channels_[++last_channel_] = ch; 4033db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org return last_channel_; 4043db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org } 4052ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org int GetSendRtpExtensionId(int channel, const std::string& extension) { 4062ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4072ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org if (extension == kRtpAudioLevelHeaderExtension) { 4082ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return channels_[channel]->send_audio_level_ext_; 4092ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } else if (extension == kRtpAbsoluteSenderTimeHeaderExtension) { 4102ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return channels_[channel]->send_absolute_sender_time_ext_; 4112ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } 4122ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return -1; 4133ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org } 4142ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org int GetReceiveRtpExtensionId(int channel, const std::string& extension) { 4152ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4162ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org if (extension == kRtpAudioLevelHeaderExtension) { 4172ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return channels_[channel]->receive_audio_level_ext_; 4182ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } else if (extension == kRtpAbsoluteSenderTimeHeaderExtension) { 4192ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return channels_[channel]->receive_absolute_sender_time_ext_; 4202ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } 4212ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return -1; 4223ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org } 4230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 424a32dfc68b5624bdc8e3901c1a91adb869f919ef8wu@webrtc.org int GetNumSetSendCodecs() const { return num_set_send_codecs_; } 425a32dfc68b5624bdc8e3901c1a91adb869f919ef8wu@webrtc.org 4260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(Release, ()); 4270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoEBase 4290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(RegisterVoiceEngineObserver, ( 4300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VoiceEngineObserver& observer)) { 4310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org observer_ = &observer; 4320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 4330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeRegisterVoiceEngineObserver, ()); 4350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(Init, (webrtc::AudioDeviceModule* adm, 4360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::AudioProcessing* audioproc)) { 4370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org inited_ = true; 4380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 4390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(Terminate, ()) { 4410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org inited_ = false; 4420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 4430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual webrtc::AudioProcessing* audio_processing() OVERRIDE { 445440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#ifdef USE_WEBRTC_DEV_BRANCH 446440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org return &audio_processing_; 447440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#else 4480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return NULL; 449440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#endif 4500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(CreateChannel, ()) { 45229b36076e91f73262536dc3878f1d27987bdf9febuildbot@webrtc.org return AddChannel(); 4533db045861afcaf20aed671c0de15a6ff4ca32d08wu@webrtc.org } 45429b36076e91f73262536dc3878f1d27987bdf9febuildbot@webrtc.org WEBRTC_FUNC(CreateChannel, (const webrtc::Config& /*config*/)) { 45529b36076e91f73262536dc3878f1d27987bdf9febuildbot@webrtc.org return AddChannel(); 4560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(DeleteChannel, (int channel)) { 4580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 4590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete channels_[channel]; 4600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_.erase(channel); 4610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 4620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartReceive, (int channel)); 4640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartPlayout, (int channel)) { 4650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (playout_fail_channel_ != channel) { 4660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 4670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->playout = true; 4680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 4690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 4700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // When playout_fail_channel_ == channel, fail the StartPlayout on this 4710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // channel. 4720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 4730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartSend, (int channel)) { 4760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (send_fail_channel_ != channel) { 4770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 4780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send = true; 4790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 4800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 4810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // When send_fail_channel_ == channel, fail the StartSend on this 4820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // channel. 4830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 4840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StopReceive, (int channel)); 4870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StopPlayout, (int channel)) { 4880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 4890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->playout = false; 4900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 4910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StopSend, (int channel)) { 4930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 4940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send = false; 4950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 4960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetVersion, (char version[1024])); 4980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(LastError, ()); 4990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetOnHoldStatus, (int, bool, webrtc::OnHoldModes)); 5000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetOnHoldStatus, (int, bool&, webrtc::OnHoldModes&)); 5010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoECodec 5030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(NumOfCodecs, ()) { 5040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return num_codecs_; 5050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetCodec, (int index, webrtc::CodecInst& codec)) { 5070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (index < 0 || index >= NumOfCodecs()) { 5080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 5090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::AudioCodec& c(*codecs_[index]); 5110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codec.pltype = c.id; 5122a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::strcpyn(codec.plname, sizeof(codec.plname), c.name.c_str()); 5130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codec.plfreq = c.clockrate; 5140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codec.pacsize = 0; 5150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codec.channels = c.channels; 5160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codec.rate = c.bitrate; 5170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 5180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetSendCodec, (int channel, const webrtc::CodecInst& codec)) { 5200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 5217587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org // To match the behavior of the real implementation. 5227587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org if (_stricmp(codec.plname, "telephone-event") == 0 || 5237587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org _stricmp(codec.plname, "audio/telephone-event") == 0 || 5247587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org _stricmp(codec.plname, "CN") == 0 || 5257587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org _stricmp(codec.plname, "red") == 0 ) { 5267587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org return -1; 5277587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org } 5280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send_codec = codec; 529a32dfc68b5624bdc8e3901c1a91adb869f919ef8wu@webrtc.org ++num_set_send_codecs_; 5300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 5310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetSendCodec, (int channel, webrtc::CodecInst& codec)) { 5330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 5340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codec = channels_[channel]->send_codec; 5350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 5360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetSecondarySendCodec, (int channel, 5380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::CodecInst& codec, 5390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int red_payload_type)); 5400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RemoveSecondarySendCodec, (int channel)); 5410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSecondarySendCodec, (int channel, 5420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst& codec)); 543ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org WEBRTC_FUNC(GetRecCodec, (int channel, webrtc::CodecInst& codec)) { 544ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 545ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org const Channel* c = channels_[channel]; 546ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org for (std::list<std::string>::const_iterator it_packet = c->packets.begin(); 547ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org it_packet != c->packets.end(); ++it_packet) { 548ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org int pltype; 549ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org if (!GetRtpPayloadType(it_packet->data(), it_packet->length(), &pltype)) { 550ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org continue; 551ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org } 552ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org for (std::vector<webrtc::CodecInst>::const_iterator it_codec = 553ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org c->recv_codecs.begin(); it_codec != c->recv_codecs.end(); 554ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org ++it_codec) { 555ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org if (it_codec->pltype == pltype) { 556ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org codec = *it_codec; 557ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org return 0; 558ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org } 559ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org } 560ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org } 561ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org return -1; 562ec0b1b83d70e08f3bd47940d33ad69cb8bb0878fbuildbot@webrtc.org } 5630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetAMREncFormat, (int channel, webrtc::AmrMode mode)); 5640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetAMRDecFormat, (int channel, webrtc::AmrMode mode)); 5650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetAMRWbEncFormat, (int channel, webrtc::AmrMode mode)); 5660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetAMRWbDecFormat, (int channel, webrtc::AmrMode mode)); 5670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetISACInitTargetRate, (int channel, int rateBps, 5680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool useFixedFrameSize)); 5690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetISACMaxRate, (int channel, int rateBps)); 5700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetISACMaxPayloadSize, (int channel, int sizeBytes)); 5710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetRecPayloadType, (int channel, 5720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::CodecInst& codec)) { 5730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 5740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Channel* ch = channels_[channel]; 5750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (ch->playout) 5760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; // Channel is in use. 5770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Check if something else already has this slot. 5780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (codec.pltype != -1) { 5790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (std::vector<webrtc::CodecInst>::iterator it = 5800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ch->recv_codecs.begin(); it != ch->recv_codecs.end(); ++it) { 5810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (it->pltype == codec.pltype && 5820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org _stricmp(it->plname, codec.plname) != 0) { 5830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 5840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Otherwise try to find this codec and update its payload type. 5880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (std::vector<webrtc::CodecInst>::iterator it = ch->recv_codecs.begin(); 5890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it != ch->recv_codecs.end(); ++it) { 5900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (strcmp(it->plname, codec.plname) == 0 && 5910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it->plfreq == codec.plfreq) { 5920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it->pltype = codec.pltype; 5930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it->channels = codec.channels; 5940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 5950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; // not found 5980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetSendCNPayloadType, (int channel, int type, 6000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::PayloadFrequencies frequency)) { 6010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 6020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (frequency == webrtc::kFreq8000Hz) { 6030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->cn8_type = type; 6040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (frequency == webrtc::kFreq16000Hz) { 6050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->cn16_type = type; 6060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetRecPayloadType, (int channel, webrtc::CodecInst& codec)) { 6100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 6110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Channel* ch = channels_[channel]; 6120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (std::vector<webrtc::CodecInst>::iterator it = ch->recv_codecs.begin(); 6130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it != ch->recv_codecs.end(); ++it) { 6140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (strcmp(it->plname, codec.plname) == 0 && 6150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it->plfreq == codec.plfreq && 6160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it->channels == codec.channels && 6170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org it->pltype != -1) { 6180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codec.pltype = it->pltype; 6190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; // not found 6230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetVADStatus, (int channel, bool enable, webrtc::VadModes mode, 6250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool disableDTX)) { 6260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 6270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (channels_[channel]->send_codec.channels == 2) { 6280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Replicating VoE behavior; VAD cannot be enabled for stereo. 6290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 6300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->vad = enable; 6320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetVADStatus, (int channel, bool& enabled, 6350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VadModes& mode, bool& disabledDTX)); 636ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org 63707617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org#ifdef USE_WEBRTC_DEV_BRANCH 63807617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org WEBRTC_FUNC(SetFECStatus, (int channel, bool enable)) { 63907617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 640ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org if (_stricmp(channels_[channel]->send_codec.plname, "opus") != 0) { 641c547a07407ddf9d3bb52be8874eec40f47889413buildbot@webrtc.org // Return -1 if current send codec is not Opus. 642c547a07407ddf9d3bb52be8874eec40f47889413buildbot@webrtc.org // TODO(minyue): Excludes other codecs if they support inband FEC. 643c547a07407ddf9d3bb52be8874eec40f47889413buildbot@webrtc.org return -1; 644c547a07407ddf9d3bb52be8874eec40f47889413buildbot@webrtc.org } 64507617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org channels_[channel]->codec_fec = enable; 64607617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org return 0; 64707617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org } 64807617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org WEBRTC_FUNC(GetFECStatus, (int channel, bool& enable)) { 64907617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 65007617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org enable = channels_[channel]->codec_fec; 65107617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org return 0; 65207617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org } 653ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org 654ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org WEBRTC_FUNC(SetOpusMaxPlaybackRate, (int channel, int frequency_hz)) { 655ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 656ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org if (_stricmp(channels_[channel]->send_codec.plname, "opus") != 0) { 657ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org // Return -1 if current send codec is not Opus. 658ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org return -1; 659ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org } 660ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org if (frequency_hz <= 8000) 661ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org channels_[channel]->max_encoding_bandwidth = kOpusBandwidthNb; 662ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org else if (frequency_hz <= 12000) 663ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org channels_[channel]->max_encoding_bandwidth = kOpusBandwidthMb; 664ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org else if (frequency_hz <= 16000) 665ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org channels_[channel]->max_encoding_bandwidth = kOpusBandwidthWb; 666ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org else if (frequency_hz <= 24000) 667ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org channels_[channel]->max_encoding_bandwidth = kOpusBandwidthSwb; 668ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org else 669ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org channels_[channel]->max_encoding_bandwidth = kOpusBandwidthFb; 670ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org return 0; 671ded08bf766f814b46b099c7949f9c9e1726a6adebuildbot@webrtc.org } 67207617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org#endif // USE_WEBRTC_DEV_BRANCH 6730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoEDtmf 6750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SendTelephoneEvent, (int channel, int event_code, 6760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool out_of_band = true, int length_ms = 160, int attenuation_db = 10)) { 6770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->dtmf_info.dtmf_event_code = event_code; 6780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->dtmf_info.dtmf_out_of_band = out_of_band; 6790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->dtmf_info.dtmf_length_ms = length_ms; 6800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetSendTelephoneEventPayloadType, 6840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int channel, unsigned char type)) { 6850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->dtmf_type = type; 6860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 6880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSendTelephoneEventPayloadType, 6890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int channel, unsigned char& type)); 6900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetDtmfFeedbackStatus, (bool enable, bool directFeedback)); 6920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetDtmfFeedbackStatus, (bool& enabled, bool& directFeedback)); 69345017aec092dbdfd293de1268c258e61aa6d4be5henrik.lundin@webrtc.org WEBRTC_STUB(SetDtmfPlayoutStatus, (int channel, bool enable)); 69445017aec092dbdfd293de1268c258e61aa6d4be5henrik.lundin@webrtc.org WEBRTC_STUB(GetDtmfPlayoutStatus, (int channel, bool& enabled)); 6950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(PlayDtmfTone, 6970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int event_code, int length_ms = 200, int attenuation_db = 10)) { 6980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org dtmf_info_.dtmf_event_code = event_code; 6990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org dtmf_info_.dtmf_length_ms = length_ms; 7000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartPlayingDtmfTone, 7030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int eventCode, int attenuationDb = 10)); 7040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StopPlayingDtmfTone, ()); 7050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoEFile 7070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartPlayingFileLocally, (int channel, const char* fileNameUTF8, 7080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool loop, webrtc::FileFormats format, 7090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org float volumeScaling, int startPointMs, 7100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int stopPointMs)) { 7110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->file = true; 7130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartPlayingFileLocally, (int channel, webrtc::InStream* stream, 7160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::FileFormats format, 7170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org float volumeScaling, int startPointMs, 7180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int stopPointMs)) { 7190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->file = true; 7210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StopPlayingFileLocally, (int channel)) { 7240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->file = false; 7260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(IsPlayingFileLocally, (int channel)) { 7290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (channels_[channel]->file) ? 1 : 0; 7310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ScaleLocalFilePlayout, (int channel, float scale)); 7330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartPlayingFileAsMicrophone, (int channel, 7340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* fileNameUTF8, 7350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool loop, 7360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool mixWithMicrophone, 7370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::FileFormats format, 7380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org float volumeScaling)); 7390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartPlayingFileAsMicrophone, (int channel, 7400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::InStream* stream, 7410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool mixWithMicrophone, 7420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::FileFormats format, 7430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org float volumeScaling)); 7440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StopPlayingFileAsMicrophone, (int channel)); 7450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(IsPlayingFileAsMicrophone, (int channel)); 7460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ScaleFileAsMicrophonePlayout, (int channel, float scale)); 7470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartRecordingPlayout, (int channel, const char* fileNameUTF8, 7480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst* compression, 7490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int maxSizeBytes)); 7500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartRecordingPlayout, (int channel, webrtc::OutStream* stream, 7510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst* compression)); 7520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StopRecordingPlayout, (int channel)); 7530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartRecordingMicrophone, (const char* fileNameUTF8, 7540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst* compression, 7550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int maxSizeBytes)) { 7560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (fail_start_recording_microphone_) { 7570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 7580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org recording_microphone_ = true; 7600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartRecordingMicrophone, (webrtc::OutStream* stream, 7630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst* compression)) { 7640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (fail_start_recording_microphone_) { 7650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 7660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org recording_microphone_ = true; 7680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StopRecordingMicrophone, ()) { 7710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!recording_microphone_) { 7720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 7730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org recording_microphone_ = false; 7750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConvertPCMToWAV, (const char* fileNameInUTF8, 7780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* fileNameOutUTF8)); 7790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConvertPCMToWAV, (webrtc::InStream* streamIn, 7800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::OutStream* streamOut)); 7810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConvertWAVToPCM, (const char* fileNameInUTF8, 7820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* fileNameOutUTF8)); 7830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConvertWAVToPCM, (webrtc::InStream* streamIn, 7840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::OutStream* streamOut)); 7850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConvertPCMToCompressed, (const char* fileNameInUTF8, 7860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* fileNameOutUTF8, 7870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst* compression)); 7880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConvertPCMToCompressed, (webrtc::InStream* streamIn, 7890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::OutStream* streamOut, 7900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst* compression)); 7910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConvertCompressedToPCM, (const char* fileNameInUTF8, 7920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* fileNameOutUTF8)); 7930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConvertCompressedToPCM, (webrtc::InStream* streamIn, 7940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::OutStream* streamOut)); 7950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetFileDuration, (const char* fileNameUTF8, int& durationMs, 7960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::FileFormats format)); 7970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetPlaybackPosition, (int channel, int& positionMs)); 7980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoEHardware 8000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetCPULoad, (int&)); 8010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetNumOfRecordingDevices, (int& num)) { 8020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetNumDevices(num); 8030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetNumOfPlayoutDevices, (int& num)) { 8050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetNumDevices(num); 8060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetRecordingDeviceName, (int i, char* name, char* guid)) { 8080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetDeviceName(i, name, guid); 8090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetPlayoutDeviceName, (int i, char* name, char* guid)) { 8110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetDeviceName(i, name, guid); 8120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetRecordingDevice, (int, webrtc::StereoChannel)); 8140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetPlayoutDevice, (int)); 8150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetAudioDeviceLayer, (webrtc::AudioLayers)); 8160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetAudioDeviceLayer, (webrtc::AudioLayers&)); 8170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetPlayoutDeviceStatus, (bool&)); 8180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRecordingDeviceStatus, (bool&)); 8190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ResetAudioDevice, ()); 8200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(AudioDeviceControl, (unsigned int, unsigned int, unsigned int)); 8210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetLoudspeakerStatus, (bool enable)); 8220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetLoudspeakerStatus, (bool& enabled)); 8235c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_FUNC(SetRecordingSampleRate, (unsigned int samples_per_sec)) { 8245c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org recording_sample_rate_ = samples_per_sec; 8255c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org return 0; 8265c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 8275c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_FUNC_CONST(RecordingSampleRate, (unsigned int* samples_per_sec)) { 8285c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org *samples_per_sec = recording_sample_rate_; 8295c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org return 0; 8305c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 8315c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_FUNC(SetPlayoutSampleRate, (unsigned int samples_per_sec)) { 8325c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org playout_sample_rate_ = samples_per_sec; 8335c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org return 0; 8345c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 8355c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_FUNC_CONST(PlayoutSampleRate, (unsigned int* samples_per_sec)) { 8365c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org *samples_per_sec = playout_sample_rate_; 8375c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org return 0; 8385c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 8390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(EnableBuiltInAEC, (bool enable)); 8400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool BuiltInAECIsEnabled() const { return true; } 8410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoENetEqStats 8430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetNetworkStatistics, (int, webrtc::NetworkStatistics&)); 84440ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org WEBRTC_FUNC_CONST(GetDecodingCallStatistics, (int channel, 84540ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org webrtc::AudioDecodingCallStats*)) { 84640ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 84740ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org return 0; 84840ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org } 8490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoENetwork 8510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(RegisterExternalTransport, (int channel, 8520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::Transport& transport)) { 8530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 8540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->external_transport = true; 8550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 8560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(DeRegisterExternalTransport, (int channel)) { 8580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 8590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->external_transport = false; 8600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 8610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(ReceivedRTPPacket, (int channel, const void* data, 8630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int length)) { 8640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 8650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!channels_[channel]->external_transport) return -1; 8660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->packets.push_back( 8670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string(static_cast<const char*>(data), length)); 8680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 8690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 870afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_FUNC(ReceivedRTPPacket, (int channel, const void* data, 871afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org unsigned int length, 872afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org const webrtc::PacketTime& packet_time)) { 873afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 874afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org if (ReceivedRTPPacket(channel, data, length) == -1) { 875afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org return -1; 876afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org } 877afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org channels_[channel]->last_rtp_packet_time = packet_time; 878afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org return 0; 879afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org } 880afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org 8810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ReceivedRTCPPacket, (int channel, const void* data, 8820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int length)); 8830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoERTP_RTCP 8850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterRTPObserver, (int channel, 8860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VoERTPObserver& observer)); 8870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeRegisterRTPObserver, (int channel)); 8880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterRTCPObserver, (int channel, 8890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VoERTCPObserver& observer)); 8900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeRegisterRTCPObserver, (int channel)); 8910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetLocalSSRC, (int channel, unsigned int ssrc)) { 8920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 8930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send_ssrc = ssrc; 8940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 8950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetLocalSSRC, (int channel, unsigned int& ssrc)) { 8970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 8980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ssrc = channels_[channel]->send_ssrc; 8990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRemoteSSRC, (int channel, unsigned int& ssrc)); 9023ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org WEBRTC_FUNC(SetSendAudioLevelIndicationStatus, (int channel, bool enable, 9033ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org unsigned char id)) { 9043ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 9053ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org WEBRTC_CHECK_HEADER_EXTENSION_ID(enable, id); 9063ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org channels_[channel]->send_audio_level_ext_ = (enable) ? id : -1; 9073ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org return 0; 9083ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org } 9092ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org WEBRTC_FUNC(SetReceiveAudioLevelIndicationStatus, (int channel, bool enable, 9102ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org unsigned char id)) { 9112ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 9122ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org WEBRTC_CHECK_HEADER_EXTENSION_ID(enable, id); 9132ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org channels_[channel]->receive_audio_level_ext_ = (enable) ? id : -1; 9142ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return 0; 9152ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } 9163ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org WEBRTC_FUNC(SetSendAbsoluteSenderTimeStatus, (int channel, bool enable, 9173ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org unsigned char id)) { 9183ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 9193ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org WEBRTC_CHECK_HEADER_EXTENSION_ID(enable, id); 9203ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org channels_[channel]->send_absolute_sender_time_ext_ = (enable) ? id : -1; 9210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9233ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org WEBRTC_FUNC(SetReceiveAbsoluteSenderTimeStatus, (int channel, bool enable, 9243ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org unsigned char id)) { 9250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 9263ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org WEBRTC_CHECK_HEADER_EXTENSION_ID(enable, id); 9273ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org channels_[channel]->receive_absolute_sender_time_ext_ = (enable) ? id : -1; 9280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9303ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org 9310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRemoteCSRCs, (int channel, unsigned int arrCSRC[15])); 9320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetRTCPStatus, (int channel, bool enable)); 9330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRTCPStatus, (int channel, bool& enabled)); 9340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetRTCP_CNAME, (int channel, const char cname[256])); 9350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRTCP_CNAME, (int channel, char cname[256])); 9360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRemoteRTCP_CNAME, (int channel, char* cname)); 9370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRemoteRTCPData, (int channel, unsigned int& NTPHigh, 9380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int& NTPLow, 9390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int& timestamp, 9400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int& playoutTimestamp, 9410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int* jitter, 9420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned short* fractionLost)); 9430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRemoteRTCPSenderInfo, (int channel, 9440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::SenderInfo* sender_info)); 9450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetRemoteRTCPReportBlocks, 9460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int channel, std::vector<webrtc::ReportBlock>* receive_blocks)) { 9470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 9480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ReportBlock block; 9490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org block.source_SSRC = channels_[channel]->send_ssrc; 9500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::CodecInst send_codec = channels_[channel]->send_codec; 9510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (send_codec.pltype >= 0) { 9520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org block.fraction_lost = (unsigned char)(kFractionLostStatValue * 256); 9530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (send_codec.plfreq / 1000 > 0) { 9540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org block.interarrival_jitter = kIntStatValue * (send_codec.plfreq / 1000); 9550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org block.cumulative_num_packets_lost = kIntStatValue; 9570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org block.extended_highest_sequence_number = kIntStatValue; 9580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org receive_blocks->push_back(block); 9590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SendApplicationDefinedRTCPPacket, (int channel, 9630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned char subType, 9640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int name, 9650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* data, 9660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned short dataLength)); 9670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRTPStatistics, (int channel, unsigned int& averageJitterMs, 9680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int& maxJitterMs, 9690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int& discardedPackets)); 9700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetRTCPStatistics, (int channel, webrtc::CallStatistics& stats)) { 9710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 9720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.fractionLost = static_cast<int16>(kIntStatValue); 9730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.cumulativeLost = kIntStatValue; 9740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.extendedMax = kIntStatValue; 9750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.jitterSamples = kIntStatValue; 9760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.rttMs = kIntStatValue; 9770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.bytesSent = kIntStatValue; 9780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.packetsSent = kIntStatValue; 9790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.bytesReceived = kIntStatValue; 9800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stats.packetsReceived = kIntStatValue; 9810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 98307617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org#ifdef USE_WEBRTC_DEV_BRANCH 98407617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org WEBRTC_FUNC(SetREDStatus, (int channel, bool enable, int redPayloadtype)) { 98511b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org return SetFECStatus(channel, enable, redPayloadtype); 98611b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org } 98711b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org#endif 98811b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org // TODO(minyue): remove the below function when transition to SetREDStatus 98911b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org // is finished. 9900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetFECStatus, (int channel, bool enable, int redPayloadtype)) { 9910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 99207617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org channels_[channel]->red = enable; 99307617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org channels_[channel]->red_type = redPayloadtype; 9940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 99607617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org#ifdef USE_WEBRTC_DEV_BRANCH 99707617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org WEBRTC_FUNC(GetREDStatus, (int channel, bool& enable, int& redPayloadtype)) { 99811b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org return GetFECStatus(channel, enable, redPayloadtype); 99911b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org } 100011b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org#endif 100111b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org // TODO(minyue): remove the below function when transition to GetREDStatus 100211b3791161793cfee9c6ec541d30a2c5b6b2aef9buildbot@webrtc.org // is finished. 10030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetFECStatus, (int channel, bool& enable, int& redPayloadtype)) { 10040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 100507617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org enable = channels_[channel]->red; 100607617d70029b9232bf7a5d8af375a3ac18a03836buildbot@webrtc.org redPayloadtype = channels_[channel]->red_type; 10070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetNACKStatus, (int channel, bool enable, int maxNoPackets)) { 10100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->nack = enable; 10120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->nack_max_packets = maxNoPackets; 10130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartRTPDump, (int channel, const char* fileNameUTF8, 10160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::RTPDirections direction)); 10170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StopRTPDump, (int channel, webrtc::RTPDirections direction)); 10180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RTPDumpIsActive, (int channel, webrtc::RTPDirections direction)); 10190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(InsertExtraRTPPacket, (int channel, unsigned char payloadType, 10200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool markerBit, const char* payloadData, 10210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned short payloadSize)); 10220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetLastRemoteTimeStamp, (int channel, 10230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32_t* lastRemoteTimeStamp)); 1024afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_FUNC(SetVideoEngineBWETarget, (int channel, 1025afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org webrtc::ViENetwork* vie_network, 1026afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org int video_channel)) { 1027afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 1028afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org channels_[channel]->vie_network = vie_network; 1029afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org channels_[channel]->video_channel = video_channel; 10305462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org if (vie_network) { 10315462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org // The interface is released here to avoid leaks. A test should not 10325462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org // attempt to call functions on the interface stored in the channel. 10335462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org vie_network->Release(); 10345462dd96b8c4b0be60dd3110e70f4345c110044abuildbot@webrtc.org } 1035afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org return 0; 1036afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org } 10370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoEVideoSync 10390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetPlayoutBufferSize, (int& bufferMs)); 10400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetPlayoutTimestamp, (int channel, unsigned int& timestamp)); 1041fdedc6fe2f331fce751de4415b7643d6a5b1caf6wu@webrtc.org WEBRTC_STUB(GetRtpRtcp, (int, webrtc::RtpRtcp**, webrtc::RtpReceiver**)); 10420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetInitTimestamp, (int channel, unsigned int timestamp)); 10430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetInitSequenceNumber, (int channel, short sequenceNumber)); 10440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetMinimumPlayoutDelay, (int channel, int delayMs)); 10450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetInitialPlayoutDelay, (int channel, int delay_ms)); 10460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetDelayEstimate, (int channel, int* jitter_buffer_delay_ms, 10470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int* playout_buffer_delay_ms)); 10480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetLeastRequiredDelayMs, (int channel)); 10490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoEVolumeControl 10510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetSpeakerVolume, (unsigned int)); 10520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSpeakerVolume, (unsigned int&)); 10530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetSystemOutputMute, (bool)); 10540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSystemOutputMute, (bool&)); 10550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetMicVolume, (unsigned int)); 10560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetMicVolume, (unsigned int&)); 10570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetInputMute, (int, bool)); 10580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetInputMute, (int, bool&)); 10590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetSystemInputMute, (bool)); 10600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSystemInputMute, (bool&)); 10610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSpeechInputLevel, (unsigned int&)); 10620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSpeechOutputLevel, (int, unsigned int&)); 10630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSpeechInputLevelFullRange, (unsigned int&)); 10640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetSpeechOutputLevelFullRange, (int, unsigned int&)); 10650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetChannelOutputVolumeScaling, (int channel, float scale)) { 10660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->volume_scale= scale; 10680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetChannelOutputVolumeScaling, (int channel, float& scale)) { 10710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org scale = channels_[channel]->volume_scale; 10730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetOutputVolumePan, (int channel, float left, float right)) { 10760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->volume_pan_left = left; 10780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->volume_pan_right = right; 10790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetOutputVolumePan, (int channel, float& left, float& right)) { 10820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org left = channels_[channel]->volume_pan_left; 10840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org right = channels_[channel]->volume_pan_right; 10850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoEAudioProcessing 10890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetNsStatus, (bool enable, webrtc::NsModes mode)) { 10900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ns_enabled_ = enable; 10910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ns_mode_ = mode; 10920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetNsStatus, (bool& enabled, webrtc::NsModes& mode)) { 10950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enabled = ns_enabled_; 10960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mode = ns_mode_; 10970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetAgcStatus, (bool enable, webrtc::AgcModes mode)) { 11010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org agc_enabled_ = enable; 11020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org agc_mode_ = mode; 11030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetAgcStatus, (bool& enabled, webrtc::AgcModes& mode)) { 11060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enabled = agc_enabled_; 11070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mode = agc_mode_; 11080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetAgcConfig, (webrtc::AgcConfig config)) { 11120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org agc_config_ = config; 11130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetAgcConfig, (webrtc::AgcConfig& config)) { 11160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org config = agc_config_; 11170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetEcStatus, (bool enable, webrtc::EcModes mode)) { 11200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ec_enabled_ = enable; 11210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ec_mode_ = mode; 11220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetEcStatus, (bool& enabled, webrtc::EcModes& mode)) { 11250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enabled = ec_enabled_; 11260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mode = ec_mode_; 11270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(EnableDriftCompensation, (bool enable)) 11300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_BOOL_STUB(DriftCompensationEnabled, ()) 11310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_VOID_STUB(SetDelayOffsetMs, (int offset)) 11320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DelayOffsetMs, ()); 11330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetAecmMode, (webrtc::AecmModes mode, bool enableCNG)) { 11340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org aecm_mode_ = mode; 11350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cng_enabled_ = enableCNG; 11360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetAecmMode, (webrtc::AecmModes& mode, bool& enabledCNG)) { 11390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org mode = aecm_mode_; 11400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enabledCNG = cng_enabled_; 11410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetRxNsStatus, (int channel, bool enable, webrtc::NsModes mode)); 11440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetRxNsStatus, (int channel, bool& enabled, 11450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::NsModes& mode)); 11465c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_FUNC(SetRxAgcStatus, (int channel, bool enable, 11475c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org webrtc::AgcModes mode)) { 11485c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org channels_[channel]->rx_agc_enabled = enable; 11495c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org channels_[channel]->rx_agc_mode = mode; 11505c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org return 0; 11515c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 11525c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_FUNC(GetRxAgcStatus, (int channel, bool& enabled, 11535c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org webrtc::AgcModes& mode)) { 11545c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org enabled = channels_[channel]->rx_agc_enabled; 11555c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org mode = channels_[channel]->rx_agc_mode; 11565c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org return 0; 11575c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 11585c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 11595c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_FUNC(SetRxAgcConfig, (int channel, webrtc::AgcConfig config)) { 11605c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org channels_[channel]->rx_agc_config = config; 11615c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org return 0; 11625c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 11635c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_FUNC(GetRxAgcConfig, (int channel, webrtc::AgcConfig& config)) { 11645c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org config = channels_[channel]->rx_agc_config; 11655c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org return 0; 11665c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org } 11670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterRxVadObserver, (int, webrtc::VoERxVadCallback&)); 11690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeRegisterRxVadObserver, (int channel)); 11700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(VoiceActivityIndicator, (int channel)); 11710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetEcMetricsStatus, (bool enable)) { 11720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ec_metrics_enabled_ = enable; 11730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetEcMetricsStatus, (bool& enabled)) { 11760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enabled = ec_metrics_enabled_; 11770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetEchoMetrics, (int& ERL, int& ERLE, int& RERL, int& A_NLP)); 11800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetEcDelayMetrics, (int& delay_median, int& delay_std)); 11810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartDebugRecording, (const char* fileNameUTF8)); 1183cfd624796c7321c5ffac2249b407cdd0d496e00awu@webrtc.org WEBRTC_STUB(StartDebugRecording, (FILE* handle)); 11840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StopDebugRecording, ()); 11850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetTypingDetectionStatus, (bool enable)) { 11870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org typing_detection_enabled_ = enable; 11880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(GetTypingDetectionStatus, (bool& enabled)) { 11910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enabled = typing_detection_enabled_; 11920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(TimeSinceLastTyping, (int& seconds)); 11960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetTypingDetectionParameters, (int timeWindow, 11970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int costPerTyping, 11980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int reportingThreshold, 11990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int penaltyDecay, 12000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int typeEventDelay)); 12010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int EnableHighPassFilter(bool enable) { 12020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org highpass_filter_enabled_ = enable; 12030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsHighPassFilterEnabled() { 12060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return highpass_filter_enabled_; 12070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsStereoChannelSwappingEnabled() { 12090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return stereo_swapping_enabled_; 12100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void EnableStereoChannelSwapping(bool enable) { 12120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stereo_swapping_enabled_ = enable; 12130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool WasSendTelephoneEventCalled(int channel, int event_code, int length_ms) { 12150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (channels_[channel]->dtmf_info.dtmf_event_code == event_code && 12160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->dtmf_info.dtmf_out_of_band == true && 12170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->dtmf_info.dtmf_length_ms == length_ms); 12180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool WasPlayDtmfToneCalled(int event_code, int length_ms) { 12200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (dtmf_info_.dtmf_event_code == event_code && 12210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org dtmf_info_.dtmf_length_ms == length_ms); 12220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::VoEExternalMedia 12240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(RegisterExternalMediaProcessing, 12250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int channel, webrtc::ProcessingTypes type, 12260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VoEMediaProcess& processObject)) { 12270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 12280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (channels_[channel]->media_processor_registered) { 12290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 12300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->media_processor_registered = true; 12320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_processor_ = &processObject; 12330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(DeRegisterExternalMediaProcessing, 12360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int channel, webrtc::ProcessingTypes type)) { 12370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 12380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!channels_[channel]->media_processor_registered) { 12390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 12400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->media_processor_registered = false; 12420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org media_processor_ = NULL; 12430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetExternalRecordingStatus, (bool enable)); 12460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetExternalPlayoutStatus, (bool enable)); 12470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ExternalRecordingInsertData, 12480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (const int16_t speechData10ms[], int lengthSamples, 12490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int samplingFreqHz, int current_delay_ms)); 12500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ExternalPlayoutGetData, 12510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int16_t speechData10ms[], int samplingFreqHz, 12520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int current_delay_ms, int& lengthSamples)); 12530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetAudioFrame, (int channel, int desired_sample_rate_hz, 12540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::AudioFrame* frame)); 12550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetExternalMixing, (int channel, bool enable)); 12560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 12580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetNumDevices(int& num) { 12590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifdef WIN32 12600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org num = 1; 12610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#else 12620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // On non-Windows platforms VE adds a special entry for the default device, 12630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // so if there is one physical device then there are two entries in the 12640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // list. 12650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org num = 2; 12660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif 12670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetDeviceName(int i, char* name, char* guid) { 12710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char *s; 12720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifdef WIN32 12730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (0 == i) { 12740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org s = kFakeDeviceName; 12750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 12760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 12770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#else 12790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // See comment above. 12800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (0 == i) { 12810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org s = kFakeDefaultDeviceName; 12820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (1 == i) { 12830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org s = kFakeDeviceName; 12840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 12850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 12860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif 12880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org strcpy(name, s); 12890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org guid[0] = '\0'; 12900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool inited_; 12940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int last_channel_; 12950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, Channel*> channels_; 12960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool fail_create_channel_; 12970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::AudioCodec* const* codecs_; 12980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int num_codecs_; 1299a32dfc68b5624bdc8e3901c1a91adb869f919ef8wu@webrtc.org int num_set_send_codecs_; // how many times we call SetSendCodec(). 13000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool ec_enabled_; 13010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool ec_metrics_enabled_; 13020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool cng_enabled_; 13030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool ns_enabled_; 13040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool agc_enabled_; 13050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool highpass_filter_enabled_; 13060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool stereo_swapping_enabled_; 13070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool typing_detection_enabled_; 13080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::EcModes ec_mode_; 13090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::AecmModes aecm_mode_; 13100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::NsModes ns_mode_; 13110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::AgcModes agc_mode_; 13120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::AgcConfig agc_config_; 13130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VoiceEngineObserver* observer_; 13140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int playout_fail_channel_; 13150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int send_fail_channel_; 13160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool fail_start_recording_microphone_; 13170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool recording_microphone_; 13185c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org int recording_sample_rate_; 13195c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org int playout_sample_rate_; 13200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DtmfInfo dtmf_info_; 13210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VoEMediaProcess* media_processor_; 1322440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#ifdef USE_WEBRTC_DEV_BRANCH 1323440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org FakeAudioProcessing audio_processing_; 1324440a0915704985c3050819e14d77ee43590782d9buildbot@webrtc.org#endif 13250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 13260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13273ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org#undef WEBRTC_CHECK_HEADER_EXTENSION_ID 13283ca77cb43bc675f562521d4c90e8156a6e088cbchenrike@webrtc.org 13290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace cricket 13300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // TALK_SESSION_PHONE_FAKEWEBRTCVOICEENGINE_H_ 1332