Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(973)

Unified Diff: remoting/protocol/webrtc_audio_module.h

Issue 2394433003: Add WebrtcAudioModule (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/BUILD.gn ('k') | remoting/protocol/webrtc_audio_module.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « remoting/protocol/BUILD.gn ('k') | remoting/protocol/webrtc_audio_module.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698