From bb42d5dfdccf7f0985b2d0acb79510527b1b261a Mon Sep 17 00:00:00 2001 From: sunshinglight Date: Sat, 6 Sep 2025 12:22:30 +0000 Subject: [PATCH] illegal streamStatus change Signed-off-by: sunshinglight Change-Id: I63b0ccf9c3d0c48de8b62ed3e885b58588a9986b --- .../common/include/i_audio_process_stream.h | 2 ++ .../server/include/audio_process_in_server.h | 5 ++++- .../audio_service/server/src/audio_endpoint.cpp | 10 +++------- .../server/src/audio_process_in_server.cpp | 14 ++++++++++++-- .../src/audio_endpoint_plus_unit_test.cpp | 2 ++ 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/services/audio_service/common/include/i_audio_process_stream.h b/services/audio_service/common/include/i_audio_process_stream.h index 73feb37c55..00dede1733 100644 --- a/services/audio_service/common/include/i_audio_process_stream.h +++ b/services/audio_service/common/include/i_audio_process_stream.h @@ -57,6 +57,8 @@ public: virtual uint32_t GetByteSizePerFrame() = 0; + virtual StreamStatus GetStreamInServerStatus() = 0; + virtual void EnableStandby(); virtual ~IAudioProcessStream() = default; diff --git a/services/audio_service/server/include/audio_process_in_server.h b/services/audio_service/server/include/audio_process_in_server.h index 50bb9774c5..9305568ed2 100644 --- a/services/audio_service/server/include/audio_process_in_server.h +++ b/services/audio_service/server/include/audio_process_in_server.h @@ -138,7 +138,8 @@ public: StreamStatus GetStreamStatus() override; RestoreStatus RestoreSession(RestoreInfo restoreInfo); int32_t StopSession(); - + StreamStatus GetStreamInServerStatus() override; + bool TurnOnMicIndicator(CapturerState capturerState); bool TurnOffMicIndicator(CapturerState capturerState); @@ -206,6 +207,8 @@ private: std::shared_ptr audioStreamChecker_ = nullptr; std::atomic audioHapticsSyncId_ = 0; + + StreamStatus streamStatusInServer_ = STREAM_INVALID; }; } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_service/server/src/audio_endpoint.cpp b/services/audio_service/server/src/audio_endpoint.cpp index a3ef72f960..a73222ce19 100644 --- a/services/audio_service/server/src/audio_endpoint.cpp +++ b/services/audio_service/server/src/audio_endpoint.cpp @@ -1976,13 +1976,9 @@ void AudioEndpointInner::WriteToProcessBuffers(const BufferDesc &readBuf) CheckRecordSignal(readBuf.buffer, readBuf.bufLength); std::lock_guard lock(listLock_); for (size_t i = 0; i < processBufferList_.size(); i++) { - CHECK_AND_CONTINUE_LOG(processBufferList_[i] != nullptr, "process buffer %{public}zu is null.", i); - if (processBufferList_[i]->GetStreamStatus() && - processBufferList_[i]->GetStreamStatus()->load() != STREAM_RUNNING) { - AUDIO_WARNING_LOG("process buffer %{public}zu not running, stream status %{public}d.", - i, processBufferList_[i]->GetStreamStatus()->load()); - continue; - } + CHECK_AND_CONTINUE_LOG(processBufferList_[i] != nullptr && + processList_[i] != nullptr, "process buffer %{public}zu is null.", i); + CHECK_AND_CONTINUE(processList_[i]->GetStreamInServerStatus() == STREAM_RUNNING); int32_t ret = WriteToSpecialProcBuf(processBufferList_[i], readBuf, processList_[i]->GetConvertedBuffer(), processList_[i]->GetMuteState()); diff --git a/services/audio_service/server/src/audio_process_in_server.cpp b/services/audio_service/server/src/audio_process_in_server.cpp index 22604740a2..ec1d79d4f5 100644 --- a/services/audio_service/server/src/audio_process_in_server.cpp +++ b/services/audio_service/server/src/audio_process_in_server.cpp @@ -46,7 +46,6 @@ sptr AudioProcessInServer::Create(const AudioProcessConfig ProcessReleaseCallback *releaseCallback) { sptr process = new(std::nothrow) AudioProcessInServer(processConfig, releaseCallback); - return process; } @@ -77,6 +76,7 @@ AudioProcessInServer::AudioProcessInServer(const AudioProcessConfig &processConf } audioStreamChecker_ = std::make_shared(processConfig); AudioStreamMonitor::GetInstance().AddCheckForMonitor(processConfig.originalSessionId, audioStreamChecker_); + streamStatusInServer_ = STREAM_IDEL; } AudioProcessInServer::~AudioProcessInServer() @@ -297,6 +297,7 @@ int32_t AudioProcessInServer::Start() lastWriteFrame_ = static_cast(processBuffer_->GetCurReadFrame()); } lastWriteMuteFrame_ = 0; + streamStatusInServer_ = STREAM_RUNNING; return ret; } @@ -378,6 +379,7 @@ int32_t AudioProcessInServer::Pause(bool isFlush) AudioPerformanceMonitor::GetInstance().PauseSilenceMonitor(sessionId_); NotifyXperfOnPlayback(processConfig_.audioMode, XPERF_EVENT_STOP); HILOG_COMM_INFO("Pause in server success!"); + streamStatusInServer_ = STREAM_PAUSED; return SUCCESS; } @@ -406,6 +408,7 @@ int32_t AudioProcessInServer::Resume() audioStreamChecker_->MonitorOnAllCallback(AUDIO_STREAM_START, false); NotifyXperfOnPlayback(processConfig_.audioMode, XPERF_EVENT_START); HILOG_COMM_INFO("Resume in server success!"); + streamStatusInServer_ = STREAM_RUNNING; return SUCCESS; } @@ -450,6 +453,7 @@ int32_t AudioProcessInServer::Stop(int32_t stage) AudioPerformanceMonitor::GetInstance().PauseSilenceMonitor(sessionId_); NotifyXperfOnPlayback(processConfig_.audioMode, XPERF_EVENT_STOP); HILOG_COMM_INFO("Stop in server success!"); + streamStatusInServer_ = STREAM_STOPPED; return SUCCESS; } @@ -474,6 +478,7 @@ int32_t AudioProcessInServer::Release(bool isSwitchStream) ret = releaseCallback_->OnProcessRelease(this, isSwitchStream); NotifyXperfOnPlayback(processConfig_.audioMode, XPERF_EVENT_RELEASE); HILOG_COMM_INFO("notify service release result: %{public}d", ret); + streamStatusInServer_ = STREAM_RELEASED; return SUCCESS; } @@ -845,7 +850,7 @@ RestoreStatus AudioProcessInServer::RestoreSession(RestoreInfo restoreInfo) processConfig_.appInfo.appUid, processConfig_.appInfo.appPid, processConfig_.appInfo.appTokenId, - HandleStreamStatusToCapturerState(streamStatus_->load()) + HandleStreamStatusToCapturerState(streamStatusInServer_) }; AUDIO_INFO_LOG("Insert switchStream:%{public}u uid:%{public}d tokenId:%{public}u " "Reason:NEED_RESTORE", sessionId_, info.callerUid, info.appTokenId); @@ -890,5 +895,10 @@ void AudioProcessInServer::NotifyXperfOnPlayback(AudioMode audioMode, XperfEvent processConfig_.rendererInfo.streamUsage, sessionId_, processConfig_.appInfo.appPid, processConfig_.appInfo.appUid); } + +StreamStatus AudioProcessInServer::GetStreamInServerStatus() +{ + return streamStatusInServer_; +} } // namespace AudioStandard } // namespace OHOS diff --git a/services/audio_service/test/unittest/audio_endpoint_unit_test/src/audio_endpoint_plus_unit_test.cpp b/services/audio_service/test/unittest/audio_endpoint_unit_test/src/audio_endpoint_plus_unit_test.cpp index 73a58f852b..c5e21c8674 100644 --- a/services/audio_service/test/unittest/audio_endpoint_unit_test/src/audio_endpoint_plus_unit_test.cpp +++ b/services/audio_service/test/unittest/audio_endpoint_unit_test/src/audio_endpoint_plus_unit_test.cpp @@ -59,6 +59,8 @@ public: MOCK_METHOD(uint32_t, GetSpanSizeInFrame, (), (override)); MOCK_METHOD(uint32_t, GetByteSizePerFrame, (), (override)); + MOCK_METHOD(StreamStatus, GetStreamInServerStatus, (), (override)); + // Non-pure virtual methods (with default implementations in interface) MOCK_METHOD(void, EnableStandby, (), (override)); -- Gitee