From e64fac3ddc19f82b7f87c03c9a0da184a75931ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=99=93=E6=B8=AF?= Date: Fri, 12 Sep 2025 17:56:59 +0800 Subject: [PATCH 1/3] Fix gallery progress bar stuttering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李晓港 --- interfaces/inner_api/native/audio_sink.h | 1 + .../inner_api/native/media_sync_manager.h | 6 ++ .../media_engine/modules/sink/audio_sink.cpp | 27 ++++- .../modules/sink/i_media_sync_center.h | 6 ++ .../modules/sink/media_sync_manager.cpp | 26 +++++ .../mock/media_sync_manager.h | 3 + .../media_sink_test/audio_sink_test.cpp | 100 ++++++++++++++++++ .../mock/include/media_sync_center_mock.h | 3 + .../mock/src/media_sync_center_mock.cpp | 15 +++ .../media_sink_test/sync_manager_test.cpp | 28 +++++ .../mock/media_sync_manager.h | 3 + .../sei_parser_filter_unittest.h | 3 + .../mock/media_sync_manager.h | 3 + .../mock/media_sync_manager.h | 3 + .../mock/media_sync_manager.h | 3 + 15 files changed, 229 insertions(+), 1 deletion(-) diff --git a/interfaces/inner_api/native/audio_sink.h b/interfaces/inner_api/native/audio_sink.h index 2293ed249..53ae5cd03 100644 --- a/interfaces/inner_api/native/audio_sink.h +++ b/interfaces/inner_api/native/audio_sink.h @@ -306,6 +306,7 @@ private: int64_t GetLastReportedClockTime() const; int64_t GetLastBufferPTS() const; int64_t GetBufferDuration() const; + int64_t GetCurrentRenderPts() const; int64_t CalculateAudioLatency(); void UpdateReportTime(int64_t nowClockTime); void UpdateLastBufferPTS(int64_t bufferOffset, float speed); diff --git a/interfaces/inner_api/native/media_sync_manager.h b/interfaces/inner_api/native/media_sync_manager.h index 40e027d6d..a8f967e7d 100644 --- a/interfaces/inner_api/native/media_sync_manager.h +++ b/interfaces/inner_api/native/media_sync_manager.h @@ -62,6 +62,9 @@ public: void SetMediaStartPts(int64_t startPts) override; void SetLastAudioBufferDuration(int64_t durationUs) override; void SetLastVideoBufferPts(int64_t bufferPts) override; + void SetAudioRenderPts(int64_t audioRenderPts) override; + void SetHasAudio(bool hasAudio) override; + void SetAudioEos(bool isEos) override; Status SetPlaybackRate(float rate) override; void SetInitialVideoFrameRate(double frameRate); @@ -157,6 +160,9 @@ private: int8_t currentRangeEndPriority_ {IMediaSynchronizer::NONE}; int64_t lastVideoBufferAbsPts_ {HST_TIME_NONE}; + int64_t audioRenderPts_ {HST_TIME_NONE}; + bool hasAudio_ {false}; + bool isAudioEos_ {false}; }; } // namespace Pipeline } // namespace Media diff --git a/services/media_engine/modules/sink/audio_sink.cpp b/services/media_engine/modules/sink/audio_sink.cpp index 1a7881820..c9d00971c 100644 --- a/services/media_engine/modules/sink/audio_sink.cpp +++ b/services/media_engine/modules/sink/audio_sink.cpp @@ -41,6 +41,7 @@ constexpr int64_t OVERTIME_WARNING_MS = 50; constexpr int64_t FORMAT_CHANGE_MS = 100; constexpr int64_t BUFFER_CONSUME_MS = 50; constexpr int64_t FIX_DELAY_MS_AUDIO_VIVID = 80; +constexpr int64_t ANCHOR_UPDATE_PERIOD_US_FIRST_STAGE = 20000; } namespace OHOS { @@ -304,6 +305,11 @@ Status AudioSink::Start() return ret; } isEos_ = false; + auto syncCenter = syncCenter_.lock(); + if (syncCenter) { + syncCenter->SetAudioEos(false); + syncCenter->SetAudioRenderPts(HST_TIME_NONE); + } state_ = Pipeline::FilterState::RUNNING; FALSE_RETURN_V_NOLOG(playerEventReceiver_ != nullptr, Status::OK); playerEventReceiver_->OnMemoryUsageEvent({"AUDIO_SINK_BQ", @@ -379,6 +385,11 @@ Status AudioSink::Resume() return ret; } isEos_ = false; + auto syncCenter = syncCenter_.lock(); + if (syncCenter) { + syncCenter->SetAudioEos(false); + syncCenter->SetAudioRenderPts(HST_TIME_NONE); + } state_ = Pipeline::FilterState::RUNNING; AutoLock lock(eosMutex_); if (eosInterruptType_ == EosInterruptState::PAUSE) { @@ -596,6 +607,7 @@ void AudioSink::DrainAndReportEosEvent() isEos_ = true; auto syncCenter = syncCenter_.lock(); if (syncCenter) { + syncCenter->SetAudioEos(true); syncCenter->ReportEos(this); } Event event { @@ -900,6 +912,11 @@ int64_t AudioSink::AudioDataSynchroizer::GetBufferDuration() const return bufferDuration_; } +int64_t AudioSink::AudioDataSynchroizer::GetCurrentRenderPts() const +{ + return currentRenderPTS_; +} + void AudioSink::AudioDataSynchroizer::UpdateReportTime(int64_t nowClockTime) { lastReportedClockTime_ = nowClockTime; @@ -927,9 +944,12 @@ bool AudioSink::IsTimeAnchorNeedUpdate() int64_t nowCt = syncCenter->GetClockTimeNow(); bool needUpdate = forceUpdateTimeAnchorNextTime_ || (lastAnchorClockTime == HST_TIME_NONE) || - (nowCt - lastAnchorClockTime >= ANCHOR_UPDATE_PERIOD_US); + (nowCt - lastAnchorClockTime >= ANCHOR_UPDATE_PERIOD_US) || + (innerSynchroizer_->GetCurrentRenderPts() == 0 && + (nowCt - lastAnchorClockTime >= ANCHOR_UPDATE_PERIOD_US_FIRST_STAGE)); FALSE_RETURN_V_MSG_D(needUpdate, false, "No need to update time anchor this time."); UpdateRenderInfo(); + syncCenter->SetAudioRenderPts(innerSynchroizer_->GetCurrentRenderPts()); int64_t latency = innerSynchroizer_->CalculateAudioLatency(); MEDIA_LOG_DD("Calculate latency = " PUBLIC_LOG_U64, latency); int64_t lastBufferPTS = innerSynchroizer_->GetLastBufferPTS(); @@ -1505,6 +1525,11 @@ void AudioSink::SetSyncCenter(std::shared_ptr syncCe { syncCenter_ = syncCenter; MediaSynchronousSink::Init(); + auto syncCenterPtr = syncCenter_.lock(); + if (syncCenterPtr) { + MEDIA_LOG_I("SetSyncCenter has audio"); + syncCenter->SetHasAudio(true); + } } Status AudioSink::ChangeTrackForFormatChange() diff --git a/services/media_engine/modules/sink/i_media_sync_center.h b/services/media_engine/modules/sink/i_media_sync_center.h index 376c456fe..9cbfe9704 100644 --- a/services/media_engine/modules/sink/i_media_sync_center.h +++ b/services/media_engine/modules/sink/i_media_sync_center.h @@ -114,6 +114,12 @@ struct IMediaSyncCenter { virtual double GetInitialVideoFrameRate() = 0; virtual int64_t GetLastVideoBufferAbsPts() const = 0; + + virtual void SetAudioRenderPts(int64_t audioRenderPts) = 0; + + virtual void SetHasAudio(bool hasAudio) = 0; + + virtual void SetAudioEos(bool isEos) = 0; }; } // namespace Pipeline } // namespace Media diff --git a/services/media_engine/modules/sink/media_sync_manager.cpp b/services/media_engine/modules/sink/media_sync_manager.cpp index 009d1926c..1ba628ccd 100644 --- a/services/media_engine/modules/sink/media_sync_manager.cpp +++ b/services/media_engine/modules/sink/media_sync_manager.cpp @@ -197,6 +197,9 @@ Status MediaSyncManager::Reset() isFrameAfterSeeked_ = false; lastReportMediaTime_ = HST_TIME_NONE; firstMediaTimeAfterSeek_ = HST_TIME_NONE; + audioRenderPts_ = HST_TIME_NONE; + isAudioEos_ = false; + hasAudio_ = false; return Status::OK; } @@ -359,6 +362,14 @@ int64_t MediaSyncManager::GetMediaTimeNow() for (const auto &func : setMediaTimeFuncs) { FALSE_RETURN_V_NOLOG(func(this, currentMediaTime), currentMediaTime); } + if (hasAudio_ && !isAudioEos_ && (audioRenderPts_ == HST_TIME_NONE || audioRenderPts_ == 0)) { + if (isFrameAfterSeeked_) { + MEDIA_LOG_I("report seekingMediaTime when audio is not render: %{public}" PRId64, seekingMediaTime_); + return seekingMediaTime_; + } + MEDIA_LOG_I("report HST_TIME_NONE when audio is not render"); + return HST_TIME_NONE; + } currentMediaTime = BoundMediaProgress(currentMediaTime); lastReportMediaTime_ = currentMediaTime; MEDIA_LOG_D_SHORT("GetMediaTimeNow currentMediaTime: %{public}" PRId64, currentMediaTime); @@ -490,6 +501,21 @@ int64_t MediaSyncManager::GetLastVideoBufferAbsPts() const MEDIA_LOG_D("GetLastVideoBufferAbsPts" PUBLIC_LOG_D64, lastVideoBufferAbsPts_); return lastVideoBufferAbsPts_; } + +void MediaSyncManager::SetAudioRenderPts(int64_t audioRenderPts) +{ + audioRenderPts_ = audioRenderPts; +} + +void MediaSyncManager::SetHasAudio(bool hasAudio) +{ + hasAudio_ = hasAudio; +} + +void MediaSyncManager::SetAudioEos(bool isEos) +{ + isAudioEos_ = isEos; +} } // namespace Pipeline } // namespace Media } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/media_demuxer_ext_test/mock/media_sync_manager.h b/test/unittest/media_demuxer_ext_test/mock/media_sync_manager.h index 02002e56e..ff0e66ba9 100644 --- a/test/unittest/media_demuxer_ext_test/mock/media_sync_manager.h +++ b/test/unittest/media_demuxer_ext_test/mock/media_sync_manager.h @@ -64,6 +64,9 @@ public: MOCK_METHOD(Status, Seek, (int64_t mediaTime, bool isClosest), ()); MOCK_METHOD(Status, Stop, (), ()); MOCK_METHOD(bool, InSeeking, (), ()); + MOCK_METHOD(void, SetAudioRenderPts, (int64_t audioRenderPts), ()); + MOCK_METHOD(void, SetHasAudio, (bool hasAudio), ()); + MOCK_METHOD(void, SetAudioEos, (bool isEos), ()); }; } // namespace Pipeline } // namespace Media diff --git a/test/unittest/media_sink_test/audio_sink_test.cpp b/test/unittest/media_sink_test/audio_sink_test.cpp index 473dccefe..737629627 100644 --- a/test/unittest/media_sink_test/audio_sink_test.cpp +++ b/test/unittest/media_sink_test/audio_sink_test.cpp @@ -19,6 +19,7 @@ #include "filter/filter.h" #include "common/log.h" #include "sink/media_synchronous_sink.h" +#include "media_sync_center_mock.h" namespace { constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_ONLY_PRERELEASE, LOG_DOMAIN_SYSTEM_PLAYER, "AudioSinkTest" }; @@ -1434,6 +1435,105 @@ HWTEST(TestAudioSink, audio_sink_CacheBuffer_003, TestSize.Level1) auto ret = audioSink->CacheBuffer(); ASSERT_TRUE(ret == Status::OK); + +HWTEST(TestAudioSink, IsTimeAnchorNeedUpdate_001, TestSize.Level1) +{ + auto audioSink = AudioSinkCreate(); + ASSERT_TRUE(audioSink != nullptr); + audioSink->SetSyncCenter(nullptr); + + bool result = audioSink->IsTimeAnchorNeedUpdate(); + ASSERT_FALSE(result); +} + +HWTEST(TestAudioSink, IsTimeAnchorNeedUpdate_002, TestSize.Level1) +{ + auto audioSink = AudioSinkCreate(); + ASSERT_TRUE(audioSink != nullptr); + auto mockSyncCenter = std::make_shared(); + audioSink->SetSyncCenter(mockSyncCenter); + audioSink->forceUpdateTimeAnchorNextTime_ = false; + audioSink->innerSynchroizer_->lastReportedClockTime_ = -1; + audioSink->innerSynchroizer_->currentRenderPTS_ = 100; + mockSyncCenter->returnInt64Queue_.push(1); + + bool result = audioSink->IsTimeAnchorNeedUpdate(); + ASSERT_TRUE(result); +} + +HWTEST(TestAudioSink, IsTimeAnchorNeedUpdate_003, TestSize.Level1) +{ + auto audioSink = AudioSinkCreate(); + ASSERT_TRUE(audioSink != nullptr); + auto mockSyncCenter = std::make_shared(); + audioSink->SetSyncCenter(mockSyncCenter); + audioSink->forceUpdateTimeAnchorNextTime_ = false; + audioSink->innerSynchroizer_->lastReportedClockTime_ = 0; + audioSink->innerSynchroizer_->currentRenderPTS_ = 100; + mockSyncCenter->returnInt64Queue_.push(200000); + + bool result = audioSink->IsTimeAnchorNeedUpdate(); + ASSERT_TRUE(result); +} + +HWTEST(TestAudioSink, IsTimeAnchorNeedUpdate_004, TestSize.Level1) +{ + auto audioSink = AudioSinkCreate(); + ASSERT_TRUE(audioSink != nullptr); + auto mockSyncCenter = std::make_shared(); + audioSink->SetSyncCenter(mockSyncCenter); + audioSink->forceUpdateTimeAnchorNextTime_ = false; + audioSink->innerSynchroizer_->lastReportedClockTime_ = 0; + audioSink->innerSynchroizer_->currentRenderPTS_ = 0; + mockSyncCenter->returnInt64Queue_.push(20000); + + bool result = audioSink->IsTimeAnchorNeedUpdate(); + ASSERT_TRUE(result); +} + +HWTEST(TestAudioSink, IsTimeAnchorNeedUpdate_005, TestSize.Level1) +{ + auto audioSink = AudioSinkCreate(); + ASSERT_TRUE(audioSink != nullptr); + auto mockSyncCenter = std::make_shared(); + audioSink->SetSyncCenter(mockSyncCenter); + audioSink->forceUpdateTimeAnchorNextTime_ = false; + audioSink->innerSynchroizer_->lastReportedClockTime_ = 0; + audioSink->innerSynchroizer_->currentRenderPTS_ = 100; + mockSyncCenter->returnInt64Queue_.push(100000); + + bool result = audioSink->IsTimeAnchorNeedUpdate(); + ASSERT_FALSE(result); +} + +HWTEST(TestAudioSink, IsTimeAnchorNeedUpdate_006, TestSize.Level1) +{ + auto audioSink = AudioSinkCreate(); + ASSERT_TRUE(audioSink != nullptr); + auto mockSyncCenter = std::make_shared(); + audioSink->SetSyncCenter(mockSyncCenter); + audioSink->forceUpdateTimeAnchorNextTime_ = false; + audioSink->innerSynchroizer_->lastReportedClockTime_ = 0; + audioSink->innerSynchroizer_->currentRenderPTS_ = 0; + mockSyncCenter->returnInt64Queue_.push(10000); + + bool result = audioSink->IsTimeAnchorNeedUpdate(); + ASSERT_FALSE(result); +} + +HWTEST(TestAudioSink, IsTimeAnchorNeedUpdate_007, TestSize.Level1) +{ + auto audioSink = AudioSinkCreate(); + ASSERT_TRUE(audioSink != nullptr); + auto mockSyncCenter = std::make_shared(); + audioSink->SetSyncCenter(mockSyncCenter); + audioSink->forceUpdateTimeAnchorNextTime_ = true; + audioSink->innerSynchroizer_->lastReportedClockTime_ = 0; + audioSink->innerSynchroizer_->currentRenderPTS_ = 100; + mockSyncCenter->returnInt64Queue_.push(1); + + bool result = audioSink->IsTimeAnchorNeedUpdate(); + ASSERT_TRUE(result); } } // namespace Test } // namespace Media diff --git a/test/unittest/media_sink_test/mock/include/media_sync_center_mock.h b/test/unittest/media_sink_test/mock/include/media_sync_center_mock.h index aba22d249..94e71d6b4 100644 --- a/test/unittest/media_sink_test/mock/include/media_sync_center_mock.h +++ b/test/unittest/media_sink_test/mock/include/media_sync_center_mock.h @@ -43,6 +43,9 @@ public: void SetMediaStartPts(int64_t startPts) override; int64_t GetMediaStartPts() override; void SetLastVideoBufferPts(int64_t bufferPts) override; + void SetAudioRenderPts(int64_t audioRenderPts) override; + void SetHasAudio(bool hasAudio) override; + void SetAudioEos(bool isEos) override; public: bool returnBool_{false}; std::queue returnInt64Queue_{}; diff --git a/test/unittest/media_sink_test/mock/src/media_sync_center_mock.cpp b/test/unittest/media_sink_test/mock/src/media_sync_center_mock.cpp index ad5d0a604..e978855c5 100644 --- a/test/unittest/media_sink_test/mock/src/media_sync_center_mock.cpp +++ b/test/unittest/media_sink_test/mock/src/media_sync_center_mock.cpp @@ -143,6 +143,21 @@ void MockMediaSyncCenter::SetLastVideoBufferPts(int64_t bufferPts) (void)bufferPts; setLastVideoBufferPtsTimes_++; } + +void MockMediaSyncCenter::SetAudioRenderPts(int64_t audioRenderPts) +{ + (void)audioRenderPts; +} + +void MockMediaSyncCenter::SetHasAudio(bool hasAudio) +{ + (void)hasAudio; +} + +void MockMediaSyncCenter::SetAudioEos(bool isEos) +{ + (void)isEos; +} } // namespace Test } // namespace Media } // namespace OHOS \ No newline at end of file diff --git a/test/unittest/media_sink_test/sync_manager_test.cpp b/test/unittest/media_sink_test/sync_manager_test.cpp index 9668d0c6d..85563136a 100644 --- a/test/unittest/media_sink_test/sync_manager_test.cpp +++ b/test/unittest/media_sink_test/sync_manager_test.cpp @@ -515,6 +515,7 @@ HWTEST_F(TestSyncManager, GetMediaTimeNow_001, TestSize.Level0) HWTEST_F(TestSyncManager, GetMediaTimeNow_002, TestSize.Level0) { MediaSyncManager mediaSyncManager; + mediaSyncManager.audioRenderPts_ = 100; mediaSyncManager.isSeeking_ = false; mediaSyncManager.lastReportMediaTime_ = 100; mediaSyncManager.pausedMediaTime_ = 120; @@ -545,6 +546,7 @@ HWTEST_F(TestSyncManager, GetMediaTimeNow_004, TestSize.Level0) { MediaSyncManager mediaSyncManager; int64_t lastReportMediaTime_ = 110; + mediaSyncManager.audioRenderPts_ = 100; mediaSyncManager.isSeeking_ = false; mediaSyncManager.clockState_ = MediaSyncManager::State::RESUMED; mediaSyncManager.lastReportMediaTime_ = lastReportMediaTime_; @@ -566,6 +568,7 @@ HWTEST_F(TestSyncManager, GetMediaTimeNow_005, TestSize.Level0) { MediaSyncManager mediaSyncManager; int64_t lastReportMediaTime_ = 110; + mediaSyncManager.audioRenderPts_ = 100; mediaSyncManager.isSeeking_ = false; mediaSyncManager.clockState_ = MediaSyncManager::State::RESUMED; mediaSyncManager.lastReportMediaTime_ = lastReportMediaTime_; @@ -587,6 +590,7 @@ HWTEST_F(TestSyncManager, GetMediaTimeNow_006, TestSize.Level0) { MediaSyncManager mediaSyncManager; int64_t lastReportMediaTime_ = 110; + mediaSyncManager.audioRenderPts_ = 100; mediaSyncManager.isSeeking_ = false; mediaSyncManager.clockState_ = MediaSyncManager::State::RESUMED; mediaSyncManager.lastReportMediaTime_ = lastReportMediaTime_; @@ -605,6 +609,7 @@ HWTEST_F(TestSyncManager, GetMediaTimeNow_006, TestSize.Level0) HWTEST_F(TestSyncManager, GetMediaTimeNow_007, TestSize.Level0) { + syncManager_->audioRenderPts_ = 100; syncManager_->isSeeking_ = false; syncManager_->clockState_ = MediaSyncManager::State::PAUSED; syncManager_->pausedMediaTime_ = 50; @@ -617,6 +622,7 @@ HWTEST_F(TestSyncManager, GetMediaTimeNow_007, TestSize.Level0) HWTEST_F(TestSyncManager, GetMediaTimeNow_008, TestSize.Level0) { + syncManager_->audioRenderPts_ = 100; syncManager_->isSeeking_ = false; syncManager_->clockState_ = MediaSyncManager::State::PAUSED; syncManager_->pausedMediaTime_ = 100; @@ -626,6 +632,28 @@ HWTEST_F(TestSyncManager, GetMediaTimeNow_008, TestSize.Level0) EXPECT_EQ(syncManager_->GetMediaTimeNow(), 50); } +HWTEST_F(TestSyncManager, GetMediaTimeNow_009, TestSize.Level0) +{ + syncManager_->isSeeking_ = false; + syncManager_->clockState_ = MediaSyncManager::State::PAUSED; + syncManager_->pausedMediaTime_ = 100; + syncManager_->firstMediaTimeAfterSeek_ = 150; + syncManager_->currentAnchorMediaTime_ = 50; + syncManager_->audioRenderPts_ = HST_TIME_NONE; + EXPECT_EQ(syncManager_->GetMediaTimeNow(), HST_TIME_NONE); +} + +HWTEST_F(TestSyncManager, GetMediaTimeNow_010, TestSize.Level0) +{ + syncManager_->isSeeking_ = false; + syncManager_->clockState_ = MediaSyncManager::State::PAUSED; + syncManager_->pausedMediaTime_ = 100; + syncManager_->firstMediaTimeAfterSeek_ = 150; + syncManager_->currentAnchorMediaTime_ = 50; + syncManager_->audioRenderPts_ = 0; + EXPECT_EQ(syncManager_->GetMediaTimeNow(), HST_TIME_NONE); +} + HWTEST_F(TestSyncManager, SetLastAudioBufferDuration_001, TestSize.Level0) { syncManager_->SetLastAudioBufferDuration(50); diff --git a/test/unittest/media_synchronous_sink_unittest/mock/media_sync_manager.h b/test/unittest/media_synchronous_sink_unittest/mock/media_sync_manager.h index 85720019f..109653e3a 100644 --- a/test/unittest/media_synchronous_sink_unittest/mock/media_sync_manager.h +++ b/test/unittest/media_synchronous_sink_unittest/mock/media_sync_manager.h @@ -64,6 +64,9 @@ public: MOCK_METHOD(Status, Seek, (int64_t mediaTime, bool isClosest), ()); MOCK_METHOD(Status, Stop, (), ()); MOCK_METHOD(bool, InSeeking, (), ()); + MOCK_METHOD(void, SetAudioRenderPts, (int64_t audioRenderPts), ()); + MOCK_METHOD(void, SetHasAudio, (bool hasAudio), ()); + MOCK_METHOD(void, SetAudioEos, (bool isEos), ()); std::atomic isFrameAfterSeeked_ {false}; }; } // namespace Pipeline diff --git a/test/unittest/sei_parser_filter_unittest/sei_parser_filter_unittest.h b/test/unittest/sei_parser_filter_unittest/sei_parser_filter_unittest.h index 08a4574af..159a351d3 100644 --- a/test/unittest/sei_parser_filter_unittest/sei_parser_filter_unittest.h +++ b/test/unittest/sei_parser_filter_unittest/sei_parser_filter_unittest.h @@ -123,6 +123,9 @@ public: MOCK_METHOD(void, SetLastVideoBufferAbsPts, (int64_t lastVideoBufferAbsPts), (override)); MOCK_METHOD(double, GetInitialVideoFrameRate, (), (override)); MOCK_METHOD(int64_t, GetLastVideoBufferAbsPts, (), (const, override)); + MOCK_METHOD(void, SetAudioRenderPts, (int64_t audioRenderPts), (override)); + MOCK_METHOD(void, SetHasAudio, (bool hasAudio), (override)); + MOCK_METHOD(void, SetAudioEos, (bool isEos), (override)); }; class MockEventReceiver : public EventReceiver { diff --git a/test/unittest/sei_parser_helper_unittest/mock/media_sync_manager.h b/test/unittest/sei_parser_helper_unittest/mock/media_sync_manager.h index e4e623c59..373bbc5c3 100644 --- a/test/unittest/sei_parser_helper_unittest/mock/media_sync_manager.h +++ b/test/unittest/sei_parser_helper_unittest/mock/media_sync_manager.h @@ -60,6 +60,9 @@ public: MOCK_METHOD(Status, Reset, (), (override)); MOCK_METHOD(void, SetLastVideoBufferAbsPts, (int64_t lastVideoBufferAbsPts), (override)); MOCK_METHOD(int64_t, GetLastVideoBufferAbsPts, (), (const, override)); + MOCK_METHOD(void, SetAudioRenderPts, (int64_t audioRenderPts), (override)); + MOCK_METHOD(void, SetHasAudio, (bool hasAudio), (override)); + MOCK_METHOD(void, SetAudioEos, (bool isEos), (override)); MOCK_METHOD(Status, Pause, (), ()); MOCK_METHOD(Status, Resume, (), ()); MOCK_METHOD(Status, Seek, (int64_t mediaTime, bool isClosest), ()); diff --git a/test/unittest/subtitle_sink_unittest/mock/media_sync_manager.h b/test/unittest/subtitle_sink_unittest/mock/media_sync_manager.h index ba6fdcc6b..211c33300 100644 --- a/test/unittest/subtitle_sink_unittest/mock/media_sync_manager.h +++ b/test/unittest/subtitle_sink_unittest/mock/media_sync_manager.h @@ -64,6 +64,9 @@ public: MOCK_METHOD(Status, Seek, (int64_t mediaTime, bool isClosest), ()); MOCK_METHOD(Status, Stop, (), ()); MOCK_METHOD(bool, InSeeking, (), ()); + MOCK_METHOD(void, SetAudioRenderPts, (int64_t audioRenderPts), ()); + MOCK_METHOD(void, SetHasAudio, (bool hasAudio), ()); + MOCK_METHOD(void, SetAudioEos, (bool isEos), ()); std::atomic isFrameAfterSeeked_ {false}; }; } // namespace Pipeline diff --git a/test/unittest/video_sink_unittest/mock/media_sync_manager.h b/test/unittest/video_sink_unittest/mock/media_sync_manager.h index 16143644d..642717156 100644 --- a/test/unittest/video_sink_unittest/mock/media_sync_manager.h +++ b/test/unittest/video_sink_unittest/mock/media_sync_manager.h @@ -64,6 +64,9 @@ public: MOCK_METHOD(Status, Seek, (int64_t mediaTime, bool isClosest), ()); MOCK_METHOD(Status, Stop, (), ()); MOCK_METHOD(bool, InSeeking, (), ()); + MOCK_METHOD(void, SetAudioRenderPts, (int64_t audioRenderPts), ()); + MOCK_METHOD(void, SetHasAudio, (bool hasAudio), ()); + MOCK_METHOD(void, SetAudioEos, (bool isEos), ()); }; } // namespace Pipeline } // namespace Media -- Gitee From 03f87affd0d7afbc21737afa5548e7ebac0cab85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=99=93=E6=B8=AF?= Date: Sat, 13 Sep 2025 06:35:39 +0000 Subject: [PATCH 2/3] update test/unittest/media_sink_test/audio_sink_test.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李晓港 --- test/unittest/media_sink_test/audio_sink_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/unittest/media_sink_test/audio_sink_test.cpp b/test/unittest/media_sink_test/audio_sink_test.cpp index 737629627..5a384e63d 100644 --- a/test/unittest/media_sink_test/audio_sink_test.cpp +++ b/test/unittest/media_sink_test/audio_sink_test.cpp @@ -1435,6 +1435,7 @@ HWTEST(TestAudioSink, audio_sink_CacheBuffer_003, TestSize.Level1) auto ret = audioSink->CacheBuffer(); ASSERT_TRUE(ret == Status::OK); +} HWTEST(TestAudioSink, IsTimeAnchorNeedUpdate_001, TestSize.Level1) { -- Gitee From a41f74c5df9642f68bf338b882e0e454de039d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=99=93=E6=B8=AF?= Date: Sun, 14 Sep 2025 12:04:23 +0000 Subject: [PATCH 3/3] update test/unittest/media_sink_test/sync_manager_test.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李晓港 --- .../media_sink_test/sync_manager_test.cpp | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/test/unittest/media_sink_test/sync_manager_test.cpp b/test/unittest/media_sink_test/sync_manager_test.cpp index 85563136a..720c02c1d 100644 --- a/test/unittest/media_sink_test/sync_manager_test.cpp +++ b/test/unittest/media_sink_test/sync_manager_test.cpp @@ -632,28 +632,6 @@ HWTEST_F(TestSyncManager, GetMediaTimeNow_008, TestSize.Level0) EXPECT_EQ(syncManager_->GetMediaTimeNow(), 50); } -HWTEST_F(TestSyncManager, GetMediaTimeNow_009, TestSize.Level0) -{ - syncManager_->isSeeking_ = false; - syncManager_->clockState_ = MediaSyncManager::State::PAUSED; - syncManager_->pausedMediaTime_ = 100; - syncManager_->firstMediaTimeAfterSeek_ = 150; - syncManager_->currentAnchorMediaTime_ = 50; - syncManager_->audioRenderPts_ = HST_TIME_NONE; - EXPECT_EQ(syncManager_->GetMediaTimeNow(), HST_TIME_NONE); -} - -HWTEST_F(TestSyncManager, GetMediaTimeNow_010, TestSize.Level0) -{ - syncManager_->isSeeking_ = false; - syncManager_->clockState_ = MediaSyncManager::State::PAUSED; - syncManager_->pausedMediaTime_ = 100; - syncManager_->firstMediaTimeAfterSeek_ = 150; - syncManager_->currentAnchorMediaTime_ = 50; - syncManager_->audioRenderPts_ = 0; - EXPECT_EQ(syncManager_->GetMediaTimeNow(), HST_TIME_NONE); -} - HWTEST_F(TestSyncManager, SetLastAudioBufferDuration_001, TestSize.Level0) { syncManager_->SetLastAudioBufferDuration(50); -- Gitee