From 80451abacbe94c157af25cb8cb94aed5edfed63e Mon Sep 17 00:00:00 2001 From: LiuJianghu Date: Tue, 9 Sep 2025 19:43:54 +0800 Subject: [PATCH 1/2] update output route when scene change Signed-off-by: LiuJianghu --- .../include/sink/audio_render_sink.h | 1 + .../hdiadapter_new/sink/audio_render_sink.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/frameworks/native/hdiadapter_new/include/sink/audio_render_sink.h b/frameworks/native/hdiadapter_new/include/sink/audio_render_sink.h index 69d5c4a19d..12bc8e5438 100644 --- a/frameworks/native/hdiadapter_new/include/sink/audio_render_sink.h +++ b/frameworks/native/hdiadapter_new/include/sink/audio_render_sink.h @@ -118,6 +118,7 @@ private: void WriteSmartPAStatusSysEvent(int32_t status); void UpdateSinkState(bool started); void WaitForDataLinkConnected(); + void UpdateNearlinkOutputRoute(); private: static constexpr uint32_t AUDIO_CHANNELCOUNT = 2; diff --git a/frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp b/frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp index 0d57422a39..f334a45867 100644 --- a/frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp +++ b/frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp @@ -486,6 +486,7 @@ int32_t AudioRenderSink::SetAudioScene(AudioScene audioScene, bool scoExcludeFla CHECK_AND_RETURN_RET_LOG(ret >= 0, ERR_OPERATION_FAILED, "select scene fail, ret: %{public}d", ret); } bool isRingingToDefaultScene = false; + bool isChangeScene = false; if (audioScene != currentAudioScene_) { if (audioScene == AUDIO_SCENE_PHONE_CALL || audioScene == AUDIO_SCENE_PHONE_CHAT) { forceSetRouteFlag_ = true; @@ -495,6 +496,7 @@ int32_t AudioRenderSink::SetAudioScene(AudioScene audioScene, bool scoExcludeFla isRingingToDefaultScene = true; } currentAudioScene_ = audioScene; + isChangeScene = true; } HdiAdapterManager &manager = HdiAdapterManager::GetInstance(); @@ -502,6 +504,10 @@ int32_t AudioRenderSink::SetAudioScene(AudioScene audioScene, bool scoExcludeFla CHECK_AND_RETURN_RET(deviceManager != nullptr, ERR_INVALID_HANDLE); deviceManager->SetAudioScene(currentAudioScene_); + if (isChangeScene && currentAudioScene_ == DEVICE_TYPE_NEARLINK) { + UpdateNearlinkOutputRoute(); + } + if (isRingingToDefaultScene) { AUDIO_INFO_LOG("ringing scene to default scene"); return SUCCESS; @@ -509,6 +515,14 @@ int32_t AudioRenderSink::SetAudioScene(AudioScene audioScene, bool scoExcludeFla return SUCCESS; } +void AudioRenderSink::UpdateNearlinkOutputRoute(void) +{ + AUDIO_INFO_LOG("update nearlink output route"); + std::vector outputDevices; + outputDevices.push_back(currentActiveDevice_); + DoSetOutputRoute(outputDevices); +} + int32_t AudioRenderSink::GetAudioScene(void) { return currentAudioScene_; -- Gitee From d319cb8100daa3e1060933f0be461b35bc2e5b76 Mon Sep 17 00:00:00 2001 From: LiuJianghu Date: Tue, 9 Sep 2025 12:24:46 +0000 Subject: [PATCH 2/2] update frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp. Signed-off-by: LiuJianghu --- frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp b/frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp index f334a45867..f2b929f853 100644 --- a/frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp +++ b/frameworks/native/hdiadapter_new/sink/audio_render_sink.cpp @@ -504,7 +504,8 @@ int32_t AudioRenderSink::SetAudioScene(AudioScene audioScene, bool scoExcludeFla CHECK_AND_RETURN_RET(deviceManager != nullptr, ERR_INVALID_HANDLE); deviceManager->SetAudioScene(currentAudioScene_); - if (isChangeScene && currentAudioScene_ == DEVICE_TYPE_NEARLINK) { + if (isChangeScene && currentAudioScene_ == AUDIO_SCENE_DEFAULT && + currentActiveDevice_ == DEVICE_TYPE_NEARLINK) { UpdateNearlinkOutputRoute(); } -- Gitee