128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org/* 228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * libjingle 35f93d0a140515e3b8cdd1b9a4c6f5871144e5deejlmiller@webrtc.org * Copyright 2012 Google Inc. 428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer. 1028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 1128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 1228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * and/or other materials provided with the distribution. 1328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 1428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * derived from this software without specific prior written permission. 1528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * 1628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 1728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 1928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 2228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 2428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 2528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org */ 2728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 2828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// This class implements an AudioCaptureModule that can be used to detect if 2928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// audio is being received properly if it is fed by another AudioCaptureModule 3028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// in some arbitrary audio pipeline where they are connected. It does not play 3128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// out or record any audio so it does not need access to any hardware and can 3228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// therefore be used in the gtest testing framework. 3328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// Note P postfix of a function indicates that it should only be called by the 3528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org// processing thread. 3628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 3728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#ifndef TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_ 3828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#define TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_ 3928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 40d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/basictypes.h" 41d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/criticalsection.h" 42d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/messagehandler.h" 43ee8c6d327357ecd2e17edede8d15f6e3893409a8deadbeef#include "webrtc/base/scoped_ptr.h" 44d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org#include "webrtc/base/scoped_ref_ptr.h" 4528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "webrtc/common_types.h" 4628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#include "webrtc/modules/audio_device/include/audio_device.h" 4728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 48d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.orgnamespace rtc { 4928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass Thread; 50d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org} // namespace rtc 5128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 5228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.orgclass FakeAudioCaptureModule 5328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org : public webrtc::AudioDeviceModule, 54d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org public rtc::MessageHandler { 5528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org public: 560c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström typedef uint16_t Sample; 5728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 5828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The value for the following constants have been derived by running VoE 5928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // using a real ADM. The constants correspond to 10ms of mono audio at 44kHz. 60dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting static const size_t kNumberSamples = 440; 61dce40cf804019a9898b6ab8d8262466b697c56e0Peter Kasting static const size_t kNumberBytesPerSample = sizeof(Sample); 6228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 6328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Creates a FakeAudioCaptureModule or returns NULL on failure. 64ee8c6d327357ecd2e17edede8d15f6e3893409a8deadbeef static rtc::scoped_refptr<FakeAudioCaptureModule> Create(); 6528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 6628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Returns the number of frames that have been successfully pulled by the 6728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // instance. Note that correctly detecting success can only be done if the 6828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // pulled frame was generated/pushed from a FakeAudioCaptureModule. 6928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int frames_received() const; 7028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 7128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Following functions are inherited from webrtc::AudioDeviceModule. 7228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Only functions called by PeerConnection are implemented, the rest do 7328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // nothing and return success. If a function is not expected to be called by 7428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // PeerConnection an assertion is triggered if it is in fact called. 7514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int64_t TimeUntilNextProcess() override; 7614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t Process() override; 7728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 7814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t ActiveAudioLayer(AudioLayer* audio_layer) const override; 7928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 8014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org ErrorCode LastError() const override; 8114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RegisterEventObserver( 8214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org webrtc::AudioDeviceObserver* event_callback) override; 8328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 848804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // Note: Calling this method from a callback may result in deadlock. 8514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RegisterAudioCallback( 8614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org webrtc::AudioTransport* audio_callback) override; 8714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 8814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t Init() override; 8914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t Terminate() override; 9014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool Initialized() const override; 9114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 9214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int16_t PlayoutDevices() override; 9314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int16_t RecordingDevices() override; 9414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t PlayoutDeviceName(uint16_t index, 9514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org char name[webrtc::kAdmMaxDeviceNameSize], 9614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org char guid[webrtc::kAdmMaxGuidSize]) override; 9714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RecordingDeviceName(uint16_t index, 9814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org char name[webrtc::kAdmMaxDeviceNameSize], 9914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org char guid[webrtc::kAdmMaxGuidSize]) override; 10014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 10114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetPlayoutDevice(uint16_t index) override; 10214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetPlayoutDevice(WindowsDeviceType device) override; 10314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetRecordingDevice(uint16_t index) override; 10414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetRecordingDevice(WindowsDeviceType device) override; 10514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 10614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t PlayoutIsAvailable(bool* available) override; 10714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t InitPlayout() override; 10814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool PlayoutIsInitialized() const override; 10914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RecordingIsAvailable(bool* available) override; 11014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t InitRecording() override; 11114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool RecordingIsInitialized() const override; 11214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 11314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StartPlayout() override; 11414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StopPlayout() override; 11514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool Playing() const override; 11614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StartRecording() override; 11714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StopRecording() override; 11814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool Recording() const override; 11914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 12014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetAGC(bool enable) override; 12114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool AGC() const override; 12214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 12314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetWaveOutVolume(uint16_t volume_left, 12414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t volume_right) override; 12514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t WaveOutVolume(uint16_t* volume_left, 12614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t* volume_right) const override; 12714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 12814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t InitSpeaker() override; 12914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool SpeakerIsInitialized() const override; 13014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t InitMicrophone() override; 13114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org bool MicrophoneIsInitialized() const override; 13214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 13314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SpeakerVolumeIsAvailable(bool* available) override; 13414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetSpeakerVolume(uint32_t volume) override; 13514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SpeakerVolume(uint32_t* volume) const override; 13614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MaxSpeakerVolume(uint32_t* max_volume) const override; 13714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MinSpeakerVolume(uint32_t* min_volume) const override; 13814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SpeakerVolumeStepSize(uint16_t* step_size) const override; 13914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 14014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MicrophoneVolumeIsAvailable(bool* available) override; 14114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetMicrophoneVolume(uint32_t volume) override; 14214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MicrophoneVolume(uint32_t* volume) const override; 14314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MaxMicrophoneVolume(uint32_t* max_volume) const override; 14414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 14514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MinMicrophoneVolume(uint32_t* min_volume) const override; 14614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MicrophoneVolumeStepSize(uint16_t* step_size) const override; 14714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 14814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SpeakerMuteIsAvailable(bool* available) override; 14914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetSpeakerMute(bool enable) override; 15014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SpeakerMute(bool* enabled) const override; 15114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 15214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MicrophoneMuteIsAvailable(bool* available) override; 15314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetMicrophoneMute(bool enable) override; 15414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MicrophoneMute(bool* enabled) const override; 15514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 15614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MicrophoneBoostIsAvailable(bool* available) override; 15714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetMicrophoneBoost(bool enable) override; 15814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t MicrophoneBoost(bool* enabled) const override; 15914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 16014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StereoPlayoutIsAvailable(bool* available) const override; 16114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetStereoPlayout(bool enable) override; 16214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StereoPlayout(bool* enabled) const override; 16314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StereoRecordingIsAvailable(bool* available) const override; 16414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetStereoRecording(bool enable) override; 16514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StereoRecording(bool* enabled) const override; 16614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetRecordingChannel(const ChannelType channel) override; 16714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RecordingChannel(ChannelType* channel) const override; 16814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 16914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetPlayoutBuffer(const BufferType type, 17014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org uint16_t size_ms = 0) override; 17114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t PlayoutBuffer(BufferType* type, uint16_t* size_ms) const override; 17214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t PlayoutDelay(uint16_t* delay_ms) const override; 17314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RecordingDelay(uint16_t* delay_ms) const override; 17414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 17514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t CPULoad(uint16_t* load) const override; 17614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 17714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StartRawOutputFileRecording( 17814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]) override; 17914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StopRawOutputFileRecording() override; 18014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StartRawInputFileRecording( 18114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]) override; 18214665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t StopRawInputFileRecording() override; 18314665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 18414665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetRecordingSampleRate(const uint32_t samples_per_sec) override; 18514665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t RecordingSampleRate(uint32_t* samples_per_sec) const override; 18614665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetPlayoutSampleRate(const uint32_t samples_per_sec) override; 18714665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t PlayoutSampleRate(uint32_t* samples_per_sec) const override; 18814665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org 18914665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t ResetAudioDevice() override; 19014665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t SetLoudspeakerStatus(bool enable) override; 19114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org int32_t GetLoudspeakerStatus(bool* enabled) const override; 192a954c07ee1c93175e6ebbeb20517b347474362aehenrika@webrtc.org virtual bool BuiltInAECIsAvailable() const { return false; } 193a954c07ee1c93175e6ebbeb20517b347474362aehenrika@webrtc.org virtual int32_t EnableBuiltInAEC(bool enable) { return -1; } 194c14f5ff60fb0c42c97702de112a9e8f1eccba574henrika virtual bool BuiltInAGCIsAvailable() const { return false; } 195c14f5ff60fb0c42c97702de112a9e8f1eccba574henrika virtual int32_t EnableBuiltInAGC(bool enable) { return -1; } 196c14f5ff60fb0c42c97702de112a9e8f1eccba574henrika virtual bool BuiltInNSIsAvailable() const { return false; } 197c14f5ff60fb0c42c97702de112a9e8f1eccba574henrika virtual int32_t EnableBuiltInNS(bool enable) { return -1; } 19828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // End of functions inherited from webrtc::AudioDeviceModule. 19928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 200d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org // The following function is inherited from rtc::MessageHandler. 20114665ff7d4024d07e58622f498b23fd980001871kjellander@webrtc.org void OnMessage(rtc::Message* msg) override; 20228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 20328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org protected: 20428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The constructor is protected because the class needs to be created as a 20528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // reference counted object (for memory managment reasons). It could be 20628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // exposed in which case the burden of proper instantiation would be put on 20728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // the creator of a FakeAudioCaptureModule instance. To create an instance of 20828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // this class use the Create(..) API. 209ee8c6d327357ecd2e17edede8d15f6e3893409a8deadbeef explicit FakeAudioCaptureModule(); 21028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The destructor is protected because it is reference counted and should not 21128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // be deleted directly. 21228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org virtual ~FakeAudioCaptureModule(); 21328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 21428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org private: 21528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Initializes the state of the FakeAudioCaptureModule. This API is called on 21628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // creation by the Create() API. 21728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool Initialize(); 21828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // SetBuffer() sets all samples in send_buffer_ to |value|. 21928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void SetSendBuffer(int value); 22028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Resets rec_buffer_. I.e., sets all rec_buffer_ samples to 0. 22128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void ResetRecBuffer(); 22228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Returns true if rec_buffer_ contains one or more sample greater than or 22328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // equal to |value|. 22428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool CheckRecBuffer(int value); 22528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 2268804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // Returns true/false depending on if recording or playback has been 2278804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // enabled/started. 2288804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org bool ShouldStartProcessing(); 22928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 2308804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // Starts or stops the pushing and pulling of audio frames. 2318804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org void UpdateProcessing(bool start); 2328804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org 2338804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // Starts the periodic calling of ProcessFrame() in a thread safe way. 2348804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org void StartProcessP(); 23528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Periodcally called function that ensures that frames are pulled and pushed 23628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // periodically if enabled/started. 23728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void ProcessFrameP(); 23828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Pulls frames from the registered webrtc::AudioTransport. 23928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void ReceiveFrameP(); 24028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Pushes frames to the registered webrtc::AudioTransport. 24128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org void SendFrameP(); 24228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 24328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // The time in milliseconds when Process() was last called or 0 if no call 24428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // has been made. 2450c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t last_process_time_ms_; 24628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 24728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Callback for playout and recording. 24828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org webrtc::AudioTransport* audio_callback_; 24928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 25028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool recording_; // True when audio is being pushed from the instance. 25128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool playing_; // True when audio is being pulled by the instance. 25228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 25328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool play_is_initialized_; // True when the instance is ready to pull audio. 25428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool rec_is_initialized_; // True when the instance is ready to push audio. 25528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 25628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Input to and output from RecordedDataIsAvailable(..) makes it possible to 25728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // modify the current mic level. The implementation does not care about the 25828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // mic level so it just feeds back what it receives. 25928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org uint32_t current_mic_level_; 26028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 26128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // next_frame_time_ is updated in a non-drifting manner to indicate the next 26228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // wall clock time the next frame should be generated and received. started_ 26328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // ensures that next_frame_time_ can be initialized properly on first call. 26428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org bool started_; 2650c4e06b4c6107a1b94f764e279e4fb4161e905b0Peter Boström uint32_t next_frame_time_; 26628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 267ee8c6d327357ecd2e17edede8d15f6e3893409a8deadbeef rtc::scoped_ptr<rtc::Thread> process_thread_; 26828e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 26928e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Buffer for storing samples received from the webrtc::AudioTransport. 27028e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org char rec_buffer_[kNumberSamples * kNumberBytesPerSample]; 27128e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Buffer for samples to send to the webrtc::AudioTransport. 27228e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org char send_buffer_[kNumberSamples * kNumberBytesPerSample]; 27328e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 27428e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // Counter of frames received that have samples of high enough amplitude to 27528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // indicate that the frames are not faked somewhere in the audio pipeline 27628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org // (e.g. by a jitter buffer). 27728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org int frames_received_; 2788804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org 2798804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // Protects variables that are accessed from process_thread_ and 2808804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // the main thread. 281d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org mutable rtc::CriticalSection crit_; 2828804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // Protects |audio_callback_| that is accessed from process_thread_ and 2838804a29951bfeaf97a0964aa90ec69ac17820752wu@webrtc.org // the main thread. 284d4e598d57aed714a599444a7eab5e8fdde52a950buildbot@webrtc.org rtc::CriticalSection crit_callback_; 28528e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org}; 28628e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org 28728e20752806a492f5a6a5d343c02f9556f39b1cdhenrike@webrtc.org#endif // TALK_APP_WEBRTC_TEST_FAKEAUDIOCAPTUREMODULE_H_ 288