From 1a65ce5406bed4f6d677be7dc3d652654477ea75 Mon Sep 17 00:00:00 2001 From: zhanhang Date: Tue, 7 Nov 2023 22:12:54 +0800 Subject: [PATCH 1/2] fix bug for bluetooth volume Signed-off-by: zhanhang --- .../include/audio_policy_manager.h | 2 + .../native/audiocommon/include/audio_info.h | 3 +- .../client/include/audio_policy_base.h | 2 + .../include/audio_policy_manager_stub.h | 2 + .../client/include/audio_policy_proxy.h | 2 + .../client/src/audio_policy_manager.cpp | 10 ++++ .../client/src/audio_policy_proxy.cpp | 20 ++++++++ .../include/audio_policy_ipc_interface_code.h | 1 + .../server/include/audio_policy_server.h | 2 + .../include/service/audio_policy_service.h | 2 + .../interface/iaudio_policy_interface.h | 2 +- .../service/manager/audio_adapter_manager.h | 4 +- .../server/src/audio_policy_manager_stub.cpp | 6 +++ .../server/src/audio_policy_server.cpp | 5 ++ .../src/service/audio_policy_service.cpp | 51 ++++++++++++++++++- .../service/manager/audio_adapter_manager.cpp | 2 +- .../client/src/audio_service_client.cpp | 4 ++ 17 files changed, 113 insertions(+), 7 deletions(-) diff --git a/frameworks/native/audiopolicy/include/audio_policy_manager.h b/frameworks/native/audiopolicy/include/audio_policy_manager.h index cc9ba7fae9..55502db60a 100644 --- a/frameworks/native/audiopolicy/include/audio_policy_manager.h +++ b/frameworks/native/audiopolicy/include/audio_policy_manager.h @@ -250,6 +250,8 @@ public: int32_t SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support); + bool IsAbsVolumeScene(); + int32_t SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume, const bool updateUi); private: AudioPolicyManager() diff --git a/interfaces/inner_api/native/audiocommon/include/audio_info.h b/interfaces/inner_api/native/audiocommon/include/audio_info.h index 04b56f5eb4..08b355168a 100644 --- a/interfaces/inner_api/native/audiocommon/include/audio_info.h +++ b/interfaces/inner_api/native/audiocommon/include/audio_info.h @@ -246,8 +246,9 @@ struct AudioParameters { struct A2dpDeviceConfigInfo { AudioStreamInfo streamInfo; - bool absVolumeSupport; + bool absVolumeSupport = false; int32_t volumeLevel; + bool mute = false; }; struct AudioRendererInfo { diff --git a/services/audio_policy/client/include/audio_policy_base.h b/services/audio_policy/client/include/audio_policy_base.h index c09cd09f8e..51fafef858 100644 --- a/services/audio_policy/client/include/audio_policy_base.h +++ b/services/audio_policy/client/include/audio_policy_base.h @@ -226,6 +226,8 @@ public: virtual int32_t SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support) = 0; + virtual bool IsAbsVolumeScene() = 0; + virtual int32_t SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume, bool updateUi) = 0; public: DECLARE_INTERFACE_DESCRIPTOR(u"IAudioPolicy"); diff --git a/services/audio_policy/client/include/audio_policy_manager_stub.h b/services/audio_policy/client/include/audio_policy_manager_stub.h index c2c2a6892a..1a2971639a 100644 --- a/services/audio_policy/client/include/audio_policy_manager_stub.h +++ b/services/audio_policy/client/include/audio_policy_manager_stub.h @@ -115,6 +115,7 @@ private: void GetAudioCapturerMicrophoneDescriptorsInternal(MessageParcel &data, MessageParcel &reply); void GetAvailableMicrophonesInternal(MessageParcel &data, MessageParcel &reply); void SetDeviceAbsVolumeSupportedInternal(MessageParcel &data, MessageParcel &reply); + void IsAbsVolumeSceneInternal(MessageParcel &data, MessageParcel &reply); void SetA2dpDeviceVolumeInternal(MessageParcel &data, MessageParcel &reply); void ReadStreamChangeInfo(MessageParcel &data, const AudioMode &mode, AudioStreamChangeInfo &streamChangeInfo); void WriteAudioFocusInfo(MessageParcel &data, @@ -211,6 +212,7 @@ private: &AudioPolicyManagerStub::GetAudioCapturerMicrophoneDescriptorsInternal, &AudioPolicyManagerStub::GetAvailableMicrophonesInternal, &AudioPolicyManagerStub::SetDeviceAbsVolumeSupportedInternal, + &AudioPolicyManagerStub::IsAbsVolumeSceneInternal, &AudioPolicyManagerStub::SetA2dpDeviceVolumeInternal, }; }; diff --git a/services/audio_policy/client/include/audio_policy_proxy.h b/services/audio_policy/client/include/audio_policy_proxy.h index 2d1ec9b66d..3f081c91fb 100644 --- a/services/audio_policy/client/include/audio_policy_proxy.h +++ b/services/audio_policy/client/include/audio_policy_proxy.h @@ -218,6 +218,8 @@ public: int32_t SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support) override; + bool IsAbsVolumeScene() override; + int32_t SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume, const bool updateUi) override; private: static inline BrokerDelegator mDdelegator; diff --git a/services/audio_policy/client/src/audio_policy_manager.cpp b/services/audio_policy/client/src/audio_policy_manager.cpp index 21b477749a..1d468633c3 100644 --- a/services/audio_policy/client/src/audio_policy_manager.cpp +++ b/services/audio_policy/client/src/audio_policy_manager.cpp @@ -1311,6 +1311,16 @@ int32_t AudioPolicyManager::SetDeviceAbsVolumeSupported(const std::string &macAd return gsp->SetDeviceAbsVolumeSupported(macAddress, support); } +bool AudioPolicyManager::IsAbsVolumeScene() +{ + const sptr gsp = GetAudioPolicyManagerProxy(); + if (gsp == nullptr) { + AUDIO_ERR_LOG("IsAbsVolumeScene: audio policy manager proxy is NULL."); + return ERROR; + } + return gsp->IsAbsVolumeScene(); +} + int32_t AudioPolicyManager::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume, const bool updateUi) { diff --git a/services/audio_policy/client/src/audio_policy_proxy.cpp b/services/audio_policy/client/src/audio_policy_proxy.cpp index e4f1a15479..d8267d0feb 100644 --- a/services/audio_policy/client/src/audio_policy_proxy.cpp +++ b/services/audio_policy/client/src/audio_policy_proxy.cpp @@ -2200,6 +2200,26 @@ int32_t AudioPolicyProxy::SetDeviceAbsVolumeSupported(const std::string &macAddr return reply.ReadInt32(); } +bool AudioPolicyProxy::IsAbsVolumeScene() +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!data.WriteInterfaceToken(GetDescriptor())) { + AUDIO_ERR_LOG(" IsAbsVolumeScene WriteInterfaceToken failed"); + return ERROR; + } + + int32_t error = Remote()->SendRequest( + static_cast(AudioPolicyInterfaceCode::GET_ABS_VOLUME_SCENE), data, reply, option); + if (error != ERR_NONE) { + AUDIO_ERR_LOG("IsAbsVolumeScene failed, error: %d", error); + return ERROR; + } + return reply.ReadBool(); +} + int32_t AudioPolicyProxy::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume, const bool updateUi) { diff --git a/services/audio_policy/common/include/audio_policy_ipc_interface_code.h b/services/audio_policy/common/include/audio_policy_ipc_interface_code.h index 9f4c8a77c5..0632439e5e 100644 --- a/services/audio_policy/common/include/audio_policy_ipc_interface_code.h +++ b/services/audio_policy/common/include/audio_policy_ipc_interface_code.h @@ -111,6 +111,7 @@ enum class AudioPolicyInterfaceCode { GET_AUDIO_CAPTURER_MICROPHONE_DESCRIPTORS, GET_AVAILABLE_MICROPHONE_DESCRIPTORS, SET_DEVICE_ABSOLUTE_VOLUME_SUPPORTED, + GET_ABS_VOLUME_SCENE, SET_A2DP_DEVICE_VOLUME, AUDIO_POLICY_MANAGER_CODE_MAX = SET_A2DP_DEVICE_VOLUME, }; diff --git a/services/audio_policy/server/include/audio_policy_server.h b/services/audio_policy/server/include/audio_policy_server.h index be12e8eb16..a7a56c83a0 100644 --- a/services/audio_policy/server/include/audio_policy_server.h +++ b/services/audio_policy/server/include/audio_policy_server.h @@ -289,6 +289,8 @@ public: int32_t SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support) override; + bool IsAbsVolumeScene() override; + int32_t SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume, const bool updateUi) override; class RemoteParameterCallback : public AudioParameterCallback { diff --git a/services/audio_policy/server/include/service/audio_policy_service.h b/services/audio_policy/server/include/service/audio_policy_service.h index cd328975cf..6297442705 100644 --- a/services/audio_policy/server/include/service/audio_policy_service.h +++ b/services/audio_policy/server/include/service/audio_policy_service.h @@ -309,6 +309,8 @@ public: int32_t SetDeviceAbsVolumeSupported(const std::string &macAddress, const bool support); + bool IsAbsVolumeScene() const; + int32_t SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume); void OnCapturerSessionAdded(uint64_t sessionID, SessionInfo sessionInfo); diff --git a/services/audio_policy/server/include/service/interface/iaudio_policy_interface.h b/services/audio_policy/server/include/service/interface/iaudio_policy_interface.h index adfd85b801..73e4317588 100644 --- a/services/audio_policy/server/include/service/interface/iaudio_policy_interface.h +++ b/services/audio_policy/server/include/service/interface/iaudio_policy_interface.h @@ -106,7 +106,7 @@ public: virtual void SetAbsVolumeScene(bool isAbsVolumeScene) = 0; - virtual bool GetAbsVolumeScene() const = 0; + virtual bool IsAbsVolumeScene() const = 0; virtual float GetSystemVolumeInDb(AudioVolumeType volumeType, int32_t volumeLevel, DeviceType deviceType) = 0; }; diff --git a/services/audio_policy/server/include/service/manager/audio_adapter_manager.h b/services/audio_policy/server/include/service/manager/audio_adapter_manager.h index b415481b39..758d104280 100644 --- a/services/audio_policy/server/include/service/manager/audio_adapter_manager.h +++ b/services/audio_policy/server/include/service/manager/audio_adapter_manager.h @@ -134,7 +134,7 @@ public: void SetAbsVolumeScene(bool isAbsVolumeScene); - bool GetAbsVolumeScene() const; + bool IsAbsVolumeScene() const; private: friend class PolicyCallbackImpl; @@ -248,7 +248,7 @@ public: return 0.0f; } - bool isAbsVolumeScene = audioAdapterManager_->GetAbsVolumeScene(); + bool isAbsVolumeScene = audioAdapterManager_->IsAbsVolumeScene(); DeviceType activeDevice = audioAdapterManager_->GetActiveDevice(); if (activeDevice == DEVICE_TYPE_BLUETOOTH_A2DP && isAbsVolumeScene) { return 1.0f; diff --git a/services/audio_policy/server/src/audio_policy_manager_stub.cpp b/services/audio_policy/server/src/audio_policy_manager_stub.cpp index b873e2ad61..efa91f6527 100644 --- a/services/audio_policy/server/src/audio_policy_manager_stub.cpp +++ b/services/audio_policy/server/src/audio_policy_manager_stub.cpp @@ -1000,6 +1000,12 @@ void AudioPolicyManagerStub::SetDeviceAbsVolumeSupportedInternal(MessageParcel & reply.WriteInt32(result); } +void AudioPolicyManagerStub::IsAbsVolumeSceneInternal(MessageParcel &data, MessageParcel &reply) +{ + bool result = IsAbsVolumeScene(); + reply.WriteBool(result); +} + void AudioPolicyManagerStub::SetA2dpDeviceVolumeInternal(MessageParcel &data, MessageParcel &reply) { std::string macAddress = data.ReadString(); diff --git a/services/audio_policy/server/src/audio_policy_server.cpp b/services/audio_policy/server/src/audio_policy_server.cpp index 6d3c96f46c..41cb37d9df 100644 --- a/services/audio_policy/server/src/audio_policy_server.cpp +++ b/services/audio_policy/server/src/audio_policy_server.cpp @@ -2556,6 +2556,11 @@ int32_t AudioPolicyServer::SetDeviceAbsVolumeSupported(const std::string &macAdd return audioPolicyService_.SetDeviceAbsVolumeSupported(macAddress, support); } +bool AudioPolicyServer::IsAbsVolumeScene() +{ + return audioPolicyService_.IsAbsVolumeScene(); +} + int32_t AudioPolicyServer::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volume, const bool updateUi) { diff --git a/services/audio_policy/server/src/service/audio_policy_service.cpp b/services/audio_policy/server/src/service/audio_policy_service.cpp index 5915f076c2..7ac1a6bd3a 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -237,12 +237,14 @@ int32_t AudioPolicyService::SetSystemVolumeLevel(AudioStreamType streamType, int // its absolute volume value. if (streamType == STREAM_MUSIC && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { result = SetA2dpDeviceVolume(activeBTDevice_, volumeLevel); +#ifdef BLUETOOTH_ENABLE if (result == SUCCESS) { // set to avrcp device return Bluetooth::AudioA2dpManager::SetDeviceAbsVolume(activeBTDevice_, volumeLevel); } else { AUDIO_ERR_LOG("AudioPolicyService::SetSystemVolumeLevel set abs volume failed"); } +#endif } result = audioPolicyManager_.SetSystemVolumeLevel(streamType, volumeLevel, isFromVolumeKey); @@ -322,7 +324,7 @@ int32_t AudioPolicyService::GetSystemVolumeLevel(AudioStreamType streamType, boo auto configInfoPos = connectedA2dpDeviceMap_.find(activeBTDevice_); if (configInfoPos != connectedA2dpDeviceMap_.end() && configInfoPos->second.absVolumeSupport) { - return configInfoPos->second.volumeLevel; + return configInfoPos->second.mute ? 0 : configInfoPos->second.volumeLevel; } else { AUDIO_ERR_LOG("Get absolute volume failed for activeBTDevice :[%{public}s]", activeBTDevice_.c_str()); } @@ -353,7 +355,28 @@ float AudioPolicyService::GetSingleStreamVolume(int32_t streamId) const int32_t AudioPolicyService::SetStreamMute(AudioStreamType streamType, bool mute) { - int32_t result = audioPolicyManager_.SetStreamMute(streamType, mute); + int32_t result = SUCCESS; + // if current active device's type is DEVICE_TYPE_BLUETOOTH_A2DP and it support absolute volume, set + // its absolute volume value. + if (streamType == STREAM_MUSIC && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { + std::lock_guard lock(a2dpDeviceMapMutex_); + auto configInfoPos = connectedA2dpDeviceMap_.find(activeBTDevice_); + if (configInfoPos == connectedA2dpDeviceMap_.end() || !configInfoPos->second.absVolumeSupport) { + AUDIO_WARNING_LOG("SetStreamMute failed for macAddress:[%{public}s]", activeBTDevice_.c_str()); + } else { + configInfoPos->second.mute = mute; +#ifdef BLUETOOTH_ENABLE + // set to avrcp device + if (mute) { + return Bluetooth::AudioA2dpManager::SetDeviceAbsVolume(activeBTDevice_, 0); + } else { + return Bluetooth::AudioA2dpManager::SetDeviceAbsVolume(activeBTDevice_, + configInfoPos->second.volumeLevel); + } +#endif + } + } + result = audioPolicyManager_.SetStreamMute(streamType, mute); Volume vol = {false, 1.0f, 0}; vol.isMute = mute; @@ -375,6 +398,15 @@ int32_t AudioPolicyService::SetSourceOutputStreamMute(int32_t uid, bool setMute) bool AudioPolicyService::GetStreamMute(AudioStreamType streamType) const { + if (streamType == STREAM_MUSIC && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { + std::lock_guard lock(a2dpDeviceMapMutex_); + auto configInfoPos = connectedA2dpDeviceMap_.find(activeBTDevice_); + if (configInfoPos == connectedA2dpDeviceMap_.end() || !configInfoPos->second.absVolumeSupport) { + AUDIO_WARNING_LOG("GetStreamMute failed for macAddress:[%{public}s]", activeBTDevice_.c_str()); + } else { + return configInfoPos->second.mute; + } + } return audioPolicyManager_.GetStreamMute(streamType); } @@ -2278,6 +2310,7 @@ void AudioPolicyService::UpdateActiveA2dpDeviceWhenDisconnecting(const std::stri audioPolicyManager_.CloseAudioPort(IOHandles_[BLUETOOTH_SPEAKER]); IOHandles_.erase(BLUETOOTH_SPEAKER); } + audioPolicyManager_.SetAbsVolumeScene(false); return; } @@ -2287,12 +2320,18 @@ void AudioPolicyService::UpdateActiveA2dpDeviceWhenDisconnecting(const std::stri AUDIO_INFO_LOG("HandleLocalDeviceDisconnected: The active a2dp device is disconnecting"); isActiveA2dpDevice = true; activeBTDevice_ = (connectedA2dpDeviceMap_.begin())->first; + A2dpDeviceConfigInfo configInfo = (connectedA2dpDeviceMap_.begin())->second; + if (configInfo.absVolumeSupport) { + audioPolicyManager_.SetAbsVolumeScene(true); + } + #ifdef BLUETOOTH_ENABLE Bluetooth::AudioA2dpManager::SetActiveA2dpDevice(activeBTDevice_); #endif } else { // The disconnecting a2dp device is not active. AUDIO_INFO_LOG("The disconnecting a2dp device is not active. No need to update active device"); + audioPolicyManager_.SetAbsVolumeScene(false); isActiveA2dpDevice = false; } } @@ -3646,6 +3685,11 @@ int32_t AudioPolicyService::SetDeviceAbsVolumeSupported(const std::string &macAd return SUCCESS; } +bool AudioPolicyService::IsAbsVolumeScene() const +{ + return audioPolicyManager_.IsAbsVolumeScene(); +} + int32_t AudioPolicyService::SetA2dpDeviceVolume(const std::string &macAddress, const int32_t volumeLevel) { std::lock_guard lock(a2dpDeviceMapMutex_); @@ -3655,6 +3699,9 @@ int32_t AudioPolicyService::SetA2dpDeviceVolume(const std::string &macAddress, c return ERROR; } configInfoPos->second.volumeLevel = volumeLevel; + if (volumeLevel > 0) { + configInfoPos->second.mute = false; + } AUDIO_INFO_LOG("SetA2dpDeviceVolume success for macaddress:[%{public}s], volume value:[%{public}d]", macAddress.c_str(), volumeLevel); return SUCCESS; diff --git a/services/audio_policy/server/src/service/manager/audio_adapter_manager.cpp b/services/audio_policy/server/src/service/manager/audio_adapter_manager.cpp index 7f775af826..32f75e487d 100644 --- a/services/audio_policy/server/src/service/manager/audio_adapter_manager.cpp +++ b/services/audio_policy/server/src/service/manager/audio_adapter_manager.cpp @@ -1400,7 +1400,7 @@ void AudioAdapterManager::SetAbsVolumeScene(bool isAbsVolumeScene) isAbsVolumeScene_ = isAbsVolumeScene; } -bool AudioAdapterManager::GetAbsVolumeScene() const +bool AudioAdapterManager::IsAbsVolumeScene() const { return isAbsVolumeScene_; } diff --git a/services/audio_service/client/src/audio_service_client.cpp b/services/audio_service/client/src/audio_service_client.cpp index 495fc7df37..3448282b93 100644 --- a/services/audio_service/client/src/audio_service_client.cpp +++ b/services/audio_service/client/src/audio_service_client.cpp @@ -2288,8 +2288,12 @@ void AudioServiceClient::SetPaVolume(const AudioServiceClient &client) AudioVolumeType volumeType = GetVolumeTypeFromStreamType(client.streamType_); int32_t systemVolumeLevel = AudioSystemManager::GetInstance()->GetVolume(volumeType); DeviceType deviceType = AudioSystemManager::GetInstance()->GetActiveOutputDevice(); + bool isAbsVolumeScene = AudioPolicyManager::GetInstance().IsAbsVolumeScene(); float systemVolumeDb = AudioPolicyManager::GetInstance().GetSystemVolumeInDb(volumeType, systemVolumeLevel, deviceType); + if (isAbsVolumeScene && client.streamType_ == STREAM_MUSIC) { + systemVolumeDb = 1.0f; // Transfer raw pcm data to bluetooth device + } float vol = systemVolumeDb * client.volumeFactor_ * client.powerVolumeFactor_ * client.duckVolumeFactor_; uint32_t volume = pa_sw_volume_from_linear(vol); -- Gitee From 91c63ec492240e2b84fff12f50bc461b993cd041 Mon Sep 17 00:00:00 2001 From: zhanhang Date: Sat, 11 Nov 2023 16:08:24 +0800 Subject: [PATCH 2/2] haha Signed-off-by: zhanhang --- .../server/src/audio_policy_server.cpp | 14 +++++++++++--- .../server/src/service/audio_policy_service.cpp | 9 +++++---- .../client/src/audio_service_client.cpp | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/services/audio_policy/server/src/audio_policy_server.cpp b/services/audio_policy/server/src/audio_policy_server.cpp index 41cb37d9df..5ea33c55e1 100644 --- a/services/audio_policy/server/src/audio_policy_server.cpp +++ b/services/audio_policy/server/src/audio_policy_server.cpp @@ -2569,8 +2569,16 @@ int32_t AudioPolicyServer::SetA2dpDeviceVolume(const std::string &macAddress, co AUDIO_ERR_LOG("SetA2dpDeviceVolume: Error caller uid: %{public}d", callerUid); return ERROR; } - AudioStreamType streamType = STREAM_MUSIC; - if (!IsVolumeLevelValid(streamType, volume)) { + + AudioStreamType streamInFocus = AudioStreamType::STREAM_MUSIC; // use STREAM_MUSIC as default stream type + if ((audioPolicyService_.GetLocalDevicesType().compare("tablet") == 0) || + (audioPolicyService_.GetLocalDevicesType().compare("2in1") == 0)) { + streamInFocus = AudioStreamType::STREAM_ALL; + } else { + streamInFocus = GetVolumeTypeFromStreamType(GetStreamInFocus()); + } + + if (!IsVolumeLevelValid(streamInFocus, volume)) { return ERR_NOT_SUPPORTED; } int32_t ret = audioPolicyService_.SetA2dpDeviceVolume(macAddress, volume); @@ -2584,7 +2592,7 @@ int32_t AudioPolicyServer::SetA2dpDeviceVolume(const std::string &macAddress, co AUDIO_DEBUG_LOG("SetA2dpDeviceVolume trigger volumeChangeCb clientPid : %{public}d", it->first); VolumeEvent volumeEvent; - volumeEvent.volumeType = streamType; + volumeEvent.volumeType = streamInFocus; volumeEvent.volume = volume; volumeEvent.updateUi = updateUi; volumeEvent.volumeGroupId = 0; diff --git a/services/audio_policy/server/src/service/audio_policy_service.cpp b/services/audio_policy/server/src/service/audio_policy_service.cpp index 7ac1a6bd3a..c6233e5f09 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -235,7 +235,8 @@ int32_t AudioPolicyService::SetSystemVolumeLevel(AudioStreamType streamType, int int32_t result = SUCCESS; // if current active device's type is DEVICE_TYPE_BLUETOOTH_A2DP and it support absolute volume, set // its absolute volume value. - if (streamType == STREAM_MUSIC && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { + + if (IsStreamActive(streamType) && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { result = SetA2dpDeviceVolume(activeBTDevice_, volumeLevel); #ifdef BLUETOOTH_ENABLE if (result == SUCCESS) { @@ -320,7 +321,7 @@ int32_t AudioPolicyService::GetSystemVolumeLevel(AudioStreamType streamType, boo // if current active device's type is DEVICE_TYPE_BLUETOOTH_A2DP and it support absolute volume, get // its absolute volume value. std::lock_guard lock(a2dpDeviceMapMutex_); - if (streamType == STREAM_MUSIC && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { + if (IsStreamActive(streamType) && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { auto configInfoPos = connectedA2dpDeviceMap_.find(activeBTDevice_); if (configInfoPos != connectedA2dpDeviceMap_.end() && configInfoPos->second.absVolumeSupport) { @@ -358,7 +359,7 @@ int32_t AudioPolicyService::SetStreamMute(AudioStreamType streamType, bool mute) int32_t result = SUCCESS; // if current active device's type is DEVICE_TYPE_BLUETOOTH_A2DP and it support absolute volume, set // its absolute volume value. - if (streamType == STREAM_MUSIC && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { + if (IsStreamActive(streamType) && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { std::lock_guard lock(a2dpDeviceMapMutex_); auto configInfoPos = connectedA2dpDeviceMap_.find(activeBTDevice_); if (configInfoPos == connectedA2dpDeviceMap_.end() || !configInfoPos->second.absVolumeSupport) { @@ -398,7 +399,7 @@ int32_t AudioPolicyService::SetSourceOutputStreamMute(int32_t uid, bool setMute) bool AudioPolicyService::GetStreamMute(AudioStreamType streamType) const { - if (streamType == STREAM_MUSIC && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { + if (IsStreamActive(streamType) && currentActiveDevice_.deviceType_ == DEVICE_TYPE_BLUETOOTH_A2DP) { std::lock_guard lock(a2dpDeviceMapMutex_); auto configInfoPos = connectedA2dpDeviceMap_.find(activeBTDevice_); if (configInfoPos == connectedA2dpDeviceMap_.end() || !configInfoPos->second.absVolumeSupport) { diff --git a/services/audio_service/client/src/audio_service_client.cpp b/services/audio_service/client/src/audio_service_client.cpp index 3448282b93..74fb7f89bb 100644 --- a/services/audio_service/client/src/audio_service_client.cpp +++ b/services/audio_service/client/src/audio_service_client.cpp @@ -2291,7 +2291,7 @@ void AudioServiceClient::SetPaVolume(const AudioServiceClient &client) bool isAbsVolumeScene = AudioPolicyManager::GetInstance().IsAbsVolumeScene(); float systemVolumeDb = AudioPolicyManager::GetInstance().GetSystemVolumeInDb(volumeType, systemVolumeLevel, deviceType); - if (isAbsVolumeScene && client.streamType_ == STREAM_MUSIC) { + if (isAbsVolumeScene) { systemVolumeDb = 1.0f; // Transfer raw pcm data to bluetooth device } float vol = systemVolumeDb * client.volumeFactor_ * client.powerVolumeFactor_ * client.duckVolumeFactor_; -- Gitee