From 2848a598ed8e6b7543cdf25ced21e5d79df4863f Mon Sep 17 00:00:00 2001 From: owenCreeper Date: Mon, 18 Nov 2024 11:58:40 +0800 Subject: [PATCH 1/5] fadeoutStateModify Signed-off-by: owenCreeper --- .../native/pulseaudio/modules/hdi/hdi_sink.c | 38 ++++++++++--------- .../common/include/audio_volume.h | 7 ++++ .../common/include/audio_volume_c.h | 4 ++ .../audio_service/common/src/audio_volume.cpp | 31 +++++++++++++++ .../server/src/pa_adapter_manager.cpp | 2 +- .../server/src/pa_renderer_stream_impl.cpp | 11 ++++-- 6 files changed, 72 insertions(+), 21 deletions(-) diff --git a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c index 741c301a85..eaee765492 100644 --- a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c +++ b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c @@ -1103,8 +1103,9 @@ static void PreparePrimaryFading(pa_sink_input *sinkIn, pa_mix_info *infoIn, pa_ return; } - const char *sinkFadeoutPause = pa_proplist_gets(sinkIn->proplist, "fadeoutPause"); - if (pa_safe_streq(sinkFadeoutPause, "2") && (sinkIn->thread_info.state == PA_SINK_INPUT_RUNNING)) { + uint32_t streamIndex = sinkIn->index; + uint32_t sinkFadeoutPause = GetFadoutState(streamIndex); + if (sinkFadeoutPause == 2 && (sinkIn->thread_info.state == PA_SINK_INPUT_RUNNING)) { // 2 fading done silenceData(infoIn, si); AUDIO_PRERELEASE_LOGI("after pause fadeout done, silenceData"); return; @@ -1123,12 +1124,12 @@ static void PreparePrimaryFading(pa_sink_input *sinkIn, pa_mix_info *infoIn, pa_ u->primary.primaryFadingInDone = 1; pa_memblock_release(infoIn->chunk.memblock); } - if (pa_safe_streq(sinkFadeoutPause, "1")) { + if (sinkFadeoutPause == 1) { // 1 do fading //do fading out pa_memchunk_make_writable(&infoIn->chunk, 0); void *data = pa_memblock_acquire_chunk(&infoIn->chunk); DoFading(data, infoIn->chunk.length, format, (uint32_t)u->ss.channels, 1); - pa_proplist_sets(sinkIn->proplist, "fadeoutPause", "2"); + SetFadoutState(streamIndex, 2); // 2 fading done pa_memblock_release(infoIn->chunk.memblock); } } @@ -1250,8 +1251,8 @@ static void HandleFading(pa_sink *si, size_t length, pa_sink_input *sinkIn, pa_m PreparePrimaryFading(sinkIn, infoIn, si); CheckPrimaryFadeinIsDone(si, sinkIn); - const char *sinkFadeoutPause = pa_proplist_gets(sinkIn->proplist, "fadeoutPause"); - if (pa_safe_streq(sinkFadeoutPause, "0") && (length <= infoIn->chunk.length)) { + uint32_t sinkFadeoutPause = GetFadoutState(sinkIn->index); + if (!sinkFadeoutPause && (length <= infoIn->chunk.length)) { u->streamAvailable++; } } @@ -1327,8 +1328,10 @@ static void PrepareMultiChannelFading(pa_sink_input *sinkIn, pa_mix_info *infoIn struct Userdata *u = si->userdata; CHECK_AND_RETURN_LOG(u != NULL, "u is NULL"); - const char *sinkFadeoutPause = pa_proplist_gets(sinkIn->proplist, "fadeoutPause"); - if (pa_safe_streq(sinkFadeoutPause, "2")) { + uint32_t streamIndex = sinkIn->index; + uint32_t sinkFadeoutPause = GetFadoutState(streamIndex); + + if (sinkFadeoutPause == 2) { // 2 fading done silenceData(infoIn, si); AUDIO_PRERELEASE_LOGI("silenceData."); return; @@ -1348,12 +1351,12 @@ static void PrepareMultiChannelFading(pa_sink_input *sinkIn, pa_mix_info *infoIn u->multiChannel.multiChannelFadingInDone = 1; pa_memblock_release(infoIn->chunk.memblock); } - if (pa_safe_streq(sinkFadeoutPause, "1")) { + if (sinkFadeoutPause == 1) { // 1 do fading //do fading out pa_memchunk_make_writable(&infoIn->chunk, 0); void *data = pa_memblock_acquire_chunk(&infoIn->chunk); DoFading(data, infoIn->chunk.length, format, (uint32_t)u->ss.channels, 1); - pa_proplist_sets(sinkIn->proplist, "fadeoutPause", "2"); + SetFadoutState(streamIndex, 2); // 2 fading done pa_memblock_release(infoIn->chunk.memblock); } } @@ -2659,8 +2662,8 @@ static int32_t ProcessRenderUseTimingOffload(struct Userdata *u, bool *wait, int } pa_sink_input *i = infoInputs[0].userdata; - const char *fadingFlag = pa_proplist_gets(i->proplist, "fadeoutPause"); - if ((fadingFlag != NULL) && (!strcmp(fadingFlag, "1"))) { + uint32_t fadingFlag = GetFadoutState(i->index); + if ((fadingFlag != 3) && fadingFlag == 1) { // 3 invalid fadestate AUDIO_WARNING_LOG("stream is croked, do not need peek"); return 0; } @@ -2878,8 +2881,9 @@ static void PaInputStateChangeCbPrimary(struct Userdata *u, pa_sink_input *i, pa { const bool starting = i->thread_info.state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING; const bool corking = i->thread_info.state == PA_SINK_INPUT_RUNNING && state == PA_SINK_INPUT_CORKED; + uint32_t streamIndex = i->index; if (corking) { - pa_proplist_sets(i->proplist, "fadeoutPause", "0"); + SetFadoutState(streamIndex, 0); // 0 reset fading } if (starting) { @@ -2887,7 +2891,7 @@ static void PaInputStateChangeCbPrimary(struct Userdata *u, pa_sink_input *i, pa if (pa_atomic_load(&u->primary.isHDISinkStarted) == 1) { pa_atomic_store(&u->primary.fadingFlagForPrimary, 1); AUDIO_INFO_LOG("store fadingFlagForPrimary for 1"); - pa_proplist_sets(i->proplist, "fadeoutPause", "0"); + SetFadoutState(streamIndex, 0); // 0 reset fading u->primary.primaryFadingInDone = 0; u->primary.primarySinkInIndex = (int32_t)(i->index); AUDIO_INFO_LOG("PaInputStateChangeCb, HDI renderer already started"); @@ -2904,7 +2908,7 @@ static void PaInputStateChangeCbPrimary(struct Userdata *u, pa_sink_input *i, pa u->renderCount = 0; pa_atomic_store(&u->primary.fadingFlagForPrimary, 1); AUDIO_INFO_LOG("store fadingFlagForPrimary for 1"); - pa_proplist_sets(i->proplist, "fadeoutPause", "0"); + SetFadoutState(streamIndex, 0); // 0 reset fading u->primary.primaryFadingInDone = 0; u->primary.primarySinkInIndex = (int32_t)(i->index); AUDIO_INFO_LOG("PaInputStateChangeCb, Successfully restarted HDI renderer"); @@ -2998,7 +3002,7 @@ static void PaInputStateChangeCbMultiChannel(struct Userdata *u, pa_sink_input * const bool starting = i->thread_info.state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING; const bool stopping = state == PA_SINK_INPUT_UNLINKED; if (corking) { - pa_proplist_sets(i->proplist, "fadeoutPause", "0"); + SetFadoutState(i->index, 0); // 0 reset fading } if (starting) { u->multiChannel.timestamp = pa_rtclock_now(); @@ -3021,7 +3025,7 @@ static void ResetFadeoutPause(pa_sink_input *i, pa_sink_input_state_t state) bool starting = i->thread_info.state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING; if (corking || starting) { AUDIO_INFO_LOG("set fadeoutPause to 0"); - pa_proplist_sets(i->proplist, "fadeoutPause", "0"); + SetFadoutState(i->index, 0); // 0 reset fading } } diff --git a/services/audio_service/common/include/audio_volume.h b/services/audio_service/common/include/audio_volume.h index f33c03877a..abdf620a68 100644 --- a/services/audio_service/common/include/audio_volume.h +++ b/services/audio_service/common/include/audio_volume.h @@ -56,6 +56,10 @@ public: void Dump(std::string &dumpString); void Monitor(uint32_t sessionId, bool isOutput); + void SetFadoutState(uint32_t streamIndex, uint32_t fadoutState); + uint32_t GetFadoutState(uint32_t streamIndex); + void RemoveFadoutState(uint32_t streamIndex); + private: AudioVolume(); @@ -66,6 +70,9 @@ private: std::unordered_map> monitorVolume_ {}; std::shared_mutex volumeMutex_ {}; std::shared_mutex systemMutex_ {}; + + std::shared_mutex fadoutMutex_ {}; + std::unordered_map fadeoutState_{}; }; class StreamVolume { diff --git a/services/audio_service/common/include/audio_volume_c.h b/services/audio_service/common/include/audio_volume_c.h index 785dfd45bc..3697b9fab3 100644 --- a/services/audio_service/common/include/audio_volume_c.h +++ b/services/audio_service/common/include/audio_volume_c.h @@ -36,6 +36,10 @@ bool IsSameVolume(float volumeA, float volumeB); void MonitorVolume(uint32_t sessionId, bool isOutput); +void SetFadoutState(uint32_t streamIndex, uint32_t fadoutState); + +uint32_t GetFadoutState(uint32_t streamIndex); + #ifdef __cplusplus } #endif diff --git a/services/audio_service/common/src/audio_volume.cpp b/services/audio_service/common/src/audio_volume.cpp index 3c1308a0bd..49a96eac9f 100644 --- a/services/audio_service/common/src/audio_volume.cpp +++ b/services/audio_service/common/src/audio_volume.cpp @@ -402,6 +402,27 @@ void AudioVolume::Monitor(uint32_t sessionId, bool isOutput) AUDIO_ERR_LOG("stream volume not exist, sessionId:%{public}u", sessionId); } } + +void AudioVolume::SetFadoutState(uint32_t streamIndex, uint32_t fadeoutState) +{ + std::unique_lock lock(fadoutMutex_); + fadeoutState_.insert_or_assign(streamIndex, fadeoutState); +} + +uint32_t AudioVolume::GetFadoutState(uint32_t streamIndex) +{ + std::shared_lock lock(fadoutMutex_); + auto it = fadeoutState_.find(streamIndex); + if (it != fadeoutState_.end()) { return it->second; } + AUDIO_WARNING_LOG("No such streamIndex in map!"); + return 3; // 3 invalid +} + +void AudioVolume::RemoveFadoutState(uint32_t streamIndex) +{ + std::unique_lock lock(fadoutMutex_); + fadeoutState_.erase(streamIndex); +} } // namespace AudioStandard } // namespace OHOS @@ -450,6 +471,16 @@ void MonitorVolume(uint32_t sessionId, bool isOutput) { AudioVolume::GetInstance()->Monitor(sessionId, isOutput); } + +void SetFadoutState(uint32_t streamIndex, uint32_t fadoutState) +{ + AudioVolume::GetInstance()->SetFadoutState(streamIndex, fadoutState); +} + +uint32_t GetFadoutState(uint32_t streamIndex) +{ + return AudioVolume::GetInstance()->GetFadoutState(streamIndex); +} #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/services/audio_service/server/src/pa_adapter_manager.cpp b/services/audio_service/server/src/pa_adapter_manager.cpp index 809e113c3e..0efd6364d3 100644 --- a/services/audio_service/server/src/pa_adapter_manager.cpp +++ b/services/audio_service/server/src/pa_adapter_manager.cpp @@ -28,6 +28,7 @@ #include "audio_utils.h" #include "audio_info.h" #include "policy_handler.h" +#include "audio_volume.h" namespace OHOS { namespace AudioStandard { @@ -546,7 +547,6 @@ int32_t PaAdapterManager::SetPaProplist(pa_proplist *propList, pa_channel_map &m : (managerType_ == DUAL_PLAYBACK ? DUAL_TONE_STREAM : NORMAL_STREAM); pa_proplist_sets(propList, "stream.mode", streamMode.c_str()); pa_proplist_sets(propList, "stream.flush", "false"); - pa_proplist_sets(propList, "fadeoutPause", "0"); pa_proplist_sets(propList, "stream.privacyType", std::to_string(processConfig.privacyType).c_str()); pa_proplist_sets(propList, "stream.usage", std::to_string(processConfig.rendererInfo.streamUsage).c_str()); pa_proplist_sets(propList, "scene.type", processConfig.rendererInfo.sceneType.c_str()); diff --git a/services/audio_service/server/src/pa_renderer_stream_impl.cpp b/services/audio_service/server/src/pa_renderer_stream_impl.cpp index 2960ef5316..b34b9b8330 100644 --- a/services/audio_service/server/src/pa_renderer_stream_impl.cpp +++ b/services/audio_service/server/src/pa_renderer_stream_impl.cpp @@ -32,6 +32,7 @@ #include "audio_utils.h" #include "i_audio_renderer_sink.h" #include "policy_handler.h" +#include "audio_volume.h" namespace OHOS { namespace AudioStandard { @@ -144,6 +145,8 @@ int32_t PaRendererStreamImpl::InitParams() spanSizeInFrame_ = minBufferSize_ / byteSizePerFrame_; lock.Unlock(); + + AudioVolume::GetInstance()->SetFadoutState(sinkInputIndex_, 0); // In plan: Get data from xml effectSceneName_ = processConfig_.rendererInfo.sceneType; @@ -196,7 +199,7 @@ int32_t PaRendererStreamImpl::Pause(bool isStandby) } pa_proplist *propList = pa_proplist_new(); if (propList != nullptr) { - pa_proplist_sets(propList, "fadeoutPause", "1"); + AudioVolume::GetInstance()->SetFadoutState(sinkInputIndex_, 1); // 1 start fadout pa_operation *updatePropOperation = pa_stream_proplist_update(paStream_, PA_UPDATE_REPLACE, propList, nullptr, nullptr); pa_proplist_free(propList); @@ -301,7 +304,7 @@ int32_t PaRendererStreamImpl::Stop() pa_proplist *propList = pa_proplist_new(); if (propList != nullptr) { - pa_proplist_sets(propList, "fadeoutPause", "1"); + AudioVolume::GetInstance()->SetFadoutState(sinkInputIndex_, 1); // 1 start fadout pa_operation *updatePropOperation = pa_stream_proplist_update(paStream_, PA_UPDATE_REPLACE, propList, nullptr, nullptr); pa_proplist_free(propList); @@ -373,6 +376,8 @@ int32_t PaRendererStreamImpl::Release() audioEffectVolume->StreamVolumeDelete(sessionIDTemp); } + AudioVolume::GetInstance()->RemoveFadoutState(sinkInputIndex_); + PaLockGuard lock(mainloop_); if (paStream_) { pa_stream_set_state_callback(paStream_, nullptr, nullptr); @@ -385,7 +390,7 @@ int32_t PaRendererStreamImpl::Release() pa_stream_disconnect(paStream_); releasedFlag_ = true; } - + return SUCCESS; } -- Gitee From 8a2bba74f4f2d98aa162c9c275b2bce4c1f9f84d Mon Sep 17 00:00:00 2001 From: owenCreeper Date: Mon, 18 Nov 2024 11:59:59 +0800 Subject: [PATCH 2/5] del useless head file Signed-off-by: owenCreeper --- services/audio_service/server/src/pa_adapter_manager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/services/audio_service/server/src/pa_adapter_manager.cpp b/services/audio_service/server/src/pa_adapter_manager.cpp index 0efd6364d3..cf4e6eca19 100644 --- a/services/audio_service/server/src/pa_adapter_manager.cpp +++ b/services/audio_service/server/src/pa_adapter_manager.cpp @@ -28,7 +28,6 @@ #include "audio_utils.h" #include "audio_info.h" #include "policy_handler.h" -#include "audio_volume.h" namespace OHOS { namespace AudioStandard { -- Gitee From 8692f1d7db256e3c998c1c240ff1123e83a8f531 Mon Sep 17 00:00:00 2001 From: owenCreeper Date: Mon, 18 Nov 2024 12:01:25 +0800 Subject: [PATCH 3/5] fix coding style Signed-off-by: owenCreeper --- frameworks/native/pulseaudio/modules/hdi/hdi_sink.c | 1 - 1 file changed, 1 deletion(-) diff --git a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c index eaee765492..c476217304 100644 --- a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c +++ b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c @@ -1330,7 +1330,6 @@ static void PrepareMultiChannelFading(pa_sink_input *sinkIn, pa_mix_info *infoIn uint32_t streamIndex = sinkIn->index; uint32_t sinkFadeoutPause = GetFadoutState(streamIndex); - if (sinkFadeoutPause == 2) { // 2 fading done silenceData(infoIn, si); AUDIO_PRERELEASE_LOGI("silenceData."); -- Gitee From 67daab5965590d469a087a1e6d4e45b963adcf87 Mon Sep 17 00:00:00 2001 From: owenCreeper Date: Mon, 18 Nov 2024 13:06:08 +0800 Subject: [PATCH 4/5] fix coding style Signed-off-by: owenCreeper --- .../native/pulseaudio/modules/hdi/hdi_sink.c | 31 +++++++++---------- .../common/include/audio_volume.h | 13 ++++++-- .../common/include/audio_volume_c.h | 11 +++++-- .../audio_service/common/src/audio_volume.cpp | 16 +++++----- .../server/src/pa_renderer_stream_impl.cpp | 20 +++--------- 5 files changed, 46 insertions(+), 45 deletions(-) diff --git a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c index c476217304..a7b410829c 100644 --- a/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c +++ b/frameworks/native/pulseaudio/modules/hdi/hdi_sink.c @@ -1104,8 +1104,8 @@ static void PreparePrimaryFading(pa_sink_input *sinkIn, pa_mix_info *infoIn, pa_ } uint32_t streamIndex = sinkIn->index; - uint32_t sinkFadeoutPause = GetFadoutState(streamIndex); - if (sinkFadeoutPause == 2 && (sinkIn->thread_info.state == PA_SINK_INPUT_RUNNING)) { // 2 fading done + uint32_t sinkFadeoutPause = GetFadeoutState(streamIndex); + if (sinkFadeoutPause == DONE_FADE && (sinkIn->thread_info.state == PA_SINK_INPUT_RUNNING)) { silenceData(infoIn, si); AUDIO_PRERELEASE_LOGI("after pause fadeout done, silenceData"); return; @@ -1124,12 +1124,12 @@ static void PreparePrimaryFading(pa_sink_input *sinkIn, pa_mix_info *infoIn, pa_ u->primary.primaryFadingInDone = 1; pa_memblock_release(infoIn->chunk.memblock); } - if (sinkFadeoutPause == 1) { // 1 do fading + if (sinkFadeoutPause == DO_FADE) { //do fading out pa_memchunk_make_writable(&infoIn->chunk, 0); void *data = pa_memblock_acquire_chunk(&infoIn->chunk); DoFading(data, infoIn->chunk.length, format, (uint32_t)u->ss.channels, 1); - SetFadoutState(streamIndex, 2); // 2 fading done + SetFadeoutState(streamIndex, DONE_FADE); pa_memblock_release(infoIn->chunk.memblock); } } @@ -1251,7 +1251,7 @@ static void HandleFading(pa_sink *si, size_t length, pa_sink_input *sinkIn, pa_m PreparePrimaryFading(sinkIn, infoIn, si); CheckPrimaryFadeinIsDone(si, sinkIn); - uint32_t sinkFadeoutPause = GetFadoutState(sinkIn->index); + uint32_t sinkFadeoutPause = GetFadeoutState(sinkIn->index); if (!sinkFadeoutPause && (length <= infoIn->chunk.length)) { u->streamAvailable++; } @@ -1329,8 +1329,8 @@ static void PrepareMultiChannelFading(pa_sink_input *sinkIn, pa_mix_info *infoIn CHECK_AND_RETURN_LOG(u != NULL, "u is NULL"); uint32_t streamIndex = sinkIn->index; - uint32_t sinkFadeoutPause = GetFadoutState(streamIndex); - if (sinkFadeoutPause == 2) { // 2 fading done + uint32_t sinkFadeoutPause = GetFadeoutState(streamIndex); + if (sinkFadeoutPause == DONE_FADE) { silenceData(infoIn, si); AUDIO_PRERELEASE_LOGI("silenceData."); return; @@ -1350,12 +1350,12 @@ static void PrepareMultiChannelFading(pa_sink_input *sinkIn, pa_mix_info *infoIn u->multiChannel.multiChannelFadingInDone = 1; pa_memblock_release(infoIn->chunk.memblock); } - if (sinkFadeoutPause == 1) { // 1 do fading + if (sinkFadeoutPause == DO_FADE) { //do fading out pa_memchunk_make_writable(&infoIn->chunk, 0); void *data = pa_memblock_acquire_chunk(&infoIn->chunk); DoFading(data, infoIn->chunk.length, format, (uint32_t)u->ss.channels, 1); - SetFadoutState(streamIndex, 2); // 2 fading done + SetFadeoutState(streamIndex, DONE_FADE); pa_memblock_release(infoIn->chunk.memblock); } } @@ -2661,8 +2661,7 @@ static int32_t ProcessRenderUseTimingOffload(struct Userdata *u, bool *wait, int } pa_sink_input *i = infoInputs[0].userdata; - uint32_t fadingFlag = GetFadoutState(i->index); - if ((fadingFlag != 3) && fadingFlag == 1) { // 3 invalid fadestate + if (GetFadeoutState(i->index) != NO_FADE) { AUDIO_WARNING_LOG("stream is croked, do not need peek"); return 0; } @@ -2882,7 +2881,7 @@ static void PaInputStateChangeCbPrimary(struct Userdata *u, pa_sink_input *i, pa const bool corking = i->thread_info.state == PA_SINK_INPUT_RUNNING && state == PA_SINK_INPUT_CORKED; uint32_t streamIndex = i->index; if (corking) { - SetFadoutState(streamIndex, 0); // 0 reset fading + SetFadeoutState(streamIndex, NO_FADE); } if (starting) { @@ -2890,7 +2889,7 @@ static void PaInputStateChangeCbPrimary(struct Userdata *u, pa_sink_input *i, pa if (pa_atomic_load(&u->primary.isHDISinkStarted) == 1) { pa_atomic_store(&u->primary.fadingFlagForPrimary, 1); AUDIO_INFO_LOG("store fadingFlagForPrimary for 1"); - SetFadoutState(streamIndex, 0); // 0 reset fading + SetFadeoutState(streamIndex, NO_FADE); u->primary.primaryFadingInDone = 0; u->primary.primarySinkInIndex = (int32_t)(i->index); AUDIO_INFO_LOG("PaInputStateChangeCb, HDI renderer already started"); @@ -2907,7 +2906,7 @@ static void PaInputStateChangeCbPrimary(struct Userdata *u, pa_sink_input *i, pa u->renderCount = 0; pa_atomic_store(&u->primary.fadingFlagForPrimary, 1); AUDIO_INFO_LOG("store fadingFlagForPrimary for 1"); - SetFadoutState(streamIndex, 0); // 0 reset fading + SetFadeoutState(streamIndex, NO_FADE); u->primary.primaryFadingInDone = 0; u->primary.primarySinkInIndex = (int32_t)(i->index); AUDIO_INFO_LOG("PaInputStateChangeCb, Successfully restarted HDI renderer"); @@ -3001,7 +3000,7 @@ static void PaInputStateChangeCbMultiChannel(struct Userdata *u, pa_sink_input * const bool starting = i->thread_info.state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING; const bool stopping = state == PA_SINK_INPUT_UNLINKED; if (corking) { - SetFadoutState(i->index, 0); // 0 reset fading + SetFadeoutState(i->index, NO_FADE); } if (starting) { u->multiChannel.timestamp = pa_rtclock_now(); @@ -3024,7 +3023,7 @@ static void ResetFadeoutPause(pa_sink_input *i, pa_sink_input_state_t state) bool starting = i->thread_info.state == PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_RUNNING; if (corking || starting) { AUDIO_INFO_LOG("set fadeoutPause to 0"); - SetFadoutState(i->index, 0); // 0 reset fading + SetFadeoutState(i->index, NO_FADE); } } diff --git a/services/audio_service/common/include/audio_volume.h b/services/audio_service/common/include/audio_volume.h index abdf620a68..7108b98d9c 100644 --- a/services/audio_service/common/include/audio_volume.h +++ b/services/audio_service/common/include/audio_volume.h @@ -24,6 +24,13 @@ namespace OHOS { namespace AudioStandard { class StreamVolume; class SystemVolume; +enum FadePauseState { + NO_FADE, + DO_FADE, + DONE_FADE, + INVALID_STATE +}; + class AudioVolume { public: static AudioVolume *GetInstance(); @@ -56,9 +63,9 @@ public: void Dump(std::string &dumpString); void Monitor(uint32_t sessionId, bool isOutput); - void SetFadoutState(uint32_t streamIndex, uint32_t fadoutState); - uint32_t GetFadoutState(uint32_t streamIndex); - void RemoveFadoutState(uint32_t streamIndex); + void SetFadeoutState(uint32_t streamIndex, uint32_t fadeoutState); + uint32_t GetFadeoutState(uint32_t streamIndex); + void RemoveFadeoutState(uint32_t streamIndex); private: AudioVolume(); diff --git a/services/audio_service/common/include/audio_volume_c.h b/services/audio_service/common/include/audio_volume_c.h index 3697b9fab3..fc14aa32f0 100644 --- a/services/audio_service/common/include/audio_volume_c.h +++ b/services/audio_service/common/include/audio_volume_c.h @@ -22,6 +22,13 @@ extern "C" { #endif +enum FadePauseState { + NO_FADE, + DO_FADE, + DONE_FADE, + INVALID_STATE +}; + float GetCurVolume(uint32_t sessionId, const char *streamType, const char *deviceClass); float GetPreVolume(uint32_t sessionId); @@ -36,9 +43,9 @@ bool IsSameVolume(float volumeA, float volumeB); void MonitorVolume(uint32_t sessionId, bool isOutput); -void SetFadoutState(uint32_t streamIndex, uint32_t fadoutState); +void SetFadeoutState(uint32_t streamIndex, uint32_t fadeoutState); -uint32_t GetFadoutState(uint32_t streamIndex); +uint32_t GetFadeoutState(uint32_t streamIndex); #ifdef __cplusplus } diff --git a/services/audio_service/common/src/audio_volume.cpp b/services/audio_service/common/src/audio_volume.cpp index 49a96eac9f..446a8c74bd 100644 --- a/services/audio_service/common/src/audio_volume.cpp +++ b/services/audio_service/common/src/audio_volume.cpp @@ -403,22 +403,22 @@ void AudioVolume::Monitor(uint32_t sessionId, bool isOutput) } } -void AudioVolume::SetFadoutState(uint32_t streamIndex, uint32_t fadeoutState) +void AudioVolume::SetFadeoutState(uint32_t streamIndex, uint32_t fadeoutState) { std::unique_lock lock(fadoutMutex_); fadeoutState_.insert_or_assign(streamIndex, fadeoutState); } -uint32_t AudioVolume::GetFadoutState(uint32_t streamIndex) +uint32_t AudioVolume::GetFadeoutState(uint32_t streamIndex) { std::shared_lock lock(fadoutMutex_); auto it = fadeoutState_.find(streamIndex); if (it != fadeoutState_.end()) { return it->second; } AUDIO_WARNING_LOG("No such streamIndex in map!"); - return 3; // 3 invalid + return INVALID_STATE; } -void AudioVolume::RemoveFadoutState(uint32_t streamIndex) +void AudioVolume::RemoveFadeoutState(uint32_t streamIndex) { std::unique_lock lock(fadoutMutex_); fadeoutState_.erase(streamIndex); @@ -472,14 +472,14 @@ void MonitorVolume(uint32_t sessionId, bool isOutput) AudioVolume::GetInstance()->Monitor(sessionId, isOutput); } -void SetFadoutState(uint32_t streamIndex, uint32_t fadoutState) +void SetFadeoutState(uint32_t streamIndex, uint32_t fadeoutState) { - AudioVolume::GetInstance()->SetFadoutState(streamIndex, fadoutState); + AudioVolume::GetInstance()->SetFadeoutState(streamIndex, fadeoutState); } -uint32_t GetFadoutState(uint32_t streamIndex) +uint32_t GetFadeoutState(uint32_t streamIndex) { - return AudioVolume::GetInstance()->GetFadoutState(streamIndex); + return AudioVolume::GetInstance()->GetFadeoutState(streamIndex); } #ifdef __cplusplus } diff --git a/services/audio_service/server/src/pa_renderer_stream_impl.cpp b/services/audio_service/server/src/pa_renderer_stream_impl.cpp index b34b9b8330..30d4c12f41 100644 --- a/services/audio_service/server/src/pa_renderer_stream_impl.cpp +++ b/services/audio_service/server/src/pa_renderer_stream_impl.cpp @@ -146,7 +146,7 @@ int32_t PaRendererStreamImpl::InitParams() lock.Unlock(); - AudioVolume::GetInstance()->SetFadoutState(sinkInputIndex_, 0); + AudioVolume::GetInstance()->SetFadeoutState(sinkInputIndex_, NO_FADE); // In plan: Get data from xml effectSceneName_ = processConfig_.rendererInfo.sceneType; @@ -199,13 +199,7 @@ int32_t PaRendererStreamImpl::Pause(bool isStandby) } pa_proplist *propList = pa_proplist_new(); if (propList != nullptr) { - AudioVolume::GetInstance()->SetFadoutState(sinkInputIndex_, 1); // 1 start fadout - pa_operation *updatePropOperation = pa_stream_proplist_update(paStream_, PA_UPDATE_REPLACE, propList, - nullptr, nullptr); - pa_proplist_free(propList); - CHECK_AND_RETURN_RET_LOG(updatePropOperation != nullptr, ERR_OPERATION_FAILED, "updatePropOp is nullptr"); - pa_operation_unref(updatePropOperation); - AUDIO_INFO_LOG("pa_stream_proplist_update done"); + AudioVolume::GetInstance()->SetFadeoutState(sinkInputIndex_, DO_FADE); if (!offloadEnable_) { palock.Unlock(); { @@ -304,13 +298,7 @@ int32_t PaRendererStreamImpl::Stop() pa_proplist *propList = pa_proplist_new(); if (propList != nullptr) { - AudioVolume::GetInstance()->SetFadoutState(sinkInputIndex_, 1); // 1 start fadout - pa_operation *updatePropOperation = pa_stream_proplist_update(paStream_, PA_UPDATE_REPLACE, propList, - nullptr, nullptr); - pa_proplist_free(propList); - CHECK_AND_RETURN_RET_LOG(updatePropOperation != nullptr, ERR_OPERATION_FAILED, "updatePropOp is nullptr"); - pa_operation_unref(updatePropOperation); - AUDIO_INFO_LOG("pa_stream_proplist_update done"); + AudioVolume::GetInstance()->SetFadeoutState(sinkInputIndex_, DO_FADE); if (!offloadEnable_) { palock.Unlock(); { @@ -376,7 +364,7 @@ int32_t PaRendererStreamImpl::Release() audioEffectVolume->StreamVolumeDelete(sessionIDTemp); } - AudioVolume::GetInstance()->RemoveFadoutState(sinkInputIndex_); + AudioVolume::GetInstance()->RemoveFadeoutState(sinkInputIndex_); PaLockGuard lock(mainloop_); if (paStream_) { -- Gitee From 15e78759a60628619bc94cbbbecac2dbd1b3b510 Mon Sep 17 00:00:00 2001 From: owenCreeper Date: Mon, 18 Nov 2024 13:10:08 +0800 Subject: [PATCH 5/5] fix coding style Signed-off-by: owenCreeper --- .../audio_service/server/src/pa_renderer_stream_impl.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/services/audio_service/server/src/pa_renderer_stream_impl.cpp b/services/audio_service/server/src/pa_renderer_stream_impl.cpp index 30d4c12f41..9f41c69c68 100644 --- a/services/audio_service/server/src/pa_renderer_stream_impl.cpp +++ b/services/audio_service/server/src/pa_renderer_stream_impl.cpp @@ -84,7 +84,6 @@ PaRendererStreamImpl::~PaRendererStreamImpl() pa_stream_set_underflow_callback(paStream_, nullptr, nullptr); pa_stream_set_moved_callback(paStream_, nullptr, nullptr); pa_stream_set_started_callback(paStream_, nullptr, nullptr); - pa_stream_disconnect(paStream_); } pa_stream_unref(paStream_); @@ -96,9 +95,7 @@ int32_t PaRendererStreamImpl::InitParams() { PaLockGuard lock(mainloop_); rendererStreamInstanceMap_.Insert(this, weak_from_this()); - if (CheckReturnIfStreamInvalid(paStream_, ERR_ILLEGAL_STATE) < 0) { - return ERR_ILLEGAL_STATE; - } + if (CheckReturnIfStreamInvalid(paStream_, ERR_ILLEGAL_STATE) < 0) { return ERR_ILLEGAL_STATE; } sinkInputIndex_ = pa_stream_get_index(paStream_); pa_stream_set_moved_callback(paStream_, PAStreamMovedCb, -- Gitee