| Index: remoting/protocol/webrtc_audio_module.h
|
| diff --git a/content/renderer/media/webrtc_audio_device_not_impl.h b/remoting/protocol/webrtc_audio_module.h
|
| similarity index 58%
|
| copy from content/renderer/media/webrtc_audio_device_not_impl.h
|
| copy to remoting/protocol/webrtc_audio_module.h
|
| index e9a98f0e71050265470f32009c8afa2ee33a1a50..52f00c31d400091123d7d2dd36482432a74be28b 100644
|
| --- a/content/renderer/media/webrtc_audio_device_not_impl.h
|
| +++ b/remoting/protocol/webrtc_audio_module.h
|
| @@ -1,46 +1,50 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_NOT_IMPL_H_
|
| -#define CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_NOT_IMPL_H_
|
| +#ifndef REMOTING_PROTOCOL_WEBRTC_AUDIO_MODULE_H_
|
| +#define REMOTING_PROTOCOL_WEBRTC_AUDIO_MODULE_H_
|
|
|
| -#include <stdint.h>
|
| -
|
| -#include "base/compiler_specific.h"
|
| -#include "base/macros.h"
|
| -#include "base/time/time.h"
|
| -#include "content/common/content_export.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/synchronization/lock.h"
|
| +#include "base/timer/timer.h"
|
| #include "third_party/webrtc/modules/audio_device/include/audio_device.h"
|
|
|
| -namespace content {
|
| +namespace base {
|
| +class SingleThreadTaskRunner;
|
| +} // namespace base
|
| +
|
| +namespace remoting {
|
| +namespace protocol {
|
| +
|
| +class AudioStub;
|
|
|
| -// WebRtcAudioDeviceNotImpl contains default implementations of all methods
|
| -// in the webrtc::AudioDeviceModule which are currently not supported in Chrome.
|
| -// The real implementation is in WebRtcAudioDeviceImpl and it derives from
|
| -// this class. The main purpose of breaking out non-implemented methods into
|
| -// a separate unit is to make WebRtcAudioDeviceImpl more readable and easier
|
| -// to maintain.
|
| -class CONTENT_EXPORT WebRtcAudioDeviceNotImpl
|
| - : NON_EXPORTED_BASE(public webrtc::AudioDeviceModule) {
|
| +// Audio module passed to WebRTC. It doesn't access actual audio devices, but it
|
| +// provides all functionality we need to ensure that audio streaming works
|
| +// properly in WebRTC. Particularly it's responsible for calling AudioTransport
|
| +// on regular intervals when playback is active. This ensures that all incoming
|
| +// audio data is processed and passed to webrtc::AudioTrackSinkInterface
|
| +// connected to the audio track.
|
| +class WebrtcAudioModule : public webrtc::AudioDeviceModule {
|
| public:
|
| - WebRtcAudioDeviceNotImpl();
|
| + WebrtcAudioModule();
|
| + ~WebrtcAudioModule() override;
|
|
|
| - // webrtc::Module implementation.
|
| - // TODO(henrika): it is possible to add functionality in these methods.
|
| - // Only adding very basic support for now without triggering any callback
|
| - // in the webrtc::AudioDeviceObserver interface.
|
| + void SetAudioTaskRunner(
|
| + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner);
|
| +
|
| + // webrtc::AudioDeviceModule implementation.
|
| int64_t TimeUntilNextProcess() override;
|
| void Process() override;
|
| -
|
| - // Methods in webrtc::AudioDeviceModule which are not yet implemented.
|
| - // The idea is that we can move methods from this class to the real
|
| - // implementation in WebRtcAudioDeviceImpl when needed.
|
| -
|
| + int32_t ActiveAudioLayer(AudioLayer* audio_layer) const override;
|
| + ErrorCode LastError() const override;
|
| int32_t RegisterEventObserver(
|
| webrtc::AudioDeviceObserver* event_callback) override;
|
| - int32_t ActiveAudioLayer(AudioLayer* audio_layer) const override;
|
| - webrtc::AudioDeviceModule::ErrorCode LastError() const override;
|
| + int32_t RegisterAudioCallback(
|
| + webrtc::AudioTransport* audio_callback) override;
|
| + int32_t Init() override;
|
| + int32_t Terminate() override;
|
| + bool Initialized() const override;
|
| int16_t PlayoutDevices() override;
|
| int16_t RecordingDevices() override;
|
| int32_t PlayoutDeviceName(uint16_t index,
|
| @@ -53,8 +57,20 @@ class CONTENT_EXPORT WebRtcAudioDeviceNotImpl
|
| int32_t SetPlayoutDevice(WindowsDeviceType device) override;
|
| int32_t SetRecordingDevice(uint16_t index) override;
|
| int32_t SetRecordingDevice(WindowsDeviceType device) override;
|
| + int32_t PlayoutIsAvailable(bool* available) override;
|
| int32_t InitPlayout() override;
|
| + bool PlayoutIsInitialized() const override;
|
| + int32_t RecordingIsAvailable(bool* available) override;
|
| int32_t InitRecording() override;
|
| + bool RecordingIsInitialized() const override;
|
| + int32_t StartPlayout() override;
|
| + int32_t StopPlayout() override;
|
| + bool Playing() const override;
|
| + int32_t StartRecording() override;
|
| + int32_t StopRecording() override;
|
| + bool Recording() const override;
|
| + int32_t SetAGC(bool enable) override;
|
| + bool AGC() const override;
|
| int32_t SetWaveOutVolume(uint16_t volume_left,
|
| uint16_t volume_right) override;
|
| int32_t WaveOutVolume(uint16_t* volume_left,
|
| @@ -70,6 +86,10 @@ class CONTENT_EXPORT WebRtcAudioDeviceNotImpl
|
| int32_t MinSpeakerVolume(uint32_t* min_volume) const override;
|
| int32_t SpeakerVolumeStepSize(uint16_t* step_size) const override;
|
| int32_t MicrophoneVolumeIsAvailable(bool* available) override;
|
| + int32_t SetMicrophoneVolume(uint32_t volume) override;
|
| + int32_t MicrophoneVolume(uint32_t* volume) const override;
|
| + int32_t MaxMicrophoneVolume(uint32_t* max_volume) const override;
|
| + int32_t MinMicrophoneVolume(uint32_t* min_volume) const override;
|
| int32_t MicrophoneVolumeStepSize(uint16_t* step_size) const override;
|
| int32_t SpeakerMuteIsAvailable(bool* available) override;
|
| int32_t SetSpeakerMute(bool enable) override;
|
| @@ -80,14 +100,18 @@ class CONTENT_EXPORT WebRtcAudioDeviceNotImpl
|
| int32_t MicrophoneBoostIsAvailable(bool* available) override;
|
| int32_t SetMicrophoneBoost(bool enable) override;
|
| int32_t MicrophoneBoost(bool* enabled) const override;
|
| + int32_t StereoPlayoutIsAvailable(bool* available) const override;
|
| int32_t SetStereoPlayout(bool enable) override;
|
| int32_t StereoPlayout(bool* enabled) const override;
|
| + int32_t StereoRecordingIsAvailable(bool* available) const override;
|
| int32_t SetStereoRecording(bool enable) override;
|
| int32_t StereoRecording(bool* enabled) const override;
|
| int32_t SetRecordingChannel(const ChannelType channel) override;
|
| int32_t RecordingChannel(ChannelType* channel) const override;
|
| int32_t SetPlayoutBuffer(const BufferType type, uint16_t size_ms) override;
|
| int32_t PlayoutBuffer(BufferType* type, uint16_t* size_ms) const override;
|
| + int32_t PlayoutDelay(uint16_t* delay_ms) const override;
|
| + int32_t RecordingDelay(uint16_t* delay_ms) const override;
|
| int32_t CPULoad(uint16_t* load) const override;
|
| int32_t StartRawOutputFileRecording(
|
| const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]) override;
|
| @@ -96,31 +120,47 @@ class CONTENT_EXPORT WebRtcAudioDeviceNotImpl
|
| const char pcm_file_name_utf8[webrtc::kAdmMaxFileNameSize]) override;
|
| int32_t StopRawInputFileRecording() override;
|
| int32_t SetRecordingSampleRate(const uint32_t samples_per_sec) override;
|
| + int32_t RecordingSampleRate(uint32_t* samples_per_sec) const override;
|
| int32_t SetPlayoutSampleRate(const uint32_t samples_per_sec) override;
|
| + int32_t PlayoutSampleRate(uint32_t* samples_per_sec) const override;
|
| int32_t ResetAudioDevice() override;
|
| int32_t SetLoudspeakerStatus(bool enable) override;
|
| int32_t GetLoudspeakerStatus(bool* enabled) const override;
|
| - int32_t SetAGC(bool enable) override;
|
| - bool AGC() const override;
|
| bool BuiltInAECIsAvailable() const override;
|
| bool BuiltInAGCIsAvailable() const override;
|
| bool BuiltInNSIsAvailable() const override;
|
| int32_t EnableBuiltInAEC(bool enable) override;
|
| int32_t EnableBuiltInAGC(bool enable) override;
|
| int32_t EnableBuiltInNS(bool enable) override;
|
| -#if defined(OS_IOS)
|
| +
|
| +// Only supported on iOS.
|
| +#if defined(WEBRTC_IOS)
|
| int GetPlayoutAudioParameters(AudioParameters* params) const override;
|
| int GetRecordAudioParameters(AudioParameters* params) const override;
|
| -#endif // OS_IOS
|
| -
|
| - protected:
|
| - ~WebRtcAudioDeviceNotImpl() override{};
|
| +#endif // WEBRTC_IOS
|
|
|
| private:
|
| - base::TimeTicks last_process_time_;
|
| - DISALLOW_COPY_AND_ASSIGN(WebRtcAudioDeviceNotImpl);
|
| + void StartPlayoutOnAudioThread();
|
| + void StopPlayoutOnAudioThread();
|
| +
|
| + void PollFromSource();
|
| +
|
| + scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner_;
|
| +
|
| + // |lock_| must be locked when accessing |initialized_|, |playing_| and
|
| + // |audio_transport_|.
|
| + mutable base::Lock lock_;
|
| +
|
| + bool initialized_ = false;
|
| + bool playing_ = false;
|
| + webrtc::AudioTransport* audio_transport_ = nullptr;
|
| +
|
| + // Timer running on the |audio_task_runner_| that polls audio from
|
| + // |audio_transport_|.
|
| + base::RepeatingTimer poll_timer_;
|
| };
|
|
|
| -} // namespace content
|
| +} // namespace protocol
|
| +} // namespace remoting
|
|
|
| -#endif // CONTENT_RENDERER_MEDIA_WEBRTC_AUDIO_DEVICE_NOT_IMPL_H_
|
| +#endif // REMOTING_PROTOCOL_WEBRTC_AUDIO_MODULE_H_
|
|
|