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 <fabianbergmark@google.com>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30575}
This commit is contained in:
Fabian Bergmark
2020-02-20 14:22:48 +01:00
committed by Commit Bot
parent 74c5b0ac23
commit 9a4eb32477
2 changed files with 59 additions and 9 deletions

View File

@ -23,15 +23,20 @@ namespace {
class ADMWrapper : public AudioDeviceModule, public AudioTransport { class ADMWrapper : public AudioDeviceModule, public AudioTransport {
public: public:
ADMWrapper(rtc::scoped_refptr<AudioDeviceModule> impl, ADMWrapper(rtc::scoped_refptr<AudioDeviceModule> impl,
AudioDeviceDataObserver* observer) AudioDeviceDataObserver* legacy_observer,
: impl_(impl), observer_(observer) { std::unique_ptr<AudioDeviceDataObserver> observer)
: impl_(impl),
legacy_observer_(legacy_observer),
observer_(std::move(observer)) {
is_valid_ = impl_.get() != nullptr; is_valid_ = impl_.get() != nullptr;
} }
ADMWrapper(AudioLayer audio_layer, ADMWrapper(AudioLayer audio_layer,
TaskQueueFactory* task_queue_factory, TaskQueueFactory* task_queue_factory,
AudioDeviceDataObserver* observer) AudioDeviceDataObserver* legacy_observer,
std::unique_ptr<AudioDeviceDataObserver> observer)
: ADMWrapper(AudioDeviceModule::Create(audio_layer, task_queue_factory), : ADMWrapper(AudioDeviceModule::Create(audio_layer, task_queue_factory),
observer) {} legacy_observer,
std::move(observer)) {}
~ADMWrapper() override { ~ADMWrapper() override {
audio_transport_ = nullptr; audio_transport_ = nullptr;
observer_ = nullptr; observer_ = nullptr;
@ -285,7 +290,8 @@ class ADMWrapper : public AudioDeviceModule, public AudioTransport {
protected: protected:
rtc::scoped_refptr<AudioDeviceModule> impl_; rtc::scoped_refptr<AudioDeviceModule> impl_;
AudioDeviceDataObserver* observer_ = nullptr; AudioDeviceDataObserver* legacy_observer_ = nullptr;
std::unique_ptr<AudioDeviceDataObserver> observer_;
AudioTransport* audio_transport_ = nullptr; AudioTransport* audio_transport_ = nullptr;
bool is_valid_ = false; bool is_valid_ = false;
}; };
@ -294,9 +300,23 @@ class ADMWrapper : public AudioDeviceModule, public AudioTransport {
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver( rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
rtc::scoped_refptr<AudioDeviceModule> impl, rtc::scoped_refptr<AudioDeviceModule> impl,
AudioDeviceDataObserver* observer) { std::unique_ptr<AudioDeviceDataObserver> observer) {
rtc::scoped_refptr<ADMWrapper> audio_device( rtc::scoped_refptr<ADMWrapper> audio_device(
new rtc::RefCountedObject<ADMWrapper>(impl, observer)); new rtc::RefCountedObject<ADMWrapper>(impl, observer.get(),
std::move(observer)));
if (!audio_device->IsValid()) {
return nullptr;
}
return audio_device;
}
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
rtc::scoped_refptr<AudioDeviceModule> impl,
AudioDeviceDataObserver* legacy_observer) {
rtc::scoped_refptr<ADMWrapper> audio_device(
new rtc::RefCountedObject<ADMWrapper>(impl, legacy_observer, nullptr));
if (!audio_device->IsValid()) { if (!audio_device->IsValid()) {
return nullptr; return nullptr;
@ -308,10 +328,26 @@ rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver( rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
AudioDeviceModule::AudioLayer audio_layer, AudioDeviceModule::AudioLayer audio_layer,
TaskQueueFactory* task_queue_factory, TaskQueueFactory* task_queue_factory,
AudioDeviceDataObserver* observer) { std::unique_ptr<AudioDeviceDataObserver> observer) {
rtc::scoped_refptr<ADMWrapper> audio_device( rtc::scoped_refptr<ADMWrapper> audio_device(
new rtc::RefCountedObject<ADMWrapper>(audio_layer, task_queue_factory, new rtc::RefCountedObject<ADMWrapper>(audio_layer, task_queue_factory,
observer)); observer.get(),
std::move(observer)));
if (!audio_device->IsValid()) {
return nullptr;
}
return audio_device;
}
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
AudioDeviceModule::AudioLayer audio_layer,
TaskQueueFactory* task_queue_factory,
AudioDeviceDataObserver* legacy_observer) {
rtc::scoped_refptr<ADMWrapper> audio_device(
new rtc::RefCountedObject<ADMWrapper>(audio_layer, task_queue_factory,
legacy_observer, nullptr));
if (!audio_device->IsValid()) { if (!audio_device->IsValid()) {
return nullptr; return nullptr;

View File

@ -42,11 +42,25 @@ class AudioDeviceDataObserver {
// Creates an ADMWrapper around an ADM instance that registers // Creates an ADMWrapper around an ADM instance that registers
// the provided AudioDeviceDataObserver. // the provided AudioDeviceDataObserver.
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
rtc::scoped_refptr<AudioDeviceModule> impl,
std::unique_ptr<AudioDeviceDataObserver> observer);
// Creates an ADMWrapper around an ADM instance that registers
// the provided AudioDeviceDataObserver.
RTC_DEPRECATED
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver( rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
rtc::scoped_refptr<AudioDeviceModule> impl, rtc::scoped_refptr<AudioDeviceModule> impl,
AudioDeviceDataObserver* observer); AudioDeviceDataObserver* observer);
// Creates an ADM instance with AudioDeviceDataObserver registered. // Creates an ADM instance with AudioDeviceDataObserver registered.
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
const AudioDeviceModule::AudioLayer audio_layer,
TaskQueueFactory* task_queue_factory,
std::unique_ptr<AudioDeviceDataObserver> observer);
// Creates an ADM instance with AudioDeviceDataObserver registered.
RTC_DEPRECATED
rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver( rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceWithDataObserver(
const AudioDeviceModule::AudioLayer audio_layer, const AudioDeviceModule::AudioLayer audio_layer,
TaskQueueFactory* task_queue_factory, TaskQueueFactory* task_queue_factory,