From 739b7f6b8760a3f4b0d01f76b871886f86f53872 Mon Sep 17 00:00:00 2001 From: darkshadow Date: Mon, 8 Sep 2025 11:28:15 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: darkshadow --- .../include/sink/direct_audio_render_sink.h | 2 ++ .../hdiadapter_new/sink/direct_audio_render_sink.cpp | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/frameworks/native/hdiadapter_new/include/sink/direct_audio_render_sink.h b/frameworks/native/hdiadapter_new/include/sink/direct_audio_render_sink.h index 89e6843bd0..721e914e47 100644 --- a/frameworks/native/hdiadapter_new/include/sink/direct_audio_render_sink.h +++ b/frameworks/native/hdiadapter_new/include/sink/direct_audio_render_sink.h @@ -19,6 +19,7 @@ #include "sink/i_audio_render_sink.h" #include #include +#include #include "v5_0/iaudio_manager.h" #include "audio_utils.h" #include "util/audio_running_lock.h" @@ -125,6 +126,7 @@ private: FILE *dumpFile_ = nullptr; std::string dumpFileName_ = ""; std::mutex sinkMutex_; + std::thread testThread_; }; } // namespace AudioStandard diff --git a/frameworks/native/hdiadapter_new/sink/direct_audio_render_sink.cpp b/frameworks/native/hdiadapter_new/sink/direct_audio_render_sink.cpp index ddbbdd3dcb..11f0671d99 100644 --- a/frameworks/native/hdiadapter_new/sink/direct_audio_render_sink.cpp +++ b/frameworks/native/hdiadapter_new/sink/direct_audio_render_sink.cpp @@ -33,6 +33,14 @@ namespace OHOS { namespace AudioStandard { DirectAudioRenderSink::~DirectAudioRenderSink() { + std::unique_lock lock(sinkMutex_); + if (started_) { + started_ = false; + } + lock.unlock(); + if (testThread_.joinable()) { + testThread_.join(); + } } int32_t DirectAudioRenderSink::Init(const IAudioSinkAttr &attr) @@ -100,7 +108,7 @@ int32_t DirectAudioRenderSink::Start(void) void DirectAudioRenderSink::StartTestThread(void) { - std::thread([this]() { + testThread_ = std::thread([this]() { bool keepRunning = true; while (keepRunning) { std::unique_lock lock(sinkMutex_); @@ -109,7 +117,7 @@ void DirectAudioRenderSink::StartTestThread(void) lock.unlock(); std::this_thread::sleep_for(std::chrono::milliseconds(TEST_CALLBACK_TIME)); } - }).detach(); + }); } int32_t DirectAudioRenderSink::Stop(void) -- Gitee From bd01505d259598a3fbec4b7cbc19db762c30b470 Mon Sep 17 00:00:00 2001 From: darkshadow Date: Sat, 13 Sep 2025 17:18:45 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E4=B8=AD=E5=BF=83=EF=BC=8C=E6=8C=89=E9=94=AE?= =?UTF-8?q?=E8=B0=83=E8=8A=82=E4=B8=8D=E4=BA=86=E9=9F=B3=E5=8C=BA=E9=9F=B3?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: darkshadow --- .../service_main/include/audio_policy_server.h | 2 +- .../service_main/src/audio_policy_server.cpp | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/services/audio_policy/server/service/service_main/include/audio_policy_server.h b/services/audio_policy/server/service/service_main/include/audio_policy_server.h index acb0f7cfbc..02b3d809db 100644 --- a/services/audio_policy/server/service/service_main/include/audio_policy_server.h +++ b/services/audio_policy/server/service/service_main/include/audio_policy_server.h @@ -837,7 +837,7 @@ private: void UpdateDefaultOutputDeviceWhenStarting(const uint32_t sessionID); void UpdateDefaultOutputDeviceWhenStopping(const uint32_t sessionID); void ChangeVolumeOnVoiceAssistant(AudioStreamType &streamInFocus); - AudioStreamType GetCurrentStreamInFocus(); + AudioStreamType GetCurrentStreamInFocus(int32_t zoneId = 0); AudioEffectService &audioEffectService_; AudioAffinityManager &audioAffinityManager_; diff --git a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp index 463c6936cb..23848921e6 100644 --- a/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_policy_server.cpp @@ -713,7 +713,7 @@ int32_t AudioPolicyServer::ProcessVolumeKeyEvents(const int32_t keyType) if (volumeApplyToAll_) { streamInFocus = AudioStreamType::STREAM_ALL; } else { - streamInFocus = VolumeUtils::GetVolumeTypeFromStreamType(GetCurrentStreamInFocus()); + streamInFocus = VolumeUtils::GetVolumeTypeFromStreamType(GetCurrentStreamInFocus(zoneId)); } bool active = false; IsStreamActive(streamInFocus, active); @@ -1391,22 +1391,24 @@ int32_t AudioPolicyServer::AdjustVolumeByStep(int32_t adjustTypeIn) return ERR_PERMISSION_DENIED; } + int32_t zoneId = AudioZoneService::GetInstance().CheckZoneExist(audioVolumeManager_.GetVolumeAdjustZoneId()) ? + audioVolumeManager_.GetVolumeAdjustZoneId() : 0; AudioStreamType streamInFocus = VolumeUtils::GetVolumeTypeFromStreamType( - GetCurrentStreamInFocus()); + GetCurrentStreamInFocus(zoneId)); if (streamInFocus == AudioStreamType::STREAM_DEFAULT) { streamInFocus = AudioStreamType::STREAM_MUSIC; } std::lock_guard lock(systemVolumeMutex_); int32_t volumeLevelInInt = 0; - if (adjustType == VolumeAdjustType::VOLUME_UP && GetStreamMuteInternal(streamInFocus)) { - SetStreamMuteInternal(streamInFocus, false, false); + if (adjustType == VolumeAdjustType::VOLUME_UP && GetStreamMuteInternal(streamInFocus, zoneId)) { + SetStreamMuteInternal(streamInFocus, false, false, DEVICE_TYPE_NONE, zoneId); if (!VolumeUtils::IsPCVolumeEnable()) { AUDIO_DEBUG_LOG("phone need return"); return SUCCESS; } } - volumeLevelInInt = GetSystemVolumeLevelInternal(streamInFocus); + volumeLevelInInt = GetSystemVolumeLevelInternal(streamInFocus, zoneId); int32_t minRet = -1; GetMinVolumeLevel(streamInFocus, minRet); int32_t maxRet = -1; @@ -1427,7 +1429,7 @@ int32_t AudioPolicyServer::AdjustVolumeByStep(int32_t adjustTypeIn) volumeLevelInInt; volumeLevelInInt = volumeLevelInInt < minRet ? minRet : volumeLevelInInt; - int32_t ret = SetSystemVolumeLevelInternal(streamInFocus, volumeLevelInInt, false); + int32_t ret = SetSystemVolumeLevelInternal(streamInFocus, volumeLevelInInt, false, zoneId); return ret; } @@ -2907,10 +2909,10 @@ void AudioPolicyServer::OnAudioStreamRemoved(const uint64_t sessionID) audioPolicyServerHandler_->SendCapturerRemovedEvent(sessionID, false); } -AudioStreamType AudioPolicyServer::GetCurrentStreamInFocus() +AudioStreamType AudioPolicyServer::GetCurrentStreamInFocus(int32_t zoneId) { int32_t streamType = STREAM_DEFAULT; - GetStreamInFocus(DEFAULT_ZONEID, streamType); + GetStreamInFocus(zoneId, streamType); CHECK_AND_RETURN_RET(audioVolumeManager_.IsNeedForceControlVolumeType(), static_cast(streamType)); AUDIO_INFO_LOG("force volume type, type:%{public}d", audioVolumeManager_.GetForceControlVolumeType()); return audioVolumeManager_.GetForceControlVolumeType(); -- Gitee