From 9a4eb32477cd9b86b6aa31ddd86d6e34526e2cee Mon Sep 17 00:00:00 2001 From: Fabian Bergmark Date: Thu, 20 Feb 2020 14:22:48 +0100 Subject: [PATCH] Change the AudioDeiviceDataObserver to be passed as a unique_ptr. Bug: webrtc:11356 Change-Id: If89305f257fd966d83f37dbd03922c4d030b6d8f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/168771 Commit-Queue: Fabian Bergmark Reviewed-by: Karl Wiberg Cr-Commit-Position: refs/heads/master@{#30575} --- .../audio_device_data_observer.cc | 54 +++++++++++++++---- .../include/audio_device_data_observer.h | 14 +++++ 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/modules/audio_device/audio_device_data_observer.cc b/modules/audio_device/audio_device_data_observer.cc index 923d594196..89265a288f 100644 --- a/modules/audio_device/audio_device_data_observer.cc +++ b/modules/audio_device/audio_device_data_observer.cc @@ -23,15 +23,20 @@ namespace { class ADMWrapper : public AudioDeviceModule, public AudioTransport { public: ADMWrapper(rtc::scoped_refptr impl, - AudioDeviceDataObserver* observer) - : impl_(impl), observer_(observer) { + AudioDeviceDataObserver* legacy_observer, + std::unique_ptr observer) + : impl_(impl), + legacy_observer_(legacy_observer), + observer_(std::move(observer)) { is_valid_ = impl_.get() != nullptr; } ADMWrapper(AudioLayer audio_layer, TaskQueueFactory* task_queue_factory, - AudioDeviceDataObserver* observer) + AudioDeviceDataObserver* legacy_observer, + std::unique_ptr observer) : ADMWrapper(AudioDeviceModule::Create(audio_layer, task_queue_factory), - observer) {} + legacy_observer, + std::move(observer)) {} ~ADMWrapper() override { audio_transport_ = nullptr; observer_ = nullptr; @@ -285,7 +290,8 @@ class ADMWrapper : public AudioDeviceModule, public AudioTransport { protected: rtc::scoped_refptr impl_; - AudioDeviceDataObserver* observer_ = nullptr; + AudioDeviceDataObserver* legacy_observer_ = nullptr; + std::unique_ptr observer_; AudioTransport* audio_transport_ = nullptr; bool is_valid_ = false; }; @@ -294,9 +300,23 @@ class ADMWrapper : public AudioDeviceModule, public AudioTransport { rtc::scoped_refptr CreateAudioDeviceWithDataObserver( rtc::scoped_refptr impl, - AudioDeviceDataObserver* observer) { + std::unique_ptr observer) { rtc::scoped_refptr audio_device( - new rtc::RefCountedObject(impl, observer)); + new rtc::RefCountedObject(impl, observer.get(), + std::move(observer))); + + if (!audio_device->IsValid()) { + return nullptr; + } + + return audio_device; +} + +rtc::scoped_refptr CreateAudioDeviceWithDataObserver( + rtc::scoped_refptr impl, + AudioDeviceDataObserver* legacy_observer) { + rtc::scoped_refptr audio_device( + new rtc::RefCountedObject(impl, legacy_observer, nullptr)); if (!audio_device->IsValid()) { return nullptr; @@ -308,10 +328,26 @@ rtc::scoped_refptr CreateAudioDeviceWithDataObserver( rtc::scoped_refptr CreateAudioDeviceWithDataObserver( AudioDeviceModule::AudioLayer audio_layer, TaskQueueFactory* task_queue_factory, - AudioDeviceDataObserver* observer) { + std::unique_ptr observer) { rtc::scoped_refptr audio_device( new rtc::RefCountedObject(audio_layer, task_queue_factory, - observer)); + observer.get(), + std::move(observer))); + + if (!audio_device->IsValid()) { + return nullptr; + } + + return audio_device; +} + +rtc::scoped_refptr CreateAudioDeviceWithDataObserver( + AudioDeviceModule::AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory, + AudioDeviceDataObserver* legacy_observer) { + rtc::scoped_refptr audio_device( + new rtc::RefCountedObject(audio_layer, task_queue_factory, + legacy_observer, nullptr)); if (!audio_device->IsValid()) { return nullptr; diff --git a/modules/audio_device/include/audio_device_data_observer.h b/modules/audio_device/include/audio_device_data_observer.h index ac87d93b10..e1c2035d67 100644 --- a/modules/audio_device/include/audio_device_data_observer.h +++ b/modules/audio_device/include/audio_device_data_observer.h @@ -42,11 +42,25 @@ class AudioDeviceDataObserver { // Creates an ADMWrapper around an ADM instance that registers // the provided AudioDeviceDataObserver. +rtc::scoped_refptr CreateAudioDeviceWithDataObserver( + rtc::scoped_refptr impl, + std::unique_ptr observer); + +// Creates an ADMWrapper around an ADM instance that registers +// the provided AudioDeviceDataObserver. +RTC_DEPRECATED rtc::scoped_refptr CreateAudioDeviceWithDataObserver( rtc::scoped_refptr impl, AudioDeviceDataObserver* observer); // Creates an ADM instance with AudioDeviceDataObserver registered. +rtc::scoped_refptr CreateAudioDeviceWithDataObserver( + const AudioDeviceModule::AudioLayer audio_layer, + TaskQueueFactory* task_queue_factory, + std::unique_ptr observer); + +// Creates an ADM instance with AudioDeviceDataObserver registered. +RTC_DEPRECATED rtc::scoped_refptr CreateAudioDeviceWithDataObserver( const AudioDeviceModule::AudioLayer audio_layer, TaskQueueFactory* task_queue_factory,