From f7e5183a8f6afb4f4f5a15d3b8eff977c6cb065e Mon Sep 17 00:00:00 2001 From: zhuchaochao Date: Wed, 20 Dec 2023 02:11:25 +0000 Subject: [PATCH] fix the bug of voip call Signed-off-by: zhuchaochao Change-Id: I8fe515b9ed076a7c5732ed299c58639a0cfb71c7 --- .../native/audiocommon/include/audio_info.h | 8 ++++++++ .../server/include/audio_policy_server.h | 1 + .../server/src/audio_policy_server.cpp | 16 +++++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/interfaces/inner_api/native/audiocommon/include/audio_info.h b/interfaces/inner_api/native/audiocommon/include/audio_info.h index 6383840974..9661224dbd 100644 --- a/interfaces/inner_api/native/audiocommon/include/audio_info.h +++ b/interfaces/inner_api/native/audiocommon/include/audio_info.h @@ -355,6 +355,14 @@ enum AudioScene : int32_t { * Voice chat audio scene */ AUDIO_SCENE_PHONE_CHAT, + /** + * AvSession set call start flag + */ + AUDIO_SCENE_CALL_START, + /** + * AvSession set call end flag + */ + AUDIO_SCENE_CALL_END, /** * Max */ diff --git a/services/audio_policy/server/include/audio_policy_server.h b/services/audio_policy/server/include/audio_policy_server.h index 18a3429226..7ba5f93017 100644 --- a/services/audio_policy/server/include/audio_policy_server.h +++ b/services/audio_policy/server/include/audio_policy_server.h @@ -520,6 +520,7 @@ private: AudioSpatializationService& audioSpatializationService_; std::shared_ptr audioPolicyServerHandler_; + bool isAvSessionSetVoipStart = false; }; } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_policy/server/src/audio_policy_server.cpp b/services/audio_policy/server/src/audio_policy_server.cpp index 79e6c25b3a..a8f41c60c4 100644 --- a/services/audio_policy/server/src/audio_policy_server.cpp +++ b/services/audio_policy/server/src/audio_policy_server.cpp @@ -984,6 +984,17 @@ int32_t AudioPolicyServer::SetAudioScene(AudioScene audioScene) AUDIO_ERR_LOG("SetAudioScene: param is invalid"); return ERR_INVALID_PARAM; } + if (audioScene == AUDIO_SCENE_CALL_START) { + AUDIO_INFO_LOG("SetAudioScene, AUDIO_SCENE_CALL_START means voip start."); + isAvSessionSetVoipStart = true; + return SUCCESS; + + } + if (audioScene == AUDIO_SCENE_CALL_END) { + AUDIO_INFO_LOG("SetAudioScene, AUDIO_SCENE_CALL_END means voip end, need set AUDIO_SCENE_DEFAULT."); + isAvSessionSetVoipStart = false; + return audioPolicyService_.SetAudioScene(AUDIO_SCENE_DEFAULT); + } if (!PermissionUtil::VerifySystemPermission()) { AUDIO_ERR_LOG("SetAudioScene: No system permission"); @@ -1421,7 +1432,10 @@ void AudioPolicyServer::UpdateAudioScene(const AudioScene audioScene, AudioInter AUDIO_ERR_LOG("Unexpected changeType=%{public}d", changeType); return; } - + if (isAvSessionSetVoipStart && audioScene == AUDIO_SCENE_DEFAULT) { + AUDIO_INFO_LOG("AudioScene 0 is blocked because current call is in the range set by AvSession."); + return; + } audioPolicyService_.SetAudioScene(audioScene); } -- Gitee