From 9c9698bf6cb365a39dff053a34e3574f06ccdeb6 Mon Sep 17 00:00:00 2001 From: liyuhang Date: Sat, 29 Oct 2022 20:26:02 +0800 Subject: [PATCH] Store the media sound in the persistent database, fix the problem of abnormal startup volume. Signed-off-by: liyuhang Change-Id: I83435645335a4870c37d29122e7aabd70495328b Signed-off-by: liyuhang --- services/audio_policy/BUILD.gn | 14 +++++++++++ services/audio_policy/etc/audio_config.para | 13 ++++++++++ .../audio_policy/etc/audio_config.para.dac | 14 +++++++++++ .../service/manager/audio_adapter_manager.cpp | 24 +++++++++++++++++++ 4 files changed, 65 insertions(+) create mode 100644 services/audio_policy/etc/audio_config.para create mode 100644 services/audio_policy/etc/audio_config.para.dac diff --git a/services/audio_policy/BUILD.gn b/services/audio_policy/BUILD.gn index 7a3d8bf3d9..0e5d2cea75 100644 --- a/services/audio_policy/BUILD.gn +++ b/services/audio_policy/BUILD.gn @@ -148,6 +148,8 @@ ohos_shared_library("audio_policy_service") { "//foundation/barrierfree/accessibility/interfaces/innerkits/acfwk:accessibilityconfig", "//foundation/distributeddatamgr/kv_store/interfaces/innerkits/distributeddata:distributeddata_inner", "//foundation/multimedia/audio_framework/frameworks/native/audioadapter:pulse_audio_service_adapter", + "//foundation/multimedia/audio_framework/services/audio_policy:audio_config.para", + "//foundation/multimedia/audio_framework/services/audio_policy:audio_config.para.dac", "//foundation/multimedia/audio_framework/services/audio_policy:audio_dump", "//foundation/multimedia/audio_framework/services/audio_service:audio_client", "//third_party/libxml2:xml2", @@ -195,6 +197,18 @@ ohos_prebuilt_etc("audio_tone_dtmf_config") { part_name = "multimedia_audio_framework" } +ohos_prebuilt_etc("audio_config.para") { + source = "//foundation/multimedia/audio_framework/services/audio_policy/etc/audio_config.para" + part_name = "multimedia_audio_framework" + module_install_dir = "etc/param" +} + +ohos_prebuilt_etc("audio_config.para.dac") { + source = "//foundation/multimedia/audio_framework/services/audio_policy/etc/audio_config.para.dac" + part_name = "multimedia_audio_framework" + module_install_dir = "etc/param" +} + config("audio_policy_client_config") { include_dirs = [ "//foundation/multimedia/audio_framework/services/audio_service/client/include", diff --git a/services/audio_policy/etc/audio_config.para b/services/audio_policy/etc/audio_config.para new file mode 100644 index 0000000000..ace1035134 --- /dev/null +++ b/services/audio_policy/etc/audio_config.para @@ -0,0 +1,13 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +persist.multimedia.audio.mediavolume = 15 \ No newline at end of file diff --git a/services/audio_policy/etc/audio_config.para.dac b/services/audio_policy/etc/audio_config.para.dac new file mode 100644 index 0000000000..5d89ec001a --- /dev/null +++ b/services/audio_policy/etc/audio_config.para.dac @@ -0,0 +1,14 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +persist.multimedia.audio.mediavolume = audio:audio:660 \ No newline at end of file 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 be83d3a4d4..60dc8f1aba 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 @@ -35,6 +35,17 @@ bool AudioAdapterManager::Init() testModeOn_ = true; } + char currentVolumeValue[3] = {0}; + auto ret = GetParameter("persist.multimedia.audio.mediavolume", "15", + currentVolumeValue, sizeof(currentVolumeValue)); + if (ret > 0) { + int32_t valueNumber = atoi(currentVolumeValue); + mVolumeMap[STREAM_MUSIC] = AudioGroupManager::MapVolumeToHDI(valueNumber); + AUDIO_INFO_LOG("[AudioAdapterManager] Get music volume to map success %{public}f", mVolumeMap[STREAM_MUSIC]); + } else { + AUDIO_ERR_LOG("[AudioAdapterManager] Get volume parameter failed %{public}d", ret); + } + return true; } @@ -108,6 +119,19 @@ int32_t AudioAdapterManager::SetStreamVolume(AudioStreamType streamType, float v mVolumeMap[streamForVolumeMap] = volume; WriteVolumeToKvStore(currentActiveDevice_, streamType, volume); + // Set the power on default volume to the database + if (streamType == STREAM_MUSIC) { + int32_t maxMediaVolume = 15; // The max volume is 15; + int32_t volumeInt = (int) round(volume * maxMediaVolume); + AUDIO_INFO_LOG("[AudioAdapterManager] Start set volume value to %{public}d", volumeInt); + int ret = SetParameter("persist.multimedia.audio.mediavolume", std::to_string(volumeInt).c_str()); + if (ret == 0) { + AUDIO_INFO_LOG("[AudioAdapterManager] Save media volume success %{public}d", volumeInt); + } else { + AUDIO_ERR_LOG("[AudioAdapterManager] Save media volume failed, result %{public}d", ret); + } + } + return mAudioServiceAdapter->SetVolume(streamType, volume); } -- Gitee