From 2608aa164d94fee87ec2a4daeba0a8b47f730d83 Mon Sep 17 00:00:00 2001 From: dongyu_dy Date: Mon, 15 Jul 2024 08:59:57 +0000 Subject: [PATCH 1/2] optimize audio pause for WAV music Signed-off-by: dongyu_dy --- services/media_engine/modules/sink/audio_sink.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/services/media_engine/modules/sink/audio_sink.cpp b/services/media_engine/modules/sink/audio_sink.cpp index 54940df03..201957a9c 100644 --- a/services/media_engine/modules/sink/audio_sink.cpp +++ b/services/media_engine/modules/sink/audio_sink.cpp @@ -20,6 +20,7 @@ namespace { constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, LOG_DOMAIN_SYSTEM_PLAYER, "HiStreamer" }; +constexpr int64_t MAX_BUFFER_DURATION_US = 200000; // Max buffer duration is 200 ms } namespace OHOS { @@ -288,6 +289,9 @@ void AudioSink::UpdateAudioWriteTimeMayWait() if (latestBufferDuration_ <= 0) { return; } + if (latestBufferDuration_ > MAX_BUFFER_DURATION_US) { + latestBufferDuration_ = MAX_BUFFER_DURATION_US; // wait at most MAX_DURATION + } int64_t timeNow = Plugins::HstTime2Us(SteadyClock::GetCurrentTimeNanoSec()); if (!lastBufferWriteSuccess_) { int64_t writeSleepTime = latestBufferDuration_ - (timeNow - lastBufferWriteTime_); @@ -390,7 +394,11 @@ int64_t AudioSink::DoSyncWrite(const std::shared_ptr& buf forceUpdateTimeAnchorNextTime_ = true; } latestBufferPts_ = buffer->pts_ - firstPts_; - latestBufferDuration_ = playingBufferDurationUs_ / speed_; + if (playingBufferDurationUs_ > 0) { + latestBufferDuration_ = playingBufferDurationUs_ / speed_; + } else { + latestBufferDuration_ = buffer->duration_; + } return render ? 0 : -1; } -- Gitee From 13ec2e47c70934e3dee0a98c133c8c6bb53b2283 Mon Sep 17 00:00:00 2001 From: dongyu_dy Date: Mon, 15 Jul 2024 09:04:52 +0000 Subject: [PATCH 2/2] update services/media_engine/modules/sink/audio_sink.cpp. Signed-off-by: dongyu_dy --- services/media_engine/modules/sink/audio_sink.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/media_engine/modules/sink/audio_sink.cpp b/services/media_engine/modules/sink/audio_sink.cpp index 201957a9c..ce1f18463 100644 --- a/services/media_engine/modules/sink/audio_sink.cpp +++ b/services/media_engine/modules/sink/audio_sink.cpp @@ -397,7 +397,7 @@ int64_t AudioSink::DoSyncWrite(const std::shared_ptr& buf if (playingBufferDurationUs_ > 0) { latestBufferDuration_ = playingBufferDurationUs_ / speed_; } else { - latestBufferDuration_ = buffer->duration_; + latestBufferDuration_ = buffer->duration_ / speed_; } return render ? 0 : -1; } -- Gitee