mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-27 20:25:44 +00:00
fcac71b722
--HG-- extra : rebase_source : 698c735d3fe7fc6b47b47416a205dc51e77c9358
74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "AudioNotificationReceiver.h"
|
|
#include "AudioStream.h" // for AudioStream
|
|
#include "mozilla/Logging.h" // for LazyLogModule
|
|
#include "mozilla/StaticMutex.h" // for StaticMutex
|
|
#include "mozilla/StaticPtr.h" // for StaticAutoPtr
|
|
#include "nsAppRunner.h" // for XRE_IsContentProcess
|
|
#include "nsTArray.h" // for nsTArray
|
|
|
|
static mozilla::LazyLogModule sLogger("AudioNotificationReceiver");
|
|
|
|
#undef ANR_LOG
|
|
#define ANR_LOG(...) MOZ_LOG(sLogger, mozilla::LogLevel::Debug, (__VA_ARGS__))
|
|
#undef ANR_LOGW
|
|
#define ANR_LOGW(...) MOZ_LOG(sLogger, mozilla::LogLevel::Warning, (__VA_ARGS__))
|
|
|
|
namespace mozilla {
|
|
namespace audio {
|
|
|
|
/*
|
|
* A list containing all clients subscribering the device-changed notifications.
|
|
*/
|
|
static StaticAutoPtr<nsTArray<AudioStream*>> sSubscribers;
|
|
static StaticMutex sMutex;
|
|
|
|
/*
|
|
* AudioNotificationReceiver Implementation
|
|
*/
|
|
/* static */ void
|
|
AudioNotificationReceiver::Register(AudioStream* aAudioStream)
|
|
{
|
|
MOZ_ASSERT(XRE_IsContentProcess());
|
|
|
|
StaticMutexAutoLock lock(sMutex);
|
|
if (!sSubscribers) {
|
|
sSubscribers = new nsTArray<AudioStream*>();
|
|
}
|
|
sSubscribers->AppendElement(aAudioStream);
|
|
|
|
ANR_LOG("The AudioStream: %p is registered successfully.", aAudioStream);
|
|
}
|
|
|
|
/* static */ void
|
|
AudioNotificationReceiver::Unregister(AudioStream* aAudioStream)
|
|
{
|
|
MOZ_ASSERT(XRE_IsContentProcess());
|
|
|
|
StaticMutexAutoLock lock(sMutex);
|
|
MOZ_ASSERT(!sSubscribers->IsEmpty(), "No subscriber.");
|
|
|
|
sSubscribers->RemoveElement(aAudioStream);
|
|
|
|
ANR_LOG("The AudioStream: %p is unregistered successfully.", aAudioStream);
|
|
}
|
|
|
|
/* static */ void
|
|
AudioNotificationReceiver::NotifyDefaultDeviceChanged()
|
|
{
|
|
MOZ_ASSERT(XRE_IsContentProcess());
|
|
|
|
StaticMutexAutoLock lock(sMutex);
|
|
for (AudioStream* stream : *sSubscribers) {
|
|
ANR_LOG("Notify the AudioStream: %p that the default device has been changed.", stream);
|
|
stream->ResetDefaultDevice();
|
|
}
|
|
}
|
|
|
|
} // namespace audio
|
|
} // namespace mozilla
|