diff --git a/interfaces/inner_api/native/audiocommon/include/audio_info.h b/interfaces/inner_api/native/audiocommon/include/audio_info.h index 8a4a39a27efe00d7c6769e934fac75e5ddd37317..683278e9ea7398692d9e2fddd0e2861baa52fcad 100644 --- a/interfaces/inner_api/native/audiocommon/include/audio_info.h +++ b/interfaces/inner_api/native/audiocommon/include/audio_info.h @@ -957,6 +957,43 @@ struct SourceInfo { uint32_t channels_; }; +/** + * @brief Device group used by set/get volume. + */ +enum DeviceGroup { + /** Invalid device group */ + DEVICE_GROUP_INVALID = -1, + /** Built in device */ + DEVICE_GROUP_BUILT_IN, + /** Wired device */ + DEVICE_GROUP_WIRED, + /** Wireless device */ + DEVICE_GROUP_WIRELESS, + /** Remote cast device */ + DEVICE_GROUP_REMOTE_CAST, +}; + +static const std::map DEVICE_GROUP_FOR_VOLUME = { + {DEVICE_TYPE_EARPIECE, DEVICE_GROUP_BUILT_IN}, + {DEVICE_TYPE_SPEAKER, DEVICE_GROUP_BUILT_IN}, + {DEVICE_TYPE_WIRED_HEADSET, DEVICE_GROUP_WIRED}, + {DEVICE_TYPE_USB_HEADSET, DEVICE_GROUP_WIRED}, + {DEVICE_TYPE_USB_ARM_HEADSET, DEVICE_GROUP_WIRED}, + {DEVICE_TYPE_DP, DEVICE_GROUP_WIRED}, + {DEVICE_TYPE_BLUETOOTH_A2DP, DEVICE_GROUP_WIRELESS}, + {DEVICE_TYPE_BLUETOOTH_SCO, DEVICE_GROUP_WIRELESS}, + {DEVICE_TYPE_REMOTE_CAST, DEVICE_GROUP_REMOTE_CAST}, +}; + +static inline DeviceGroup GetVolumeGroupForDevice(DeviceType deviceType) +{ + auto it = DEVICE_GROUP_FOR_VOLUME.find(deviceType); + if (it == DEVICE_GROUP_FOR_VOLUME.end()) { + return DEVICE_GROUP_INVALID; + } + return it->second; +} + enum RouterType { /** * None router. 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 eeee66c6db2a0b52652cc4c4d50d7325cc3a6a15..231c69140dc2900ec22aac4b3b83f84e44525296 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 @@ -200,7 +200,6 @@ private: void InitVolumeMap(bool isFirstBoot); bool LoadVolumeMap(void); std::string GetVolumeKeyForKvStore(DeviceType deviceType, AudioStreamType streamType); - std::string GetVolumeGroupForDevice(DeviceType deviceType); void InitRingerMode(bool isFirstBoot); void InitMuteStatusMap(bool isFirstBoot); bool LoadMuteStatusMap(void); 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 0e4ea6efb7f8884e5cc692d75bfaf2504e193c18..0c58dedfa5ed736e10867b3d0c8995971e5f0351 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -5044,7 +5044,7 @@ bool AudioPolicyService::GetSharedVolume(AudioVolumeType streamType, DeviceType { CHECK_AND_RETURN_RET_LOG(volumeVector_ != nullptr, false, "Get shared memory failed!"); size_t index = 0; - if (!IPolicyProvider::GetVolumeIndex(streamType, deviceType, index) || + if (!IPolicyProvider::GetVolumeIndex(streamType, GetVolumeGroupForDevice(deviceType), index) || index >= IPolicyProvider::GetVolumeVectorSize()) { return false; } @@ -5058,7 +5058,7 @@ bool AudioPolicyService::SetSharedVolume(AudioVolumeType streamType, DeviceType { CHECK_AND_RETURN_RET_LOG(volumeVector_ != nullptr, false, "Set shared memory failed!"); size_t index = 0; - if (!IPolicyProvider::GetVolumeIndex(streamType, deviceType, index) || + if (!IPolicyProvider::GetVolumeIndex(streamType, GetVolumeGroupForDevice(deviceType), index) || index >= IPolicyProvider::GetVolumeVectorSize()) { return false; } 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 0492cf112315ee63c0957c7f9b92d32c17c794dd..cc25e974a9abfb82c97601c97a8664cba3b71b5b 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 @@ -832,67 +832,41 @@ std::string AudioAdapterManager::GetModuleArgs(const AudioModuleInfo &audioModul std::string AudioAdapterManager::GetVolumeKeyForKvStore(DeviceType deviceType, AudioStreamType streamType) { - std::string type = GetVolumeGroupForDevice(deviceType); - CHECK_AND_RETURN_RET_LOG(type != "", type, "Device %{public}d is not supported for kvStore", deviceType); + DeviceGroup type = GetVolumeGroupForDevice(deviceType); + std::string typeStr = std::to_string(type); + CHECK_AND_RETURN_RET_LOG(type != DEVICE_GROUP_INVALID, typeStr, + "Device %{public}d is not supported for kvStore", deviceType); switch (streamType) { case STREAM_MUSIC: - return type + "_music_volume"; + return typeStr + "_music_volume"; case STREAM_RING: - return type + "_ring_volume"; + return typeStr + "_ring_volume"; case STREAM_SYSTEM: - return type + "_system_volume"; + return typeStr + "_system_volume"; case STREAM_NOTIFICATION: - return type + "_notification_volume"; + return typeStr + "_notification_volume"; case STREAM_ALARM: - return type + "_alarm_volume"; + return typeStr + "_alarm_volume"; case STREAM_DTMF: - return type + "_dtmf_volume"; + return typeStr + "_dtmf_volume"; case STREAM_VOICE_CALL: case STREAM_VOICE_COMMUNICATION: - return type + "_voice_call_volume"; + return typeStr + "_voice_call_volume"; case STREAM_VOICE_ASSISTANT: - return type + "_voice_assistant_volume"; + return typeStr + "_voice_assistant_volume"; case STREAM_ACCESSIBILITY: - return type + "_accessibility_volume"; + return typeStr + "_accessibility_volume"; case STREAM_ULTRASONIC: - return type + "_ultrasonic_volume"; + return typeStr + "_ultrasonic_volume"; case STREAM_WAKEUP: - return type + "wakeup"; + return typeStr + "wakeup"; default: AUDIO_ERR_LOG("GetVolumeKeyForKvStore: streamType %{public}d is not supported for kvStore", streamType); return ""; } } -std::string AudioAdapterManager::GetVolumeGroupForDevice(DeviceType deviceType) -{ - std::string volumeGroup = ""; - switch (deviceType) { - case DEVICE_TYPE_EARPIECE: - case DEVICE_TYPE_SPEAKER: - volumeGroup = "build-in"; - break; - case DEVICE_TYPE_BLUETOOTH_A2DP: - case DEVICE_TYPE_BLUETOOTH_SCO: - volumeGroup = "wireless"; - break; - case DEVICE_TYPE_WIRED_HEADSET: - case DEVICE_TYPE_USB_HEADSET: - case DEVICE_TYPE_USB_ARM_HEADSET: - case DEVICE_TYPE_DP: - volumeGroup = "wired"; - break; - case DEVICE_TYPE_REMOTE_CAST: - volumeGroup = "remote-cast"; - break; - default: - AUDIO_ERR_LOG("Device %{public}d is not invalid value for volume group", deviceType); - return ""; - } - return volumeGroup; -} - AudioStreamType AudioAdapterManager::GetStreamIDByType(std::string streamType) { AudioStreamType stream = STREAM_MUSIC; diff --git a/services/audio_service/common/include/i_policy_provider.h b/services/audio_service/common/include/i_policy_provider.h index 2f627025179f8d3ae95be314c04a2898b44e4b06..c2e192ca0c4ba66484f32e1706248cda39bf0995 100644 --- a/services/audio_service/common/include/i_policy_provider.h +++ b/services/audio_service/common/include/i_policy_provider.h @@ -25,47 +25,40 @@ namespace OHOS { namespace AudioStandard { namespace { - static const std::vector> g_volumeIndexVector = { - {STREAM_VOICE_CALL, DEVICE_TYPE_SPEAKER}, - {STREAM_VOICE_CALL, DEVICE_TYPE_WIRED_HEADSET}, - {STREAM_VOICE_CALL, DEVICE_TYPE_USB_HEADSET}, - {STREAM_VOICE_CALL, DEVICE_TYPE_WIRED_HEADPHONES}, - {STREAM_VOICE_CALL, DEVICE_TYPE_BLUETOOTH_A2DP}, - {STREAM_RING, DEVICE_TYPE_SPEAKER}, - {STREAM_RING, DEVICE_TYPE_WIRED_HEADSET}, - {STREAM_RING, DEVICE_TYPE_USB_HEADSET}, - {STREAM_RING, DEVICE_TYPE_WIRED_HEADPHONES}, - {STREAM_RING, DEVICE_TYPE_BLUETOOTH_A2DP}, - {STREAM_MUSIC, DEVICE_TYPE_SPEAKER}, - {STREAM_MUSIC, DEVICE_TYPE_WIRED_HEADSET}, - {STREAM_MUSIC, DEVICE_TYPE_USB_HEADSET}, - {STREAM_MUSIC, DEVICE_TYPE_WIRED_HEADPHONES}, - {STREAM_MUSIC, DEVICE_TYPE_BLUETOOTH_A2DP}, - {STREAM_VOICE_ASSISTANT, DEVICE_TYPE_SPEAKER}, - {STREAM_VOICE_ASSISTANT, DEVICE_TYPE_WIRED_HEADSET}, - {STREAM_VOICE_ASSISTANT, DEVICE_TYPE_USB_HEADSET}, - {STREAM_VOICE_ASSISTANT, DEVICE_TYPE_WIRED_HEADPHONES}, - {STREAM_VOICE_ASSISTANT, DEVICE_TYPE_BLUETOOTH_A2DP}, - {STREAM_ALARM, DEVICE_TYPE_SPEAKER}, - {STREAM_ALARM, DEVICE_TYPE_WIRED_HEADSET}, - {STREAM_ALARM, DEVICE_TYPE_USB_HEADSET}, - {STREAM_ALARM, DEVICE_TYPE_WIRED_HEADPHONES}, - {STREAM_ALARM, DEVICE_TYPE_BLUETOOTH_A2DP}, - {STREAM_ACCESSIBILITY, DEVICE_TYPE_SPEAKER}, - {STREAM_ACCESSIBILITY, DEVICE_TYPE_WIRED_HEADSET}, - {STREAM_ACCESSIBILITY, DEVICE_TYPE_USB_HEADSET}, - {STREAM_ACCESSIBILITY, DEVICE_TYPE_WIRED_HEADPHONES}, - {STREAM_ACCESSIBILITY, DEVICE_TYPE_BLUETOOTH_A2DP}, - {STREAM_ULTRASONIC, DEVICE_TYPE_SPEAKER}, - {STREAM_ULTRASONIC, DEVICE_TYPE_WIRED_HEADSET}, - {STREAM_ULTRASONIC, DEVICE_TYPE_USB_HEADSET}, - {STREAM_ULTRASONIC, DEVICE_TYPE_WIRED_HEADPHONES}, - {STREAM_ULTRASONIC, DEVICE_TYPE_BLUETOOTH_A2DP}, - {STREAM_ALL, DEVICE_TYPE_SPEAKER}, - {STREAM_ALL, DEVICE_TYPE_WIRED_HEADSET}, - {STREAM_ALL, DEVICE_TYPE_USB_HEADSET}, - {STREAM_ALL, DEVICE_TYPE_WIRED_HEADPHONES}, - {STREAM_ALL, DEVICE_TYPE_BLUETOOTH_A2DP}}; + static const std::vector> g_volumeIndexVector = { + {STREAM_VOICE_CALL, DEVICE_GROUP_BUILT_IN}, + {STREAM_VOICE_CALL, DEVICE_GROUP_WIRELESS}, + {STREAM_VOICE_CALL, DEVICE_GROUP_WIRED}, + {STREAM_VOICE_CALL, DEVICE_GROUP_REMOTE_CAST}, + {STREAM_RING, DEVICE_GROUP_BUILT_IN}, + {STREAM_RING, DEVICE_GROUP_WIRELESS}, + {STREAM_RING, DEVICE_GROUP_WIRED}, + {STREAM_RING, DEVICE_GROUP_REMOTE_CAST}, + {STREAM_MUSIC, DEVICE_GROUP_BUILT_IN}, + {STREAM_MUSIC, DEVICE_GROUP_WIRELESS}, + {STREAM_MUSIC, DEVICE_GROUP_WIRED}, + {STREAM_MUSIC, DEVICE_GROUP_REMOTE_CAST}, + {STREAM_VOICE_ASSISTANT, DEVICE_GROUP_BUILT_IN}, + {STREAM_VOICE_ASSISTANT, DEVICE_GROUP_WIRELESS}, + {STREAM_VOICE_ASSISTANT, DEVICE_GROUP_WIRED}, + {STREAM_VOICE_ASSISTANT, DEVICE_GROUP_REMOTE_CAST}, + {STREAM_ALARM, DEVICE_GROUP_BUILT_IN}, + {STREAM_ALARM, DEVICE_GROUP_WIRELESS}, + {STREAM_ALARM, DEVICE_GROUP_WIRED}, + {STREAM_ALARM, DEVICE_GROUP_REMOTE_CAST}, + {STREAM_ACCESSIBILITY, DEVICE_GROUP_BUILT_IN}, + {STREAM_ACCESSIBILITY, DEVICE_GROUP_WIRELESS}, + {STREAM_ACCESSIBILITY, DEVICE_GROUP_WIRED}, + {STREAM_ACCESSIBILITY, DEVICE_GROUP_REMOTE_CAST}, + {STREAM_ULTRASONIC, DEVICE_GROUP_BUILT_IN}, + {STREAM_ULTRASONIC, DEVICE_GROUP_WIRELESS}, + {STREAM_ULTRASONIC, DEVICE_GROUP_WIRED}, + {STREAM_ULTRASONIC, DEVICE_GROUP_REMOTE_CAST}, + {STREAM_ALL, DEVICE_GROUP_BUILT_IN}, + {STREAM_ALL, DEVICE_GROUP_WIRELESS}, + {STREAM_ALL, DEVICE_GROUP_WIRED}, + {STREAM_ALL, DEVICE_GROUP_REMOTE_CAST}, + }; } class IPolicyProvider { public: @@ -84,12 +77,12 @@ public: virtual ~IPolicyProvider() = default; - static bool GetVolumeIndex(AudioVolumeType streamType, DeviceType deviceType, size_t &index) + static bool GetVolumeIndex(AudioVolumeType streamType, DeviceGroup deviceGroup, size_t &index) { bool isFind = false; for (size_t tempIndex = 0; tempIndex < g_volumeIndexVector.size(); tempIndex++) { if (g_volumeIndexVector[tempIndex].first == streamType && - g_volumeIndexVector[tempIndex].second == deviceType) { + g_volumeIndexVector[tempIndex].second == deviceGroup) { isFind = true; index = tempIndex; break; diff --git a/services/audio_service/server/include/policy_handler.h b/services/audio_service/server/include/policy_handler.h index d3b73d7bd0c8f7a6a9eb04210e243b4ffd319034..f5c07c1f0625e7405a6cde51a187d8fb1a872fc9 100644 --- a/services/audio_service/server/include/policy_handler.h +++ b/services/audio_service/server/include/policy_handler.h @@ -44,8 +44,6 @@ public: // keep same with AudioPolicyServer AudioVolumeType GetVolumeTypeFromStreamType(AudioStreamType streamType); - DeviceType GetDeviceTypeForVolumeVector(DeviceType deviceType); - bool GetSharedVolume(AudioVolumeType streamType, DeviceType deviceType, Volume &vol); void SetActiveOutputDevice(DeviceType deviceType); diff --git a/services/audio_service/server/src/policy_handler.cpp b/services/audio_service/server/src/policy_handler.cpp index 26b441864983eb02c1dbd9e63024250773007f33..b40794334d6a0a381cccc6e228c4ad4872d7e4f7 100644 --- a/services/audio_service/server/src/policy_handler.cpp +++ b/services/audio_service/server/src/policy_handler.cpp @@ -145,29 +145,12 @@ AudioVolumeType PolicyHandler::GetVolumeTypeFromStreamType(AudioStreamType strea } } -DeviceType PolicyHandler::GetDeviceTypeForVolumeVector(DeviceType deviceType) -{ - DeviceType deviceTypeInVector = DEVICE_TYPE_NONE; - switch (deviceType) { - case DEVICE_TYPE_EARPIECE : - case DEVICE_TYPE_SPEAKER : - deviceTypeInVector = DEVICE_TYPE_SPEAKER; - break; - case DEVICE_TYPE_BLUETOOTH_A2DP: - deviceTypeInVector = DEVICE_TYPE_BLUETOOTH_A2DP; - break; - default: - AUDIO_ERR_LOG("Device type %{public}d is invalid, for volume vector", deviceType); - } - return deviceTypeInVector; -} - bool PolicyHandler::GetSharedVolume(AudioVolumeType streamType, DeviceType deviceType, Volume &vol) { CHECK_AND_RETURN_RET_LOG((iPolicyProvider_ != nullptr && volumeVector_ != nullptr), false, "GetSharedVolume failed not configed"); size_t index = 0; - if (!IPolicyProvider::GetVolumeIndex(streamType, GetDeviceTypeForVolumeVector(deviceType), index) || + if (!IPolicyProvider::GetVolumeIndex(streamType, GetVolumeGroupForDevice(deviceType), index) || index >= IPolicyProvider::GetVolumeVectorSize()) { return false; }