AudioPolicy: Use audio mutexes
Test: atest CtsMediaAudioTestCases (including AudioPlaybackCaptureTest)
Test: Spatializer playback.
Test: Duplicating playback BT/Speaker.
Bug: 315063959
Change-Id: I2202d43d73f969abd506497d3123ba070d76ed34
diff --git a/services/audiopolicy/service/AudioPolicyEffects.cpp b/services/audiopolicy/service/AudioPolicyEffects.cpp
index 85b7ad9..42f7899 100644
--- a/services/audiopolicy/service/AudioPolicyEffects.cpp
+++ b/services/audiopolicy/service/AudioPolicyEffects.cpp
@@ -101,7 +101,7 @@
audio_source_t aliasSource = (inputSource == AUDIO_SOURCE_HOTWORD) ?
AUDIO_SOURCE_VOICE_RECOGNITION : inputSource;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
ssize_t index = mInputSources.indexOfKey(aliasSource);
if (index < 0) {
ALOGV("addInputEffects(): no processing needs to be attached to this source");
@@ -156,7 +156,7 @@
{
status_t status = NO_ERROR;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
ssize_t index = mInputSessions.indexOfKey(audioSession);
if (index < 0) {
return status;
@@ -179,7 +179,7 @@
{
status_t status = NO_ERROR;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
size_t index;
for (index = 0; index < mInputSessions.size(); index++) {
if (mInputSessions.valueAt(index)->mSessionId == audioSession) {
@@ -212,7 +212,7 @@
{
status_t status = NO_ERROR;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
size_t index;
for (index = 0; index < mOutputSessions.size(); index++) {
if (mOutputSessions.valueAt(index)->mSessionId == audioSession) {
@@ -245,7 +245,7 @@
{
status_t status = NO_ERROR;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
// create audio processors according to stream
// FIXME: should we have specific post processing settings for internal streams?
// default to media for now.
@@ -309,7 +309,7 @@
(void) output; // argument not used for now
(void) stream; // argument not used for now
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
ssize_t index = mOutputSessions.indexOfKey(audioSession);
if (index < 0) {
ALOGV("releaseOutputSessionEffects: no output processing was attached to this stream");
@@ -370,7 +370,7 @@
return BAD_VALUE;
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
// Find the EffectDescVector for the given source type, or create a new one if necessary.
ssize_t index = mInputSources.indexOfKey(source);
@@ -435,7 +435,7 @@
return BAD_VALUE;
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
// Find the EffectDescVector for the given stream type, or create a new one if necessary.
ssize_t index = mOutputStreams.indexOfKey(stream);
@@ -475,7 +475,7 @@
return BAD_VALUE;
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
// Check each source type.
size_t numSources = mInputSources.size();
@@ -506,7 +506,7 @@
return BAD_VALUE;
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
// Check each stream type.
size_t numStreams = mOutputStreams.size();
@@ -948,7 +948,7 @@
loadProcessingChain(processings->postprocess, mOutputStreams);
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
loadDeviceProcessingChain(processings->deviceprocess, mDeviceEffects);
}
@@ -985,7 +985,7 @@
void AudioPolicyEffects::initDefaultDeviceEffects()
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
for (const auto& deviceEffectsIter : mDeviceEffects) {
const auto& deviceEffects = deviceEffectsIter.second;
for (const auto& effectDesc : deviceEffects->mEffectDescriptors->mEffects) {
diff --git a/services/audiopolicy/service/AudioPolicyEffects.h b/services/audiopolicy/service/AudioPolicyEffects.h
index e17df48..7f41f09 100644
--- a/services/audiopolicy/service/AudioPolicyEffects.h
+++ b/services/audiopolicy/service/AudioPolicyEffects.h
@@ -23,6 +23,7 @@
#include <future>
#include <android-base/thread_annotations.h>
+#include <audio_utils/mutex.h>
#include <cutils/misc.h>
#include <media/AudioEffect.h>
#include <media/audiohal/EffectsFactoryHalInterface.h>
@@ -59,7 +60,7 @@
virtual ~AudioPolicyEffects();
// NOTE: methods on AudioPolicyEffects should never be called with the AudioPolicyService
- // main mutex (mLock) held as they will indirectly call back into AudioPolicyService when
+ // main mutex (mMutex) held as they will indirectly call back into AudioPolicyService when
// managing audio effects.
// Return a list of effect descriptors for default input effects
@@ -204,7 +205,7 @@
void setProcessorEnabled(bool enabled);
const audio_session_t mSessionId;
- // AudioPolicyManager keeps mLock, no need for lock on reference count here
+ // AudioPolicyManager keeps mMutex, no need for lock on reference count here
int mRefCount;
Vector< sp<AudioEffect> >mEffects;
};
@@ -263,9 +264,9 @@
size_t *totSize);
// protects access to mInputSources, mInputSessions, mOutputStreams, mOutputSessions
- // never hold AudioPolicyService::mLock when calling AudioPolicyEffects methods as
+ // never hold AudioPolicyService::mMutex when calling AudioPolicyEffects methods as
// those can call back into AudioPolicyService methods and try to acquire the mutex
- Mutex mLock;
+ mutable audio_utils::mutex mMutex{audio_utils::MutexOrder::kAudioPolicyEffects_Mutex};
// Automatic input effects are configured per audio_source_t
KeyedVector< audio_source_t, EffectDescVector* > mInputSources;
// Automatic input effects are unique for audio_io_handle_t
@@ -279,7 +280,7 @@
/**
* @brief mDeviceEffects map of device effects indexed by the device address
*/
- std::map<std::string, std::unique_ptr<DeviceEffects>> mDeviceEffects GUARDED_BY(mLock);
+ std::map<std::string, std::unique_ptr<DeviceEffects>> mDeviceEffects GUARDED_BY(mMutex);
/**
* Device Effect initialization must be asynchronous: the audio_policy service parses and init
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 509b673..6e1ecec 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -114,7 +114,7 @@
void AudioPolicyService::doOnNewAudioModulesAvailable()
{
if (mAudioPolicyManager == NULL) return;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
mAudioPolicyManager->onNewAudioModulesAvailable();
}
@@ -140,7 +140,7 @@
}
ALOGV("setDeviceConnectionState()");
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
status_t status = mAudioPolicyManager->setDeviceConnectionState(
state, port, encodedFormat);
@@ -162,7 +162,7 @@
AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE));
return Status::ok();
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
legacy2aidl_audio_policy_dev_state_t_AudioPolicyDeviceState(
@@ -190,7 +190,7 @@
}
ALOGV("handleDeviceConfigChange()");
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
status_t status = mAudioPolicyManager->handleDeviceConfigChange(
device, address.c_str(), deviceNameAidl.c_str(), encodedFormat);
@@ -221,7 +221,7 @@
// acquire lock before calling setMode() so that setMode() + setPhoneState() are an atomic
// operation from policy manager standpoint (no other operation (e.g track start or stop)
// can be interleaved).
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
// TODO: check if it is more appropriate to do it in platform specific policy manager
// Audio HAL mode conversion for call redirect modes
@@ -242,7 +242,7 @@
}
Status AudioPolicyService::getPhoneState(AudioMode* _aidl_return) {
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(legacy2aidl_audio_mode_t_AudioMode(mPhoneState));
return Status::ok();
}
@@ -270,7 +270,7 @@
return binderStatusFromStatusT(BAD_VALUE);
}
ALOGV("setForceUse()");
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
mAudioPolicyManager->setForceUse(usage, config);
onCheckSpatializer_l();
@@ -312,7 +312,7 @@
return binderStatusFromStatusT(NO_INIT);
}
ALOGV("getOutput()");
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
legacy2aidl_audio_io_handle_t_int32_t(mAudioPolicyManager->getOutput(stream)));
@@ -352,7 +352,7 @@
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(validateUsage(attr, attributionSource)));
ALOGV("%s()", __func__);
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (!mPackageManager.allowPlaybackCapture(VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_int32_t_uid_t(attributionSource.uid)))) {
@@ -458,7 +458,7 @@
sp<AudioPolicyEffects>& effects,
const char *context)
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
const ssize_t index = mAudioPlaybackClients.indexOfKey(portId);
if (index < 0) {
ALOGE("%s AudioTrack client not found for portId %d", context, portId);
@@ -489,7 +489,7 @@
ALOGW("Failed to add effects on session %d", client->session);
}
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
status_t status = mAudioPolicyManager->startOutput(portId);
if (status == NO_ERROR) {
@@ -531,7 +531,7 @@
ALOGW("Failed to release effects on session %d", client->session);
}
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
status_t status = mAudioPolicyManager->stopOutput(portId);
if (status == NO_ERROR) {
@@ -567,7 +567,7 @@
audioPolicyEffects->releaseOutputSessionEffects(
client->io, client->stream, client->session);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (client != nullptr && client->active) {
onUpdateActiveSpatializerTracks_l();
}
@@ -691,7 +691,7 @@
status_t status;
AudioPolicyInterface::input_type_t inputType;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
{
AutoCallerClear acc;
// the audio_in_acoustics_t parameter is ignored by get_input()
@@ -794,7 +794,7 @@
}
sp<AudioRecordClient> client;
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
ssize_t index = mAudioRecordClients.indexOfKey(portId);
if (index < 0) {
@@ -817,7 +817,7 @@
return binderStatusFromStatusT(PERMISSION_DENIED);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
ALOGW_IF(client->silenced, "startInput on silenced input for port %d, uid %d. Unsilencing.",
portIdAidl,
@@ -937,7 +937,7 @@
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
ssize_t index = mAudioRecordClients.indexOfKey(portId);
if (index < 0) {
@@ -967,7 +967,7 @@
sp<AudioPolicyEffects>audioPolicyEffects;
sp<AudioRecordClient> client;
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
audioPolicyEffects = mAudioPolicyEffects;
ssize_t index = mAudioRecordClients.indexOfKey(portId);
if (index < 0) {
@@ -995,7 +995,7 @@
}
}
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
mAudioPolicyManager->releaseInput(portId);
}
@@ -1019,7 +1019,7 @@
if (uint32_t(stream) >= AUDIO_STREAM_PUBLIC_CNT) {
return binderStatusFromStatusT(BAD_VALUE);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
mAudioPolicyManager->initStreamVolume(stream, indexMin, indexMax);
return binderStatusFromStatusT(NO_ERROR);
@@ -1043,7 +1043,7 @@
if (uint32_t(stream) >= AUDIO_STREAM_PUBLIC_CNT) {
return binderStatusFromStatusT(BAD_VALUE);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(mAudioPolicyManager->setStreamVolumeIndex(stream,
index,
@@ -1065,7 +1065,7 @@
if (uint32_t(stream) >= AUDIO_STREAM_PUBLIC_CNT) {
return binderStatusFromStatusT(BAD_VALUE);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getStreamVolumeIndex(stream, &index, device)));
@@ -1090,7 +1090,7 @@
if (!settingsAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(
mAudioPolicyManager->setVolumeIndexForAttributes(attributes, index, device));
@@ -1110,7 +1110,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getVolumeIndexForAttributes(attributes, index, device)));
@@ -1129,7 +1129,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getMinVolumeIndexForAttributes(attributes, index)));
@@ -1148,7 +1148,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getMaxVolumeIndexForAttributes(attributes, index)));
@@ -1190,7 +1190,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getDevicesForAttributes(aa, &devices, forVolume)));
@@ -1210,7 +1210,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
legacy2aidl_audio_io_handle_t_int32_t(mAudioPolicyManager->getOutputForEffect(&desc)));
@@ -1235,7 +1235,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(
mAudioPolicyManager->registerEffect(&desc, io, strategy, session, id));
@@ -1247,7 +1247,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(mAudioPolicyManager->unregisterEffect(id));
}
@@ -1258,7 +1258,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(mAudioPolicyManager->setEffectEnabled(id, enabled));
}
@@ -1277,7 +1277,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(mAudioPolicyManager->moveEffectsToIo(ids, io));
}
@@ -1295,7 +1295,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = mAudioPolicyManager->isStreamActive(stream, inPastMs);
return Status::ok();
@@ -1315,7 +1315,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = mAudioPolicyManager->isStreamActiveRemotely(stream, inPastMs);
return Status::ok();
@@ -1327,7 +1327,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = mAudioPolicyManager->isSourceActive(source);
return Status::ok();
@@ -1339,7 +1339,7 @@
return NO_INIT;
}
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
audioPolicyEffects = mAudioPolicyEffects;
}
if (audioPolicyEffects == 0) {
@@ -1463,7 +1463,7 @@
convertRange(systemUsagesAidl.begin(), systemUsagesAidl.begin() + size,
std::back_inserter(systemUsages), aidl2legacy_AudioUsage_audio_usage_t)));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if(!modifyAudioRoutingAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
@@ -1483,7 +1483,7 @@
audio_flags_mask_t capturePolicy = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_int32_t_audio_flags_mask_t_mask(capturePolicyAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
ALOGV("%s() mAudioPolicyManager == NULL", __func__);
return binderStatusFromStatusT(NO_INIT);
@@ -1500,7 +1500,7 @@
ALOGV("mAudioPolicyManager == NULL");
return binderStatusFromStatusT(AUDIO_OFFLOAD_NOT_SUPPORTED);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(legacy2aidl_audio_offload_mode_t_AudioOffloadMode(
mAudioPolicyManager->getOffloadSupport(info)));
@@ -1525,7 +1525,7 @@
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(validateUsage(attributes)));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
*_aidl_return = mAudioPolicyManager->isDirectOutputSupported(config, attributes);
return Status::ok();
}
@@ -1561,7 +1561,7 @@
std::unique_ptr<audio_port_v7[]> ports(new audio_port_v7[num_ports]);
unsigned int generation;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
@@ -1589,7 +1589,7 @@
Status AudioPolicyService::listDeclaredDevicePorts(media::AudioPortRole role,
std::vector<media::AudioPortFw>* _aidl_return) {
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
@@ -1601,7 +1601,7 @@
Status AudioPolicyService::getAudioPort(int portId,
media::AudioPortFw* _aidl_return) {
audio_port_v7 port{ .id = portId };
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
@@ -1628,7 +1628,7 @@
aidl2legacy_int32_t_audio_port_handle_t(handleAidl));
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(AudioValidator::validateAudioPatch(patch)));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if(!modifyAudioRoutingAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
@@ -1647,7 +1647,7 @@
{
audio_patch_handle_t handle = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_int32_t_audio_patch_handle_t(handleAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if(!modifyAudioRoutingAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
@@ -1672,7 +1672,7 @@
std::unique_ptr<audio_patch[]> patches(new audio_patch[num_patches]);
unsigned int generation;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
@@ -1710,7 +1710,7 @@
RETURN_IF_BINDER_ERROR(
binderStatusFromStatusT(AudioValidator::validateAudioPortConfig(config)));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if(!modifyAudioRoutingAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
@@ -1728,7 +1728,7 @@
audio_devices_t device;
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
@@ -1750,7 +1750,7 @@
{
audio_session_t session = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_int32_t_audio_session_t(sessionAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
@@ -1769,7 +1769,7 @@
convertRange(mixesAidl.begin(), mixesAidl.begin() + size, std::back_inserter(mixes),
aidl2legacy_AudioMix)));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
// loopback|render only need a MediaProjection (checked in caller AudioService.java)
bool needModifyAudioRouting = std::any_of(mixes.begin(), mixes.end(), [](auto& mix) {
@@ -1812,7 +1812,7 @@
Status AudioPolicyService::updatePolicyMixes(
const ::std::vector<::android::media::AudioMixUpdate>& updates) {
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
for (const auto& update : updates) {
AudioMix mix = VALUE_OR_RETURN_BINDER_STATUS(aidl2legacy_AudioMix(update.audioMix));
std::vector<AudioMixMatchCriterion> newCriteria =
@@ -1834,7 +1834,7 @@
convertContainer<AudioDeviceTypeAddrVector>(devicesAidl,
aidl2legacy_AudioDeviceTypeAddress));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if(!modifyAudioRoutingAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
@@ -1848,7 +1848,7 @@
Status AudioPolicyService::removeUidDeviceAffinities(int32_t uidAidl) {
uid_t uid = VALUE_OR_RETURN_BINDER_STATUS(aidl2legacy_int32_t_uid_t(uidAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if(!modifyAudioRoutingAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
@@ -1867,7 +1867,7 @@
convertContainer<AudioDeviceTypeAddrVector>(devicesAidl,
aidl2legacy_AudioDeviceTypeAddress));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if(!modifyAudioRoutingAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
@@ -1881,7 +1881,7 @@
Status AudioPolicyService::removeUserIdDeviceAffinities(int32_t userIdAidl) {
int userId = VALUE_OR_RETURN_BINDER_STATUS(convertReinterpret<int>(userIdAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if(!modifyAudioRoutingAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
@@ -1905,7 +1905,7 @@
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
AudioValidator::validateAudioAttributes(attributes, "68953950")));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
@@ -1926,7 +1926,7 @@
audio_port_handle_t portId = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_int32_t_audio_port_handle_t(portIdAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
@@ -1942,7 +1942,7 @@
if (!settingsAllowed()) {
return binderStatusFromStatusT(PERMISSION_DENIED);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(mAudioPolicyManager->setMasterMono(mono));
}
@@ -1952,7 +1952,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(mAudioPolicyManager->getMasterMono(_aidl_return));
}
@@ -1970,7 +1970,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = mAudioPolicyManager->getStreamVolumeDB(stream, index, device);
return Status::ok();
@@ -1991,7 +1991,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getSurroundFormats(&numSurroundFormats, surroundFormats.get(),
@@ -2022,7 +2022,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getReportedSurroundFormats(
@@ -2044,7 +2044,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
audio_devices_t device = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_AudioDeviceDescription_audio_devices_t(deviceAidl));
@@ -2064,7 +2064,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
return binderStatusFromStatusT(
mAudioPolicyManager->setSurroundFormatEnabled(audioFormat, enabled));
@@ -2087,7 +2087,7 @@
std::vector<uid_t> uids;
RETURN_IF_BINDER_ERROR(convertInt32VectorToUidVectorWithLimit(uidsAidl, uids));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mUidPolicy->setAssistantUids(uids);
return Status::ok();
}
@@ -2097,7 +2097,7 @@
std::vector<uid_t> activeUids;
RETURN_IF_BINDER_ERROR(convertInt32VectorToUidVectorWithLimit(activeUidsAidl, activeUids));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mUidPolicy->setActiveAssistantUids(activeUids);
return Status::ok();
}
@@ -2107,7 +2107,7 @@
std::vector<uid_t> uids;
RETURN_IF_BINDER_ERROR(convertInt32VectorToUidVectorWithLimit(uidsAidl, uids));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mUidPolicy->setA11yUids(uids);
return Status::ok();
}
@@ -2115,7 +2115,7 @@
Status AudioPolicyService::setCurrentImeUid(int32_t uidAidl)
{
uid_t uid = VALUE_OR_RETURN_BINDER_STATUS(aidl2legacy_int32_t_uid_t(uidAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mUidPolicy->setCurrentImeUid(uid);
return Status::ok();
}
@@ -2125,7 +2125,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = mAudioPolicyManager->isHapticPlaybackSupported();
return Status::ok();
@@ -2136,7 +2136,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = mAudioPolicyManager->isUltrasoundSupported();
return Status::ok();
@@ -2147,7 +2147,7 @@
if (mAudioPolicyManager == nullptr) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = mAudioPolicyManager->isHotwordStreamSupported(lookbackAudio);
return Status::ok();
@@ -2160,7 +2160,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
RETURN_IF_BINDER_ERROR(
binderStatusFromStatusT(mAudioPolicyManager->listAudioProductStrategies(strategies)));
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
@@ -2180,7 +2180,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getProductStrategyFromAudioAttributes(
aa, productStrategy, fallbackOnDefault)));
@@ -2195,7 +2195,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
RETURN_IF_BINDER_ERROR(
binderStatusFromStatusT(mAudioPolicyManager->listAudioVolumeGroups(groups)));
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
@@ -2214,7 +2214,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
RETURN_IF_BINDER_ERROR(
binderStatusFromStatusT(
mAudioPolicyManager->getVolumeGroupFromAudioAttributes(
@@ -2225,7 +2225,7 @@
Status AudioPolicyService::setRttEnabled(bool enabled)
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mUidPolicy->setRttEnabled(enabled);
return Status::ok();
}
@@ -2235,7 +2235,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
AutoCallerClear acc;
*_aidl_return = mAudioPolicyManager->isCallScreenModeSupported();
return Status::ok();
@@ -2256,7 +2256,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
status_t status = mAudioPolicyManager->setDevicesRoleForStrategy(strategy, role, devices);
if (status == NO_ERROR) {
onCheckSpatializer_l();
@@ -2279,7 +2279,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
status_t status = mAudioPolicyManager->removeDevicesRoleForStrategy(strategy, role, devices);
if (status == NO_ERROR) {
onCheckSpatializer_l();
@@ -2296,7 +2296,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
status_t status = mAudioPolicyManager->clearDevicesRoleForStrategy(strategy, role);
if (status == NO_ERROR) {
onCheckSpatializer_l();
@@ -2317,7 +2317,7 @@
if (mAudioPolicyManager == NULL) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getDevicesForRoleAndStrategy(strategy, role, devices)));
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
@@ -2347,7 +2347,7 @@
if (mAudioPolicyManager == nullptr) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
return binderStatusFromStatusT(
mAudioPolicyManager->setDevicesRoleForCapturePreset(audioSource, role, devices));
}
@@ -2367,7 +2367,7 @@
if (mAudioPolicyManager == nullptr) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
return binderStatusFromStatusT(
mAudioPolicyManager->addDevicesRoleForCapturePreset(audioSource, role, devices));
}
@@ -2387,7 +2387,7 @@
if (mAudioPolicyManager == nullptr) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
return binderStatusFromStatusT(
mAudioPolicyManager->removeDevicesRoleForCapturePreset(audioSource, role, devices));
}
@@ -2402,7 +2402,7 @@
if (mAudioPolicyManager == nullptr) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
return binderStatusFromStatusT(
mAudioPolicyManager->clearDevicesRoleForCapturePreset(audioSource, role));
}
@@ -2420,7 +2420,7 @@
if (mAudioPolicyManager == nullptr) {
return binderStatusFromStatusT(NO_INIT);
}
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getDevicesForRoleAndCapturePreset(audioSource, role, devices)));
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
@@ -2467,7 +2467,7 @@
convertContainer<AudioDeviceTypeAddrVector>(devicesAidl,
aidl2legacy_AudioDeviceTypeAddress));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
*_aidl_return = mAudioPolicyManager->canBeSpatialized(&attr, &config, devices);
return Status::ok();
}
@@ -2486,7 +2486,7 @@
aidl2legacy_AudioAttributes_audio_attributes_t(attrAidl));
audio_config_t config = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_AudioConfig_audio_config_t(configAidl, false /*isInput*/));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
*_aidl_return = static_cast<media::AudioDirectMode>(
VALUE_OR_RETURN_BINDER_STATUS(legacy2aidl_audio_direct_mode_t_int32_t_mask(
mAudioPolicyManager->getDirectPlaybackSupport(&attr, &config))));
@@ -2503,7 +2503,7 @@
aidl2legacy_AudioAttributes_audio_attributes_t(attrAidl));
AudioProfileVector audioProfiles;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
mAudioPolicyManager->getDirectProfilesForAttributes(&attr, audioProfiles)));
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
@@ -2523,7 +2523,7 @@
aidl2legacy_int32_t_audio_port_handle_t(portIdAidl));
std::vector<audio_mixer_attributes_t> mixerAttrs;
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
RETURN_IF_BINDER_ERROR(
binderStatusFromStatusT(mAudioPolicyManager->getSupportedMixerAttributes(
portId, mixerAttrs)));
@@ -2551,7 +2551,7 @@
audio_port_handle_t portId = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_int32_t_audio_port_handle_t(portIdAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
return binderStatusFromStatusT(
mAudioPolicyManager->setPreferredMixerAttributes(&attr, portId, uid, &mixerAttr));
}
@@ -2569,7 +2569,7 @@
audio_port_handle_t portId = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_int32_t_audio_port_handle_t(portIdAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
audio_mixer_attributes_t mixerAttr = AUDIO_MIXER_ATTRIBUTES_INITIALIZER;
RETURN_IF_BINDER_ERROR(
binderStatusFromStatusT(mAudioPolicyManager->getPreferredMixerAttributes(
@@ -2593,7 +2593,7 @@
audio_port_handle_t portId = VALUE_OR_RETURN_BINDER_STATUS(
aidl2legacy_int32_t_audio_port_handle_t(portIdAidl));
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
return binderStatusFromStatusT(
mAudioPolicyManager->clearPreferredMixerAttributes(&attr, portId, uid));
}
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index 5d3788d..835a617 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -265,7 +265,7 @@
.set(AMEDIAMETRICS_PROP_EXECUTIONTIMENS, (int64_t)(systemTime() - beginNs))
.record(); });
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
// start audio commands thread
mAudioCommandThread = new AudioCommandThread(String8("ApmAudio"), this);
@@ -284,7 +284,7 @@
sp<UidPolicy> uidPolicy = new UidPolicy(this);
sp<SensorPrivacyPolicy> sensorPrivacyPolicy = new SensorPrivacyPolicy(this);
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mAudioPolicyEffects = audioPolicyEffects;
mUidPolicy = uidPolicy;
mSensorPrivacyPolicy = sensorPrivacyPolicy;
@@ -294,16 +294,16 @@
// Create spatializer if supported
if (mAudioPolicyManager != nullptr) {
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
const audio_attributes_t attr = attributes_initializer(AUDIO_USAGE_MEDIA);
AudioDeviceTypeAddrVector devices;
bool hasSpatializer = mAudioPolicyManager->canBeSpatialized(&attr, nullptr, devices);
if (hasSpatializer) {
// Unlock as Spatializer::create() will use the callback and acquire the
// AudioPolicyService_Mutex.
- mLock.unlock();
+ mMutex.unlock();
mSpatializer = Spatializer::create(this, effectsFactoryHal);
- mLock.lock();
+ mMutex.lock();
}
if (mSpatializer == nullptr) {
// No spatializer created, signal the reason: NO_INIT a failure, OK means intended.
@@ -356,7 +356,7 @@
ALOGW("%s got NULL client", __FUNCTION__);
return Status::ok();
}
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
uid_t uid = IPCThreadState::self()->getCallingUid();
pid_t pid = IPCThreadState::self()->getCallingPid();
@@ -379,7 +379,7 @@
Status AudioPolicyService::setAudioPortCallbacksEnabled(bool enabled)
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
uid_t uid = IPCThreadState::self()->getCallingUid();
pid_t pid = IPCThreadState::self()->getCallingPid();
@@ -394,7 +394,7 @@
Status AudioPolicyService::setAudioVolumeGroupCallbacksEnabled(bool enabled)
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
uid_t uid = IPCThreadState::self()->getCallingUid();
pid_t pid = IPCThreadState::self()->getCallingPid();
@@ -412,7 +412,7 @@
{
bool hasSameUid = false;
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
int64_t token = ((int64_t)uid<<32) | pid;
mNotificationClients.removeItem(token);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
@@ -423,7 +423,7 @@
}
}
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
if (mAudioPolicyManager && !hasSameUid) {
// called from binder death notification: no need to clear caller identity
mAudioPolicyManager->releaseResourcesForUid(uid);
@@ -438,7 +438,7 @@
void AudioPolicyService::doOnAudioPortListUpdate()
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
mNotificationClients.valueAt(i)->onAudioPortListUpdate();
}
@@ -451,7 +451,7 @@
void AudioPolicyService::doOnAudioPatchListUpdate()
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
mNotificationClients.valueAt(i)->onAudioPatchListUpdate();
}
@@ -464,7 +464,7 @@
void AudioPolicyService::doOnAudioVolumeGroupChanged(volume_group_t group, int flags)
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
mNotificationClients.valueAt(i)->onAudioVolumeGroupChanged(group, flags);
}
@@ -479,7 +479,7 @@
void AudioPolicyService::doOnDynamicPolicyMixStateUpdate(const String8& regId, int32_t state)
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
mNotificationClients.valueAt(i)->onDynamicPolicyMixStateUpdate(regId, state);
}
@@ -509,7 +509,7 @@
audio_patch_handle_t patchHandle,
audio_source_t source)
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
mNotificationClients.valueAt(i)->onRecordingConfigurationUpdate(event, clientInfo,
clientConfig, clientEffects, deviceConfig, effects, patchHandle, source);
@@ -523,7 +523,7 @@
void AudioPolicyService::doOnRoutingUpdated()
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
mNotificationClients.valueAt(i)->onRoutingUpdated();
}
@@ -536,7 +536,7 @@
void AudioPolicyService::doOnVolumeRangeInitRequest()
{
- Mutex::Autolock _l(mNotificationClientsLock);
+ audio_utils::lock_guard _l(mNotificationClientsMutex);
for (size_t i = 0; i < mNotificationClients.size(); i++) {
mNotificationClients.valueAt(i)->onVolumeRangeInitRequest();
}
@@ -544,7 +544,7 @@
void AudioPolicyService::onCheckSpatializer()
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
onCheckSpatializer_l();
}
@@ -568,7 +568,7 @@
const audio_attributes_t attr = attributes_initializer(AUDIO_USAGE_MEDIA);
audio_config_base_t config = mSpatializer->getAudioInConfig();
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
status_t status =
mAudioPolicyManager->getSpatializerOutput(&config, &attr, &newOutput);
ALOGV("%s currentOutput %d newOutput %d channel_mask %#x",
@@ -577,13 +577,13 @@
return;
}
size_t numActiveTracks = countActiveClientsOnOutput_l(newOutput);
- mLock.unlock();
+ mMutex.unlock();
// It is OK to call detachOutput() is none is already attached.
mSpatializer->detachOutput();
if (status == NO_ERROR && newOutput != AUDIO_IO_HANDLE_NONE) {
status = mSpatializer->attachOutput(newOutput, numActiveTracks);
}
- mLock.lock();
+ mMutex.lock();
if (status != NO_ERROR) {
mAudioPolicyManager->releaseSpatializerOutput(newOutput);
}
@@ -592,7 +592,7 @@
audio_io_handle_t output = mSpatializer->detachOutput();
if (output != AUDIO_IO_HANDLE_NONE) {
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mAudioPolicyManager->releaseSpatializerOutput(output);
}
}
@@ -627,7 +627,7 @@
audio_io_handle_t output = mSpatializer->getOutput();
size_t activeClients;
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
activeClients = countActiveClientsOnOutput_l(output);
}
mSpatializer->updateActiveTracks(activeClients);
@@ -783,12 +783,8 @@
IPCThreadState::self()->getCallingPid());
}
-static bool dumpTryLock(Mutex& mutex) ACQUIRE(mutex) NO_THREAD_SAFETY_ANALYSIS
-{
- return mutex.timedLock(kDumpLockTimeoutNs) == NO_ERROR;
-}
-
-static void dumpReleaseLock(Mutex& mutex, bool locked) RELEASE(mutex) NO_THREAD_SAFETY_ANALYSIS
+static void dumpReleaseLock(audio_utils::mutex& mutex, bool locked)
+ RELEASE(mutex) NO_THREAD_SAFETY_ANALYSIS
{
if (locked) mutex.unlock();
}
@@ -825,7 +821,7 @@
void AudioPolicyService::updateUidStates()
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
updateUidStates_l();
}
@@ -1027,7 +1023,7 @@
bool isTopOrLatestAssistant = latestActiveAssistant == nullptr ? false :
current->attributionSource.uid == latestActiveAssistant->attributionSource.uid;
- auto canCaptureIfInCallOrCommunication = [&](const auto &recordClient) REQUIRES(mLock) {
+ auto canCaptureIfInCallOrCommunication = [&](const auto &recordClient) REQUIRES(mMutex) {
uid_t recordUid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(
recordClient->attributionSource.uid));
bool canCaptureCall = recordClient->canCaptureOutput;
@@ -1205,11 +1201,12 @@
}
status_t AudioPolicyService::dump(int fd, const Vector<String16>& args __unused)
+NO_THREAD_SAFETY_ANALYSIS // update for trylock.
{
if (!dumpAllowed()) {
dumpPermissionDenial(fd);
} else {
- const bool locked = dumpTryLock(mLock);
+ const bool locked = mMutex.try_lock(kDumpLockTimeoutNs);
if (!locked) {
String8 result(kDeadlockedString);
write(fd, result.c_str(), result.size());
@@ -1238,7 +1235,7 @@
mPackageManager.dump(fd);
- dumpReleaseLock(mLock, locked);
+ dumpReleaseLock(mMutex, locked);
if (mSpatializer != nullptr) {
std::string dumpString = mSpatializer->toString(1 /* level */);
@@ -1483,7 +1480,7 @@
sp<UidPolicy> uidPolicy;
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
uidPolicy = mUidPolicy;
}
if (uidPolicy) {
@@ -1512,7 +1509,7 @@
sp<UidPolicy> uidPolicy;
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
uidPolicy = mUidPolicy;
}
if (uidPolicy) {
@@ -1541,7 +1538,7 @@
sp<UidPolicy> uidPolicy;
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
uidPolicy = mUidPolicy;
}
if (uidPolicy) {
@@ -1579,7 +1576,7 @@
ActivityManager::PROCESS_STATE_UNKNOWN,
String16("audioserver"));
if (!res) {
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mObserverRegistered = true;
} else {
ALOGE("UidPolicy::registerSelf linkToDeath failed: %d", res);
@@ -1591,12 +1588,12 @@
void AudioPolicyService::UidPolicy::unregisterSelf() {
mAm.unlinkToDeath(this);
mAm.unregisterUidObserver(this);
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mObserverRegistered = false;
}
void AudioPolicyService::UidPolicy::binderDied(__unused const wp<IBinder> &who) {
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mCachedUids.clear();
mObserverRegistered = false;
}
@@ -1604,7 +1601,7 @@
void AudioPolicyService::UidPolicy::checkRegistered() {
bool needToReregister = false;
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
needToReregister = !mObserverRegistered;
}
if (needToReregister) {
@@ -1617,7 +1614,7 @@
if (isServiceUid(uid)) return true;
checkRegistered();
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
auto overrideIter = mOverrideUids.find(uid);
if (overrideIter != mOverrideUids.end()) {
return overrideIter->second.first;
@@ -1632,7 +1629,7 @@
ActivityManager am;
bool active = am.isUidActive(uid, String16("audioserver"));
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mCachedUids.insert(std::pair<uid_t,
std::pair<bool, int>>(uid, std::pair<bool, int>(active,
ActivityManager::PROCESS_STATE_UNKNOWN)));
@@ -1646,7 +1643,7 @@
}
checkRegistered();
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
auto overrideIter = mOverrideUids.find(uid);
if (overrideIter != mOverrideUids.end()) {
if (overrideIter->second.first) {
@@ -1681,7 +1678,7 @@
state = am.getUidProcessState(uid, String16("audioserver"));
}
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
mCachedUids.insert(std::pair<uid_t,
std::pair<bool, int>>(uid, std::pair<bool, int>(active, state)));
}
@@ -1736,7 +1733,7 @@
bool wasActive = isUidActive(uid);
int previousState = getUidState(uid);
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
updateUidLocked(uids, uid, active, state, insert);
}
if (wasActive != isUidActive(uid) || state != previousState) {
@@ -1771,7 +1768,7 @@
}
bool AudioPolicyService::UidPolicy::isA11yOnTop() {
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
for (const auto &uid : mCachedUids) {
if (!isA11yUid(uid.first)) {
continue;
@@ -1902,7 +1899,7 @@
{
nsecs_t waitTime = -1;
- mLock.lock();
+ audio_utils::unique_lock ul(mMutex);
while (!exitPending())
{
sp<AudioPolicyService> svc;
@@ -1923,27 +1920,27 @@
VolumeData *data = (VolumeData *)command->mParam.get();
ALOGV("AudioCommandThread() processing set volume stream %d, \
volume %f, output %d", data->mStream, data->mVolume, data->mIO);
- mLock.unlock();
+ ul.unlock();
command->mStatus = AudioSystem::setStreamVolume(data->mStream,
data->mVolume,
data->mIO);
- mLock.lock();
+ ul.lock();
}break;
case SET_PARAMETERS: {
ParametersData *data = (ParametersData *)command->mParam.get();
ALOGV("AudioCommandThread() processing set parameters string %s, io %d",
data->mKeyValuePairs.c_str(), data->mIO);
- mLock.unlock();
+ ul.unlock();
command->mStatus = AudioSystem::setParameters(data->mIO, data->mKeyValuePairs);
- mLock.lock();
+ ul.lock();
}break;
case SET_VOICE_VOLUME: {
VoiceVolumeData *data = (VoiceVolumeData *)command->mParam.get();
ALOGV("AudioCommandThread() processing set voice volume volume %f",
data->mVolume);
- mLock.unlock();
+ ul.unlock();
command->mStatus = AudioSystem::setVoiceVolume(data->mVolume);
- mLock.lock();
+ ul.lock();
}break;
case STOP_OUTPUT: {
StopOutputData *data = (StopOutputData *)command->mParam.get();
@@ -1953,9 +1950,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doStopOutput(data->mPortId);
- mLock.lock();
+ ul.lock();
}break;
case RELEASE_OUTPUT: {
ReleaseOutputData *data = (ReleaseOutputData *)command->mParam.get();
@@ -1965,9 +1962,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doReleaseOutput(data->mPortId);
- mLock.lock();
+ ul.lock();
}break;
case CREATE_AUDIO_PATCH: {
CreateAudioPatchData *data = (CreateAudioPatchData *)command->mParam.get();
@@ -1976,9 +1973,9 @@
if (af == 0) {
command->mStatus = PERMISSION_DENIED;
} else {
- mLock.unlock();
+ ul.unlock();
command->mStatus = af->createAudioPatch(&data->mPatch, &data->mHandle);
- mLock.lock();
+ ul.lock();
}
} break;
case RELEASE_AUDIO_PATCH: {
@@ -1988,9 +1985,9 @@
if (af == 0) {
command->mStatus = PERMISSION_DENIED;
} else {
- mLock.unlock();
+ ul.unlock();
command->mStatus = af->releaseAudioPatch(data->mHandle);
- mLock.lock();
+ ul.lock();
}
} break;
case UPDATE_AUDIOPORT_LIST: {
@@ -1999,9 +1996,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnAudioPortListUpdate();
- mLock.lock();
+ ul.lock();
}break;
case UPDATE_AUDIOPATCH_LIST: {
ALOGV("AudioCommandThread() processing update audio patch list");
@@ -2009,9 +2006,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnAudioPatchListUpdate();
- mLock.lock();
+ ul.lock();
}break;
case CHANGED_AUDIOVOLUMEGROUP: {
AudioVolumeGroupData *data =
@@ -2021,9 +2018,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnAudioVolumeGroupChanged(data->mGroup, data->mFlags);
- mLock.lock();
+ ul.lock();
}break;
case SET_AUDIOPORT_CONFIG: {
SetAudioPortConfigData *data = (SetAudioPortConfigData *)command->mParam.get();
@@ -2032,9 +2029,9 @@
if (af == 0) {
command->mStatus = PERMISSION_DENIED;
} else {
- mLock.unlock();
+ ul.unlock();
command->mStatus = af->setAudioPortConfig(&data->mConfig);
- mLock.lock();
+ ul.lock();
}
} break;
case DYN_POLICY_MIX_STATE_UPDATE: {
@@ -2046,9 +2043,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnDynamicPolicyMixStateUpdate(data->mRegId, data->mState);
- mLock.lock();
+ ul.lock();
} break;
case RECORDING_CONFIGURATION_UPDATE: {
RecordingConfigurationUpdateData *data =
@@ -2058,21 +2055,21 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnRecordingConfigurationUpdate(data->mEvent, &data->mClientInfo,
&data->mClientConfig, data->mClientEffects,
&data->mDeviceConfig, data->mEffects,
data->mPatchHandle, data->mSource);
- mLock.lock();
+ ul.lock();
} break;
case SET_EFFECT_SUSPENDED: {
SetEffectSuspendedData *data = (SetEffectSuspendedData *)command->mParam.get();
ALOGV("AudioCommandThread() processing set effect suspended");
sp<IAudioFlinger> af = AudioSystem::get_audio_flinger();
if (af != 0) {
- mLock.unlock();
+ ul.unlock();
af->setEffectSuspended(data->mEffectId, data->mSessionId, data->mSuspended);
- mLock.lock();
+ ul.lock();
}
} break;
case AUDIO_MODULES_UPDATE: {
@@ -2081,9 +2078,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnNewAudioModulesAvailable();
- mLock.lock();
+ ul.lock();
} break;
case ROUTING_UPDATED: {
ALOGV("AudioCommandThread() processing routing update");
@@ -2091,9 +2088,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnRoutingUpdated();
- mLock.lock();
+ ul.lock();
} break;
case UPDATE_UID_STATES: {
@@ -2102,9 +2099,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->updateUidStates();
- mLock.lock();
+ ul.lock();
} break;
case CHECK_SPATIALIZER_OUTPUT: {
@@ -2113,9 +2110,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnCheckSpatializer();
- mLock.lock();
+ ul.lock();
} break;
case UPDATE_ACTIVE_SPATIALIZER_TRACKS: {
@@ -2124,9 +2121,9 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnUpdateActiveSpatializerTracks();
- mLock.lock();
+ ul.lock();
} break;
case VOL_RANGE_INIT_REQUEST: {
@@ -2135,28 +2132,28 @@
if (svc == 0) {
break;
}
- mLock.unlock();
+ ul.unlock();
svc->doOnVolumeRangeInitRequest();
- mLock.lock();
+ ul.lock();
} break;
default:
ALOGW("AudioCommandThread() unknown command %d", command->mCommand);
}
{
- Mutex::Autolock _l(command->mLock);
+ audio_utils::lock_guard _l(command->mMutex);
if (command->mWaitStatus) {
command->mWaitStatus = false;
- command->mCond.signal();
+ command->mCond.notify_one();
}
}
waitTime = -1;
- // release mLock before releasing strong reference on the service as
+ // release ul before releasing strong reference on the service as
// AudioPolicyService destructor calls AudioCommandThread::exit() which
- // acquires mLock.
- mLock.unlock();
+ // acquires ul.
+ ul.unlock();
svc.clear();
- mLock.lock();
+ ul.lock();
} else {
waitTime = mAudioCommands[0]->mTime - curTime;
break;
@@ -2174,9 +2171,10 @@
if (!exitPending()) {
ALOGV("AudioCommandThread() going to sleep");
if (waitTime == -1) {
- mWaitWorkCV.wait(mLock);
+ mWaitWorkCV.wait(ul);
} else {
- mWaitWorkCV.waitRelative(mLock, waitTime);
+ // discard return value.
+ mWaitWorkCV.wait_for(ul, std::chrono::nanoseconds(waitTime));
}
}
}
@@ -2184,17 +2182,17 @@
if (!mAudioCommands.isEmpty()) {
release_wake_lock(mName.c_str());
}
- mLock.unlock();
return false;
}
status_t AudioPolicyService::AudioCommandThread::dump(int fd)
+NO_THREAD_SAFETY_ANALYSIS // trylock
{
const size_t SIZE = 256;
char buffer[SIZE];
String8 result;
- const bool locked = dumpTryLock(mLock);
+ const bool locked = mMutex.try_lock(kDumpLockTimeoutNs);
if (!locked) {
String8 result2(kCmdDeadlockedString);
write(fd, result2.c_str(), result2.size());
@@ -2217,7 +2215,7 @@
write(fd, result.c_str(), result.size());
- dumpReleaseLock(mLock, locked);
+ dumpReleaseLock(mMutex, locked);
return NO_ERROR;
}
@@ -2475,14 +2473,15 @@
status_t AudioPolicyService::AudioCommandThread::sendCommand(sp<AudioCommand>& command, int delayMs)
{
{
- Mutex::Autolock _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
insertCommand_l(command, delayMs);
- mWaitWorkCV.signal();
+ mWaitWorkCV.notify_one();
}
- Mutex::Autolock _l(command->mLock);
+ audio_utils::unique_lock ul(command->mMutex);
while (command->mWaitStatus) {
nsecs_t timeOutNs = kAudioCommandTimeoutNs + milliseconds(delayMs);
- if (command->mCond.waitRelative(command->mLock, timeOutNs) != NO_ERROR) {
+ if (command->mCond.wait_for(
+ ul, std::chrono::nanoseconds(timeOutNs)) == std::cv_status::timeout) {
command->mStatus = TIMED_OUT;
command->mWaitStatus = false;
}
@@ -2490,7 +2489,7 @@
return command->mStatus;
}
-// insertCommand_l() must be called with mLock held
+// insertCommand_l() must be called with mMutex held
void AudioPolicyService::AudioCommandThread::insertCommand_l(sp<AudioCommand>& command, int delayMs)
{
ssize_t i; // not size_t because i will count down to -1
@@ -2678,9 +2677,9 @@
{
ALOGV("AudioCommandThread::exit");
{
- AutoMutex _l(mLock);
+ audio_utils::lock_guard _l(mMutex);
requestExit();
- mWaitWorkCV.signal();
+ mWaitWorkCV.notify_one();
}
// Note that we can call it from the thread loop if all other references have been released
// but it will safely return WOULD_BLOCK in this case
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index aaf0b1b..9a8a056 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -20,6 +20,7 @@
#include <android/media/BnAudioPolicyService.h>
#include <android/media/GetSpatializerResponse.h>
#include <android-base/thread_annotations.h>
+#include <audio_utils/mutex.h>
#include <cutils/misc.h>
#include <cutils/config_utils.h>
#include <cutils/compiler.h>
@@ -387,10 +388,10 @@
* by audio policy manager and attach/detach the spatializer effect accordingly.
*/
void onCheckSpatializer() override;
- void onCheckSpatializer_l() REQUIRES(mLock);
+ void onCheckSpatializer_l() REQUIRES(mMutex);
void doOnCheckSpatializer();
- void onUpdateActiveSpatializerTracks_l() REQUIRES(mLock);
+ void onUpdateActiveSpatializerTracks_l() REQUIRES(mMutex);
void doOnUpdateActiveSpatializerTracks();
@@ -402,14 +403,14 @@
AudioPolicyService() ANDROID_API;
virtual ~AudioPolicyService();
- status_t dumpInternals(int fd) REQUIRES(mLock);
+ status_t dumpInternals(int fd) REQUIRES(mMutex);
// Handles binder shell commands
virtual status_t shellCommand(int in, int out, int err, Vector<String16>& args);
// Sets whether the given UID records only silence
- virtual void setAppState_l(sp<AudioRecordClient> client, app_state_t state) REQUIRES(mLock);
+ virtual void setAppState_l(sp<AudioRecordClient> client, app_state_t state) REQUIRES(mMutex);
// Overrides the UID state as if it is idle
status_t handleSetUidState(Vector<String16>& args, int err);
@@ -435,9 +436,9 @@
const AttributionSourceState& attributionSource);
void updateUidStates();
- void updateUidStates_l() REQUIRES(mLock);
+ void updateUidStates_l() REQUIRES(mMutex);
- void silenceAllRecordings_l() REQUIRES(mLock);
+ void silenceAllRecordings_l() REQUIRES(mMutex);
static bool isVirtualSource(audio_source_t source);
@@ -510,11 +511,11 @@
void checkRegistered();
wp<AudioPolicyService> mService;
- Mutex mLock;
+ audio_utils::mutex mMutex{audio_utils::MutexOrder::kUidPolicy_Mutex};
ActivityManager mAm;
bool mObserverRegistered = false;
- std::unordered_map<uid_t, std::pair<bool, int>> mOverrideUids GUARDED_BY(mLock);
- std::unordered_map<uid_t, std::pair<bool, int>> mCachedUids GUARDED_BY(mLock);
+ std::unordered_map<uid_t, std::pair<bool, int>> mOverrideUids GUARDED_BY(mMutex);
+ std::unordered_map<uid_t, std::pair<bool, int>> mCachedUids GUARDED_BY(mMutex);
std::vector<uid_t> mAssistantUids;
std::vector<uid_t> mActiveAssistantUids;
std::vector<uid_t> mA11yUids;
@@ -641,8 +642,8 @@
int mCommand; // SET_VOLUME, SET_PARAMETERS...
nsecs_t mTime; // time stamp
- Mutex mLock; // mutex associated to mCond
- Condition mCond; // condition for status return
+ audio_utils::mutex mMutex{audio_utils::MutexOrder::kAudioCommand_Mutex};
+ audio_utils::condition_variable mCond; // condition for status return
status_t mStatus; // command status
bool mWaitStatus; // true if caller is waiting for status
sp<AudioCommandData> mParam; // command specific parameter data
@@ -730,8 +731,8 @@
bool mSuspended;
};
- Mutex mLock;
- Condition mWaitWorkCV;
+ mutable audio_utils::mutex mMutex{audio_utils::MutexOrder::kCommandThread_Mutex};
+ audio_utils::condition_variable mWaitWorkCV;
Vector < sp<AudioCommand> > mAudioCommands; // list of pending commands
sp<AudioCommand> mLastCommand; // last processed command (used by dump)
String8 mName; // string used by wake lock fo delayed commands
@@ -996,12 +997,12 @@
* @return the number of active tracks.
*/
size_t countActiveClientsOnOutput_l(
- audio_io_handle_t output, bool spatializedOnly = true) REQUIRES(mLock);
+ audio_io_handle_t output, bool spatializedOnly = true) REQUIRES(mMutex);
- mutable Mutex mLock; // prevents concurrent access to AudioPolicy manager functions changing
- // device connection state or routing
- // Note: lock acquisition order is always mLock > mEffectsLock:
- // mLock protects AudioPolicyManager methods that can call into audio flinger
+ mutable audio_utils::mutex mMutex{audio_utils::MutexOrder::kAudioPolicyService_Mutex};
+ // prevents concurrent access to AudioPolicy manager functions changing
+ // device connection state or routing.
+ // mMutex protects AudioPolicyManager methods that can call into audio flinger
// and possibly back in to audio policy service and acquire mEffectsLock.
sp<AudioCommandThread> mAudioCommandThread; // audio commands thread
sp<AudioCommandThread> mOutputCommandThread; // process stop and release output
@@ -1009,29 +1010,30 @@
AudioPolicyClient *mAudioPolicyClient;
std::vector<audio_usage_t> mSupportedSystemUsages;
- Mutex mNotificationClientsLock;
+ mutable audio_utils::mutex mNotificationClientsMutex{
+ audio_utils::MutexOrder::kAudioPolicyService_NotificationClientsMutex};
DefaultKeyedVector<int64_t, sp<NotificationClient>> mNotificationClients
- GUARDED_BY(mNotificationClientsLock);
+ GUARDED_BY(mNotificationClientsMutex);
// Manage all effects configured in audio_effects.conf
- // never hold AudioPolicyService::mLock when calling AudioPolicyEffects methods as
+ // never hold AudioPolicyService::mMutex when calling AudioPolicyEffects methods as
// those can call back into AudioPolicyService methods and try to acquire the mutex
- sp<AudioPolicyEffects> mAudioPolicyEffects GUARDED_BY(mLock);
- audio_mode_t mPhoneState GUARDED_BY(mLock);
- uid_t mPhoneStateOwnerUid GUARDED_BY(mLock);
+ sp<AudioPolicyEffects> mAudioPolicyEffects GUARDED_BY(mMutex);
+ audio_mode_t mPhoneState GUARDED_BY(mMutex);
+ uid_t mPhoneStateOwnerUid GUARDED_BY(mMutex);
- sp<UidPolicy> mUidPolicy GUARDED_BY(mLock);
- sp<SensorPrivacyPolicy> mSensorPrivacyPolicy GUARDED_BY(mLock);
+ sp<UidPolicy> mUidPolicy GUARDED_BY(mMutex);
+ sp<SensorPrivacyPolicy> mSensorPrivacyPolicy GUARDED_BY(mMutex);
DefaultKeyedVector<audio_port_handle_t, sp<AudioRecordClient>> mAudioRecordClients
- GUARDED_BY(mLock);
+ GUARDED_BY(mMutex);
DefaultKeyedVector<audio_port_handle_t, sp<AudioPlaybackClient>> mAudioPlaybackClients
- GUARDED_BY(mLock);
+ GUARDED_BY(mMutex);
MediaPackageManager mPackageManager; // To check allowPlaybackCapture
CaptureStateNotifier mCaptureStateNotifier;
- // created in onFirstRef() and never cleared: does not need to be guarded by mLock
+ // created in onFirstRef() and never cleared: does not need to be guarded by mMutex
sp<Spatializer> mSpatializer;
void *mLibraryHandle = nullptr;
diff --git a/services/audiopolicy/service/Spatializer.cpp b/services/audiopolicy/service/Spatializer.cpp
index 90418a5..b4ae6e7 100644
--- a/services/audiopolicy/service/Spatializer.cpp
+++ b/services/audiopolicy/service/Spatializer.cpp
@@ -229,7 +229,7 @@
return;
}
auto latencyModesStrs = android::sysprop::BluetoothProperties::dsa_transport_preference();
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
// First load preferred low latency modes ordered from the property
for (auto str : latencyModesStrs) {
if (!str.has_value()) continue;
@@ -461,7 +461,7 @@
/** Gets the channel mask, sampling rate and format set for the spatializer input. */
audio_config_base_t Spatializer::getAudioInConfig() const {
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
audio_config_base_t config = AUDIO_CONFIG_BASE_INITIALIZER;
// For now use highest supported channel count
config.channel_mask = getMaxChannelMask(mChannelMasks, FCC_LIMIT);
@@ -470,7 +470,7 @@
status_t Spatializer::registerCallback(
const sp<media::INativeSpatializerCallback>& callback) {
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (callback == nullptr) {
return BAD_VALUE;
}
@@ -498,7 +498,7 @@
// IBinder::DeathRecipient
void Spatializer::binderDied(__unused const wp<IBinder> &who) {
{
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
mLevel = Spatialization::Level::NONE;
mSpatializerCallback.clear();
}
@@ -527,7 +527,7 @@
sp<media::INativeSpatializerCallback> callback;
bool levelChanged = false;
{
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
levelChanged = mLevel != level;
mLevel = level;
callback = mSpatializerCallback;
@@ -551,7 +551,7 @@
if (level == nullptr) {
return binderStatusFromStatusT(BAD_VALUE);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
*level = mLevel;
ALOGV("%s level %d", __func__, (int)*level);
return Status::ok();
@@ -562,14 +562,14 @@
if (supports == nullptr) {
return binderStatusFromStatusT(BAD_VALUE);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
*supports = mSupportsHeadTracking;
return Status::ok();
}
Status Spatializer::getSupportedHeadTrackingModes(
std::vector<HeadTracking::Mode>* modes) {
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
ALOGV("%s", __func__);
if (modes == nullptr) {
return binderStatusFromStatusT(BAD_VALUE);
@@ -585,7 +585,7 @@
return binderStatusFromStatusT(INVALID_OPERATION);
}
mLocalLog.log("%s with %s", __func__, ToString(mode).c_str());
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
switch (mode) {
case HeadTracking::Mode::OTHER:
return binderStatusFromStatusT(BAD_VALUE);
@@ -610,7 +610,7 @@
if (mode == nullptr) {
return binderStatusFromStatusT(BAD_VALUE);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
*mode = mActualHeadTrackingMode;
ALOGV("%s mode %d", __func__, (int)*mode);
return Status::ok();
@@ -620,7 +620,7 @@
if (!mSupportsHeadTracking) {
return binderStatusFromStatusT(INVALID_OPERATION);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (mPoseController != nullptr) {
mPoseController->recenter();
}
@@ -637,7 +637,7 @@
ALOGW("Invalid screenToStage vector.");
return binderStatusFromStatusT(BAD_VALUE);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (mPoseController != nullptr) {
mLocalLog.log("%s with screenToStage %s", __func__,
media::VectorRecorder::toString<float>(screenToStage).c_str());
@@ -650,7 +650,7 @@
ALOGV("%s", __func__);
bool levelChanged = false;
{
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (mSpatializerCallback == nullptr) {
return binderStatusFromStatusT(INVALID_OPERATION);
}
@@ -674,7 +674,7 @@
if (!mSupportsHeadTracking) {
return binderStatusFromStatusT(INVALID_OPERATION);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (mHeadSensor != sensorHandle) {
mLocalLog.log("%s with 0x%08x", __func__, sensorHandle);
mHeadSensor = sensorHandle;
@@ -689,7 +689,7 @@
if (!mSupportsHeadTracking) {
return binderStatusFromStatusT(INVALID_OPERATION);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (mScreenSensor != sensorHandle) {
mLocalLog.log("%s with 0x%08x", __func__, sensorHandle);
mScreenSensor = sensorHandle;
@@ -708,7 +708,7 @@
// It is possible due to numerical inaccuracies to exceed the boundaries of 0 to 2 * M_PI.
ALOGI_IF(angle != physicalToLogicalAngle,
"%s: clamping %f to %f", __func__, physicalToLogicalAngle, angle);
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
mDisplayOrientation = angle;
if (mPoseController != nullptr) {
// This turns on the rate-limiter.
@@ -728,7 +728,7 @@
// It is possible due to numerical inaccuracies to exceed the boundaries of 0 to 2 * M_PI.
ALOGI_IF(angle != hingeAngle,
"%s: clamping %f to %f", __func__, hingeAngle, angle);
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
mHingeAngle = angle;
if (mEngine != nullptr) {
setEffectParameter_l(SPATIALIZER_PARAM_HINGE_ANGLE, std::vector<float>{angle});
@@ -739,7 +739,7 @@
Status Spatializer::setFoldState(bool folded) {
ALOGV("%s foldState %d", __func__, (int)folded);
mLocalLog.log("%s with %d", __func__, (int)folded);
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
mFoldedState = folded;
if (mEngine != nullptr) {
// we don't suppress multiple calls with the same folded state - that's
@@ -761,7 +761,7 @@
Status Spatializer::registerHeadTrackingCallback(
const sp<media::ISpatializerHeadTrackingCallback>& callback) {
ALOGV("%s callback %p", __func__, callback.get());
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (!mSupportsHeadTracking) {
return binderStatusFromStatusT(INVALID_OPERATION);
}
@@ -771,7 +771,7 @@
Status Spatializer::setParameter(int key, const std::vector<unsigned char>& value) {
ALOGV("%s key %d", __func__, key);
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
status_t status = INVALID_OPERATION;
if (mEngine != nullptr) {
status = setEffectParameter_l(key, value);
@@ -785,7 +785,7 @@
if (value == nullptr) {
return binderStatusFromStatusT(BAD_VALUE);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
status_t status = INVALID_OPERATION;
if (mEngine != nullptr) {
ALOGV("%s key %d mEngine %p", __func__, key, mEngine.get());
@@ -799,7 +799,7 @@
if (output == nullptr) {
binderStatusFromStatusT(BAD_VALUE);
}
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
*output = VALUE_OR_RETURN_BINDER_STATUS(legacy2aidl_audio_io_handle_t_int32_t(mOutput));
ALOGV("%s got output %d", __func__, *output);
return Status::ok();
@@ -837,7 +837,7 @@
ALOGV("%s", __func__);
sp<media::ISpatializerHeadTrackingCallback> callback;
{
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
callback = mHeadTrackingCallback;
if (mEngine != nullptr) {
setEffectParameter_l(SPATIALIZER_PARAM_HEAD_TO_STAGE, headToStage);
@@ -865,7 +865,7 @@
sp<media::ISpatializerHeadTrackingCallback> callback;
HeadTracking::Mode spatializerMode;
{
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (!mSupportsHeadTracking) {
spatializerMode = HeadTracking::Mode::DISABLED;
} else {
@@ -932,7 +932,7 @@
sp<media::INativeSpatializerCallback> callback;
{
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
ALOGV("%s output %d mOutput %d", __func__, (int)output, (int)mOutput);
mLocalLog.log("%s with output %d tracks %zu (mOutput %d)", __func__, (int)output,
numActiveTracks, (int)mOutput);
@@ -998,7 +998,7 @@
sp<media::INativeSpatializerCallback> callback;
{
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
mLocalLog.log("%s with output %d tracks %zu", __func__, (int)mOutput, mNumActiveTracks);
ALOGV("%s mOutput %d", __func__, (int)mOutput);
if (mOutput == AUDIO_IO_HANDLE_NONE) {
@@ -1032,7 +1032,7 @@
void Spatializer::onSupportedLatencyModesChangedMsg(
audio_io_handle_t output, std::vector<audio_latency_mode_t>&& modes) {
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
ALOGV("%s output %d mOutput %d num modes %zu",
__func__, (int)output, (int)mOutput, modes.size());
if (output == mOutput) {
@@ -1043,7 +1043,7 @@
}
void Spatializer::updateActiveTracks(size_t numActiveTracks) {
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (mNumActiveTracks != numActiveTracks) {
mLocalLog.log("%s from %zu to %zu", __func__, mNumActiveTracks, numActiveTracks);
mNumActiveTracks = numActiveTracks;
@@ -1174,7 +1174,7 @@
void Spatializer::calculateHeadPose() {
ALOGV("%s", __func__);
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
if (mPoseController != nullptr) {
mPoseController->calculateAsync();
}
@@ -1193,7 +1193,7 @@
bool needUnlock = false;
prefixSpace += ' ';
- if (!mLock.try_lock()) {
+ if (!mMutex.try_lock()) {
// dumpsys even try_lock failed, information dump can be useful although may not accurate
ss.append(prefixSpace).append("try_lock failed, dumpsys below maybe INACCURATE!\n");
} else {
@@ -1258,7 +1258,7 @@
}
if (needUnlock) {
- mLock.unlock();
+ mMutex.unlock();
}
return ss;
}
diff --git a/services/audiopolicy/service/Spatializer.h b/services/audiopolicy/service/Spatializer.h
index 123517e..24788dc 100644
--- a/services/audiopolicy/service/Spatializer.h
+++ b/services/audiopolicy/service/Spatializer.h
@@ -23,6 +23,7 @@
#include <android/media/audio/common/AudioLatencyMode.h>
#include <android/media/audio/common/HeadTracking.h>
#include <android/media/audio/common/Spatialization.h>
+#include <audio_utils/mutex.h>
#include <audio_utils/SimpleLog.h>
#include <math.h>
#include <media/AudioEffect.h>
@@ -148,7 +149,7 @@
/** Level getter for use by local classes. */
media::audio::common::Spatialization::Level getLevel() const {
- std::lock_guard lock(mLock);
+ audio_utils::lock_guard lock(mMutex);
return mLevel;
}
@@ -161,7 +162,7 @@
*/
audio_io_handle_t detachOutput();
/** Returns the output stream the spatializer is attached to. */
- audio_io_handle_t getOutput() const { std::lock_guard lock(mLock); return mOutput; }
+ audio_io_handle_t getOutput() const { audio_utils::lock_guard lock(mMutex); return mOutput; }
void updateActiveTracks(size_t numActiveTracks);
@@ -261,7 +262,7 @@
* according to values vector size.
*/
template<typename T>
- status_t setEffectParameter_l(uint32_t type, const std::vector<T>& values) REQUIRES(mLock) {
+ status_t setEffectParameter_l(uint32_t type, const std::vector<T>& values) REQUIRES(mMutex) {
static_assert(sizeof(T) <= sizeof(uint32_t), "The size of T must less than 32 bits");
uint32_t cmd[sizeof(effect_param_t) / sizeof(uint32_t) + 1 + values.size()];
@@ -286,7 +287,7 @@
* The variant is for compound parameters with two values of different base types
*/
template<typename P1, typename P2>
- status_t setEffectParameter_l(uint32_t type, const P1 val1, const P2 val2) REQUIRES(mLock) {
+ status_t setEffectParameter_l(uint32_t type, const P1 val1, const P2 val2) REQUIRES(mMutex) {
static_assert(sizeof(P1) <= sizeof(uint32_t), "The size of P1 must less than 32 bits");
static_assert(sizeof(P2) <= sizeof(uint32_t), "The size of P2 must less than 32 bits");
@@ -314,7 +315,7 @@
* by specifying values vector size.
*/
template<typename T>
- status_t getEffectParameter_l(uint32_t type, std::vector<T> *values) REQUIRES(mLock) {
+ status_t getEffectParameter_l(uint32_t type, std::vector<T> *values) REQUIRES(mMutex) {
static_assert(sizeof(T) <= sizeof(uint32_t), "The size of T must less than 32 bits");
uint32_t cmd[sizeof(effect_param_t) / sizeof(uint32_t) + 1 + values->size()];
@@ -345,7 +346,7 @@
* The variant is for compound parameters with two values of different base types
*/
template<typename P1, typename P2>
- status_t getEffectParameter_l(uint32_t type, P1 *val1, P2 *val2) REQUIRES(mLock) {
+ status_t getEffectParameter_l(uint32_t type, P1 *val1, P2 *val2) REQUIRES(mMutex) {
static_assert(sizeof(P1) <= sizeof(uint32_t), "The size of P1 must less than 32 bits");
static_assert(sizeof(P2) <= sizeof(uint32_t), "The size of P2 must less than 32 bits");
@@ -375,25 +376,25 @@
* spatializer state and playback activity and configures the pose controller
* accordingly.
*/
- void checkSensorsState_l() REQUIRES(mLock);
+ void checkSensorsState_l() REQUIRES(mMutex);
/**
* Checks if the head pose controller should be created or destroyed according
* to desired head tracking mode.
*/
- void checkPoseController_l() REQUIRES(mLock);
+ void checkPoseController_l() REQUIRES(mMutex);
/**
* Checks if the spatializer effect should be enabled based on
* playback activity and requested level.
*/
- void checkEngineState_l() REQUIRES(mLock);
+ void checkEngineState_l() REQUIRES(mMutex);
/**
* Reset head tracking mode and recenter pose in engine: Called when the head tracking
* is disabled.
*/
- void resetEngineHeadPose_l() REQUIRES(mLock);
+ void resetEngineHeadPose_l() REQUIRES(mMutex);
/** Read bluetooth.core.le.dsa_transport_preference property and populate the ordered list of
* preferred low latency modes in mOrderedLowLatencyModes.
@@ -406,7 +407,7 @@
* Note: Because MODE_FREE is not in mOrderedLowLatencyModes, it will always be at
* the end of the list.
*/
- void sortSupportedLatencyModes_l() REQUIRES(mLock);
+ void sortSupportedLatencyModes_l() REQUIRES(mMutex);
/**
* Called after enabling head tracking in the spatializer engine to indicate which
@@ -415,14 +416,14 @@
* When the connection mode is direct to the sensor, the sensor ID is also communicated
* to the spatializer engine.
*/
- void setEngineHeadtrackingConnectionMode_l() REQUIRES(mLock);
+ void setEngineHeadtrackingConnectionMode_l() REQUIRES(mMutex);
/**
* Select the desired head tracking connection mode for the spatializer engine among the list
* stored in mSupportedHeadtrackingConnectionModes at init time.
* Also returns the desired low latency mode according to selected connection mode.
*/
- audio_latency_mode_t selectHeadtrackingConnectionMode_l() REQUIRES(mLock);
+ audio_latency_mode_t selectHeadtrackingConnectionMode_l() REQUIRES(mMutex);
/** Effect engine descriptor */
const effect_descriptor_t mEngineDescriptor;
@@ -435,48 +436,48 @@
const std::string mMetricsId = kDefaultMetricsId;
/** Mutex protecting internal state */
- mutable std::mutex mLock;
+ mutable audio_utils::mutex mMutex{audio_utils::MutexOrder::kSpatializer_Mutex};
/** Client AudioEffect for the engine */
- sp<AudioEffect> mEngine GUARDED_BY(mLock);
+ sp<AudioEffect> mEngine GUARDED_BY(mMutex);
/** Output stream the spatializer mixer thread is attached to */
- audio_io_handle_t mOutput GUARDED_BY(mLock) = AUDIO_IO_HANDLE_NONE;
+ audio_io_handle_t mOutput GUARDED_BY(mMutex) = AUDIO_IO_HANDLE_NONE;
/** Callback interface to the client (AudioService) controlling this`Spatializer */
- sp<media::INativeSpatializerCallback> mSpatializerCallback GUARDED_BY(mLock);
+ sp<media::INativeSpatializerCallback> mSpatializerCallback GUARDED_BY(mMutex);
/** Callback interface for head tracking */
- sp<media::ISpatializerHeadTrackingCallback> mHeadTrackingCallback GUARDED_BY(mLock);
+ sp<media::ISpatializerHeadTrackingCallback> mHeadTrackingCallback GUARDED_BY(mMutex);
/** Requested spatialization level */
- media::audio::common::Spatialization::Level mLevel GUARDED_BY(mLock) =
+ media::audio::common::Spatialization::Level mLevel GUARDED_BY(mMutex) =
media::audio::common::Spatialization::Level::NONE;
/** Control logic for head-tracking, etc. */
- std::shared_ptr<SpatializerPoseController> mPoseController GUARDED_BY(mLock);
+ std::shared_ptr<SpatializerPoseController> mPoseController GUARDED_BY(mMutex);
/** Last requested head tracking mode */
- media::HeadTrackingMode mDesiredHeadTrackingMode GUARDED_BY(mLock)
+ media::HeadTrackingMode mDesiredHeadTrackingMode GUARDED_BY(mMutex)
= media::HeadTrackingMode::STATIC;
/** Last-reported actual head-tracking mode. */
- media::audio::common::HeadTracking::Mode mActualHeadTrackingMode GUARDED_BY(mLock)
+ media::audio::common::HeadTracking::Mode mActualHeadTrackingMode GUARDED_BY(mMutex)
= media::audio::common::HeadTracking::Mode::DISABLED;
/** Selected Head pose sensor */
- int32_t mHeadSensor GUARDED_BY(mLock) = SpatializerPoseController::INVALID_SENSOR;
+ int32_t mHeadSensor GUARDED_BY(mMutex) = SpatializerPoseController::INVALID_SENSOR;
/** Selected Screen pose sensor */
- int32_t mScreenSensor GUARDED_BY(mLock) = SpatializerPoseController::INVALID_SENSOR;
+ int32_t mScreenSensor GUARDED_BY(mMutex) = SpatializerPoseController::INVALID_SENSOR;
/** Last display orientation received */
- float mDisplayOrientation GUARDED_BY(mLock) = 0.f; // aligned to natural up orientation.
+ float mDisplayOrientation GUARDED_BY(mMutex) = 0.f; // aligned to natural up orientation.
/** Last folded state */
- bool mFoldedState GUARDED_BY(mLock) = false; // foldable: true means folded.
+ bool mFoldedState GUARDED_BY(mMutex) = false; // foldable: true means folded.
/** Last hinge angle */
- float mHingeAngle GUARDED_BY(mLock) = 0.f; // foldable: 0.f is closed, M_PI flat open.
+ float mHingeAngle GUARDED_BY(mMutex) = 0.f; // foldable: 0.f is closed, M_PI flat open.
std::vector<media::audio::common::Spatialization::Level> mLevels;
std::vector<media::audio::common::HeadTracking::Mode> mHeadTrackingModes;
@@ -497,8 +498,8 @@
sp<ALooper> mLooper;
sp<EngineCallbackHandler> mHandler;
- size_t mNumActiveTracks GUARDED_BY(mLock) = 0;
- std::vector<audio_latency_mode_t> mSupportedLatencyModes GUARDED_BY(mLock);
+ size_t mNumActiveTracks GUARDED_BY(mMutex) = 0;
+ std::vector<audio_latency_mode_t> mSupportedLatencyModes GUARDED_BY(mMutex);
/** preference order for low latency modes according to persist.bluetooth.hid.transport */
std::vector<audio_latency_mode_t> mOrderedLowLatencyModes;
/** string to latency mode map used to parse bluetooth.core.le.dsa_transport_preference */
@@ -514,10 +515,10 @@
* Dump to local log with max/average pose angle every mPoseRecordThreshold.
*/
// Record one log line per second (up to mMaxLocalLogLine) to capture most recent sensor data.
- media::VectorRecorder mPoseRecorder GUARDED_BY(mLock) {
+ media::VectorRecorder mPoseRecorder GUARDED_BY(mMutex) {
6 /* vectorSize */, std::chrono::seconds(1), mMaxLocalLogLine, { 3 } /* delimiterIdx */};
// Record one log line per minute (up to mMaxLocalLogLine) to capture durable sensor data.
- media::VectorRecorder mPoseDurableRecorder GUARDED_BY(mLock) {
+ media::VectorRecorder mPoseDurableRecorder GUARDED_BY(mMutex) {
6 /* vectorSize */, std::chrono::minutes(1), mMaxLocalLogLine, { 3 } /* delimiterIdx */};
}; // Spatializer