From 68a21561816bc115cb5e839379f9a780e32c776a Mon Sep 17 00:00:00 2001 From: zhangwt3652 Date: Mon, 28 Apr 2025 16:07:52 +0800 Subject: [PATCH] setSpeedRateTdd Signed-off-by: zhangwt3652 --- .../test/unittest/include/player_mock.h | 5 + .../player/test/unittest/src/player_mock.cpp | 32 +++++ .../test/unittest/src/player_unit_test.cpp | 71 +++++++++ .../hiplayer_impl_unit_test.cpp | 18 +++ .../include/player_server_mock.h | 5 + .../src/player_server_mock.cpp | 32 +++++ .../src/player_server_unit_test.cpp | 136 ++++++++++++++++++ 7 files changed, 299 insertions(+) diff --git a/frameworks/native/player/test/unittest/include/player_mock.h b/frameworks/native/player/test/unittest/include/player_mock.h index 69601386a..415f6b73b 100644 --- a/frameworks/native/player/test/unittest/include/player_mock.h +++ b/frameworks/native/player/test/unittest/include/player_mock.h @@ -67,6 +67,7 @@ protected: int32_t seekPosition_; bool seekDoneFlag_; bool speedDoneFlag_; + bool rateDoneFlag_ = false; bool trackDoneFlag_ = false; bool trackChange_ = false; bool trackInfoUpdate_ = false; @@ -82,6 +83,7 @@ protected: std::condition_variable condVarStop_; std::condition_variable condVarReset_; std::condition_variable condVarSeek_; + std::condition_variable condVarRate_; std::condition_variable condVarSpeed_; std::condition_variable condVarTrackDone_; std::condition_variable condVarTrackInfoUpdate_; @@ -96,6 +98,7 @@ public: void Notify(PlayerStates currentState); void SetSeekDoneFlag(bool seekDoneFlag); void SetSpeedDoneFlag(bool speedDoneFlag); + void SetRateDoneFlag(bool rateDoneFlag); void SetSeekPosition(int32_t seekPosition); void SetState(PlayerStates state); void SetTrackDoneFlag(bool trackDoneFlag); @@ -106,6 +109,7 @@ public: int32_t ResetSync(); int32_t SeekSync(); int32_t SpeedSync(); + int32_t RateSync(); int32_t TrackSync(bool &trackChange); int32_t TrackInfoUpdateSync(); std::string SubtitleTextUpdate(std::string text); @@ -147,6 +151,7 @@ public: int32_t GetDuration(int32_t &duration); int32_t SetPlaybackSpeed(PlaybackRateMode mode); int32_t GetPlaybackSpeed(PlaybackRateMode &mode); + int32_t SetPlaybackRate(float rate); int32_t SelectBitRate(uint32_t bitRate); bool IsPlaying(); bool IsLooping(); diff --git a/frameworks/native/player/test/unittest/src/player_mock.cpp b/frameworks/native/player/test/unittest/src/player_mock.cpp index d6f29dce8..b9af1b78f 100644 --- a/frameworks/native/player/test/unittest/src/player_mock.cpp +++ b/frameworks/native/player/test/unittest/src/player_mock.cpp @@ -40,6 +40,11 @@ void PlayerCallbackTest::SetSpeedDoneFlag(bool speedDoneFlag) speedDoneFlag_ = speedDoneFlag; } +void PlayerCallbackTest::SetRateDoneFlag(bool rateDoneFlag) +{ + rateDoneFlag_ = rateDoneFlag; +} + void PlayerCallbackTest::SetSeekPosition(int32_t seekPosition) { seekPosition_ = seekPosition; @@ -136,6 +141,18 @@ int32_t PlayerCallbackTest::SpeedSync() return MSERR_OK; } +int32_t PlayerCallbackTest::RateSync() +{ + if (rateDoneFlag_ == false) { + std::unique_lock lockRate(mutexCond_); + condVarRate_.wait_for(lockRate, std::chrono::seconds(waitsecond)); + if (rateDoneFlag_ == false) { + return -1; + } + } + return MSERR_OK; +} + int32_t PlayerCallbackTest::TrackSync(bool &trackChange) { if (trackDoneFlag_ == false) { @@ -208,6 +225,10 @@ void PlayerCallbackTest::OnInfo(PlayerOnInfoType type, int32_t extra, const Form SetState(state_); Notify(state_); break; + case INFO_TYPE_RATEDONE: + SetRateDoneFlag(true); + condVarRate_.notify_all(); + break; case INFO_TYPE_SPEEDDONE: SetSpeedDoneFlag(true); condVarSpeed_.notify_all(); @@ -611,6 +632,17 @@ int32_t PlayerMock::GetPlaybackSpeed(PlaybackRateMode &mode) return player_->GetPlaybackSpeed(mode); } +int32_t PlayerMock::SetPlaybackRate(float rate) +{ + UNITTEST_CHECK_AND_RETURN_RET_LOG(player_ != nullptr && callback_ != nullptr, -1, "player or callback is nullptr"); + callback_->SetRateDoneFlag(false); + int32_t ret = player_->SetPlaybackRate(rate); + if (ret == MSERR_OK) { + return callback_->RateSync(); + } + return player_->SetPlaybackRate(rate); +} + int32_t PlayerMock::SelectBitRate(uint32_t bitRate) { UNITTEST_CHECK_AND_RETURN_RET_LOG(player_ != nullptr, -1, "player_ == nullptr"); diff --git a/frameworks/native/player/test/unittest/src/player_unit_test.cpp b/frameworks/native/player/test/unittest/src/player_unit_test.cpp index 0683e7092..bef411514 100644 --- a/frameworks/native/player/test/unittest/src/player_unit_test.cpp +++ b/frameworks/native/player/test/unittest/src/player_unit_test.cpp @@ -57,6 +57,7 @@ void PlayerUnitTest::TearDown(void) void PlayerUnitTest::PlayFunTest(const std::string &protocol) { int32_t duration = 0; + float playbackRate = 2.5f; if (player_ != nullptr) { EXPECT_EQ(MSERR_OK, player_->GetDuration(duration)); EXPECT_EQ(MSERR_OK, player_->Play()); @@ -71,6 +72,7 @@ void PlayerUnitTest::PlayFunTest(const std::string &protocol) EXPECT_EQ(MSERR_OK, player_->GetAudioTrackInfo(audioTrack)); PlaybackRateMode mode; player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X); + player_->SetPlaybackRate(playbackRate); player_->GetPlaybackSpeed(mode); EXPECT_EQ(MSERR_OK, player_->SetLooping(true)); EXPECT_EQ(true, player_->IsLooping()); @@ -93,6 +95,7 @@ void PlayerUnitTest::PlayFunTest(const std::string &protocol) void PlayerUnitTest::NoRunPlayFunTest(const std::string &protocol) { int32_t duration = 0; + float playbackRate = 2.5f; if (player_ != nullptr) { EXPECT_NE(MSERR_OK, player_->GetDuration(duration)); EXPECT_NE(MSERR_OK, player_->Play()); @@ -107,6 +110,7 @@ void PlayerUnitTest::NoRunPlayFunTest(const std::string &protocol) EXPECT_NE(MSERR_OK, player_->GetAudioTrackInfo(audioTrack)); PlaybackRateMode mode; player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X); + player_->SetPlaybackRate(playbackRate); player_->GetPlaybackSpeed(mode); EXPECT_NE(MSERR_OK, player_->SetLooping(true)); EXPECT_NE(true, player_->IsLooping()); @@ -132,6 +136,7 @@ void PlayerUnitTest::GetSetParaFunTest() if (player_ != nullptr) { int32_t duration = 0; int32_t time = 0; + float playbackRate = 2.5f; PlaybackRateMode mode; std::vector videoTrack; std::vector audioTrack; @@ -140,6 +145,7 @@ void PlayerUnitTest::GetSetParaFunTest() player_->GetCurrentTime(time); player_->GetDuration(duration); player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X); + player_->SetPlaybackRate(playbackRate); player_->GetPlaybackSpeed(mode); player_->SetLooping(true); player_->IsLooping(); @@ -384,6 +390,7 @@ HWTEST_F(PlayerUnitTest, Player_SetSource_003, TestSize.Level2) PlaybackRateMode mode; int32_t time = 0; int32_t duration = 0; + float playbackRate = 2.5f; std::vector videoTrack; std::vector audioTrack; int32_t ret = player_->SetSource(MEDIA_ROOT + "1kb.mp3"); @@ -406,6 +413,7 @@ HWTEST_F(PlayerUnitTest, Player_SetSource_003, TestSize.Level2) EXPECT_EQ(false, player_->IsLooping()); EXPECT_NE(MSERR_OK, player_->SetVolume(1, 1)); EXPECT_NE(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_NE(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_NE(MSERR_OK, player_->GetCurrentTime(time)); EXPECT_NE(MSERR_OK, player_->GetDuration(duration)); @@ -439,6 +447,7 @@ HWTEST_F(PlayerUnitTest, Player_SetSource_005, TestSize.Level3) { PlaybackRateMode mode; int32_t duration = 0; + float playbackRate = 2.5f; std::vector videoTrack; std::vector audioTrack; Format format; @@ -459,6 +468,7 @@ HWTEST_F(PlayerUnitTest, Player_SetSource_005, TestSize.Level3) EXPECT_EQ(true, player_->IsLooping()); EXPECT_EQ(MSERR_OK, player_->SetVolume(1, 1)); EXPECT_NE(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_EQ(SPEED_FORWARD_1_00_X, mode); EXPECT_NE(MSERR_OK, player_->GetDuration(duration)); @@ -778,6 +788,7 @@ HWTEST_F(PlayerUnitTest, Player_Prepare_002, TestSize.Level2) HWTEST_F(PlayerUnitTest, Player_Prepare_003, TestSize.Level2) { PlaybackRateMode rateMode; + float playbackRate = 2.5f; ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); sptr renderSurface = player_->GetVideoSurface(); ASSERT_NE(nullptr, renderSurface); @@ -787,6 +798,7 @@ HWTEST_F(PlayerUnitTest, Player_Prepare_003, TestSize.Level2) EXPECT_EQ(true, ret); EXPECT_EQ(MSERR_OK, player_->SetVolume(1, 1)); EXPECT_NE(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(rateMode)); EXPECT_NE(SPEED_FORWARD_2_00_X, rateMode); EXPECT_EQ(MSERR_OK, player_->Prepare()); @@ -803,6 +815,7 @@ HWTEST_F(PlayerUnitTest, Player_Prepare_003, TestSize.Level2) HWTEST_F(PlayerUnitTest, Player_Prepare_004, TestSize.Level2) { PlaybackRateMode mode; + float playbackRate = 2.5f; ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); sptr videoSurface = player_->GetVideoSurface(); ASSERT_NE(nullptr, videoSurface); @@ -811,6 +824,7 @@ HWTEST_F(PlayerUnitTest, Player_Prepare_004, TestSize.Level2) EXPECT_EQ(MSERR_OK, player_->SetLooping(true)); EXPECT_EQ(MSERR_OK, player_->SetVolume(1, 1)); EXPECT_EQ(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_EQ(mode, SPEED_FORWARD_2_00_X); EXPECT_EQ(MSERR_OK, player_->Stop()); @@ -887,6 +901,7 @@ HWTEST_F(PlayerUnitTest, Player_PrepareAsync_002, TestSize.Level2) HWTEST_F(PlayerUnitTest, Player_PrepareAsync_003, TestSize.Level2) { PlaybackRateMode mode; + float playbackRate = 2.5f; ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); sptr videoSurface = player_->GetVideoSurface(); ASSERT_NE(nullptr, videoSurface); @@ -895,6 +910,7 @@ HWTEST_F(PlayerUnitTest, Player_PrepareAsync_003, TestSize.Level2) EXPECT_EQ(true, player_->IsLooping()); EXPECT_EQ(MSERR_OK, player_->SetVolume(1, 1)); EXPECT_NE(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_NE(SPEED_FORWARD_2_00_X, mode); EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); @@ -1774,6 +1790,57 @@ HWTEST_F(PlayerUnitTest, Player_SetPlaybackSpeed_002, TestSize.Level2) EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); } +/** + * @tc.name : Test SetPlaybackRate API + * @tc.number: Player_SetPlaybackRate_001 + * @tc.desc : Test Player SetPlaybackRate + */ +HWTEST_F(PlayerUnitTest, Player_SetPlaybackRate_001, TestSize.Level0) +{ + float playbackRate = 2.5f; + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->Prepare()); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate)); +} + +/** + * @tc.name : Test SetPlaybackRate API + * @tc.number: Player_SetPlaybackRate_002 + * @tc.desc : Test Player SetPlaybackRate + */ +HWTEST_F(PlayerUnitTest, Player_SetPlaybackRate_002, TestSize.Level2) +{ + int32_t duration = 0; + float playbackRate1 = 2.5f; + float playbackRate2 = 1.25f; + float playbackRate3 = 1.0f; + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); + EXPECT_EQ(MSERR_OK, player_->Pause()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate2)); + EXPECT_EQ(MSERR_OK, player_->GetDuration(duration)); + EXPECT_EQ(MSERR_OK, player_->Seek(duration, SEEK_CLOSEST)); + EXPECT_EQ(MSERR_OK, player_->Play()); + sleep(PLAYING_TIME_2_SEC); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate2)); + EXPECT_EQ(MSERR_OK, player_->Stop()); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate3)); + EXPECT_EQ(MSERR_OK, player_->Reset()); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); +} + /** * @tc.name : Test SetLooping API * @tc.number: Player_SetLooping_001 @@ -2415,6 +2482,7 @@ HWTEST_F(PlayerUnitTest, Player_Mem_Recycle_007, TestSize.Level0) ASSERT_NE(nullptr, videoSurface); std::vector srcVec = {MEDIA_ROOT + "H264_MP3.mp4"}; std::vector speedMode = {SPEED_FORWARD_2_00_X, SPEED_FORWARD_1_25_X}; + std::vector speedRate = {2.0f, 1.5f}; for (uint32_t i = 0; i < srcVec.size(); i++) { if (srcVec[i] == MEDIA_ROOT + "H264_MP3.mp4") { system("param set sys.media.player.resource.type NetWork"); @@ -2429,6 +2497,7 @@ HWTEST_F(PlayerUnitTest, Player_Mem_Recycle_007, TestSize.Level0) system(str); system("hidumper -s 1909 -a \"-t 3\""); EXPECT_EQ(MSERR_OK, player_->SetPlaybackSpeed(speedMode[i])); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(speedRate[i])); EXPECT_EQ(MSERR_OK, player_->Reset()); system("param set sys.media.player.resource.type Local"); } @@ -2443,6 +2512,7 @@ HWTEST_F(PlayerUnitTest, Player_Mem_Recycle_008, TestSize.Level0) { sptr videoSurface = player_->GetVideoSurface(); ASSERT_NE(nullptr, videoSurface); + float playbackRate = 2.5f; std::vector srcVec = {MEDIA_ROOT + "H264_MP3.mp4"}; for (uint32_t i = 0; i < srcVec.size(); i++) { if (srcVec[i] == MEDIA_ROOT + "H264_MP3.mp4") { @@ -2454,6 +2524,7 @@ HWTEST_F(PlayerUnitTest, Player_Mem_Recycle_008, TestSize.Level0) EXPECT_EQ(MSERR_OK, player_->Play()); EXPECT_EQ(MSERR_OK, player_->Pause()); EXPECT_EQ(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_EQ(MSERR_OK, player_->SetLooping(true)); EXPECT_EQ(MSERR_OK, player_->SetVolume(0.5, 0.5)); char str[100]; // 100: str len diff --git a/test/unittest/hiplayer_impl_test/hiplayer_impl_unit_test.cpp b/test/unittest/hiplayer_impl_test/hiplayer_impl_unit_test.cpp index 6afae5d7a..263144018 100644 --- a/test/unittest/hiplayer_impl_test/hiplayer_impl_unit_test.cpp +++ b/test/unittest/hiplayer_impl_test/hiplayer_impl_unit_test.cpp @@ -1025,6 +1025,15 @@ HWTEST_F(HiplayerImplUnitTest, SetPlaybackSpeed_001, TestSize.Level0) EXPECT_EQ(MSERR_OK, hiplayer_->SetPlaybackSpeed(PlaybackRateMode::SPEED_FORWARD_2_00_X)); } +HWTEST_F(HiplayerImplUnitTest, SetPlaybackRate_001, TestSize.Level0) +{ + float rate = 2.0f; + hiplayer_->subtitleSink_ = FilterFactory::Instance().CreateFilter("player.subtitlesink", + FilterType::FILTERTYPE_SSINK); + hiplayer_->syncManager_ = nullptr; + EXPECT_EQ(MSERR_OK, hiplayer_->SetPlaybackRate(rate)); +} + HWTEST_F(HiplayerImplUnitTest, SetPlaybackSpeed_002, TestSize.Level0) { PlaybackRateMode mode = PlaybackRateMode::SPEED_FORWARD_2_00_X; @@ -1034,6 +1043,15 @@ HWTEST_F(HiplayerImplUnitTest, SetPlaybackSpeed_002, TestSize.Level0) EXPECT_EQ(MSERR_UNKNOWN, hiplayer_->SetPlaybackSpeed(mode)); } +HWTEST_F(HiplayerImplUnitTest, SetPlaybackRate_002, TestSize.Level0) +{ + float rate = 2.0f; + hiplayer_->audioSink_ = FilterFactory::Instance().CreateFilter("player.audiosink", + FilterType::FILTERTYPE_ASINK); + hiplayer_->subtitleSink_ = nullptr; + EXPECT_EQ(MSERR_UNKNOWN, hiplayer_->SetPlaybackRate(rate)); +} + HWTEST_F(HiplayerImplUnitTest, IsNeedAudioSinkChangeTrack_001, TestSize.Level0) { std::shared_ptr meta = std::make_shared(); diff --git a/test/unittest/player_server_test/include/player_server_mock.h b/test/unittest/player_server_test/include/player_server_mock.h index 5744378f3..a69d82371 100644 --- a/test/unittest/player_server_test/include/player_server_mock.h +++ b/test/unittest/player_server_test/include/player_server_mock.h @@ -62,6 +62,7 @@ protected: int32_t seekPosition_; bool seekDoneFlag_; bool speedDoneFlag_; + bool rateDoneFlag_; bool trackDoneFlag_ = false; bool trackChange_ = false; bool trackInfoUpdate_ = false; @@ -78,6 +79,7 @@ protected: std::condition_variable condVarReset_; std::condition_variable condVarSeek_; std::condition_variable condVarSpeed_; + std::condition_variable condVarRate_; std::condition_variable condVarTrackDone_; std::condition_variable condVarTrackInfoUpdate_; }; @@ -91,6 +93,7 @@ public: void Notify(PlayerStates currentState); void SetSeekDoneFlag(bool seekDoneFlag); void SetSpeedDoneFlag(bool speedDoneFlag); + void SetRateDoneFlag(bool rateDoneFlag); void SetSeekPosition(int32_t seekPosition); void SetState(PlayerStates state); void SetTrackDoneFlag(bool trackDoneFlag); @@ -101,6 +104,7 @@ public: int32_t ResetSync(); int32_t SeekSync(); int32_t SpeedSync(); + int32_t RateSync(); int32_t TrackSync(bool &trackChange); int32_t TrackInfoUpdateSync(); std::string SubtitleTextUpdate(std::string text); @@ -139,6 +143,7 @@ public: int32_t GetVideoWidth(); int32_t GetVideoHeight(); int32_t GetDuration(int32_t &duration); + int32_t SetPlaybackRate(float rate); int32_t SetPlaybackSpeed(PlaybackRateMode mode); int32_t GetPlaybackSpeed(PlaybackRateMode &mode); int32_t SelectBitRate(uint32_t bitRate); diff --git a/test/unittest/player_server_test/src/player_server_mock.cpp b/test/unittest/player_server_test/src/player_server_mock.cpp index ca55fb7d7..fdcd6ee97 100644 --- a/test/unittest/player_server_test/src/player_server_mock.cpp +++ b/test/unittest/player_server_test/src/player_server_mock.cpp @@ -40,6 +40,11 @@ void PlayerCallbackTest::SetSpeedDoneFlag(bool speedDoneFlag) speedDoneFlag_ = speedDoneFlag; } +void PlayerCallbackTest::SetRateDoneFlag(bool rateDoneFlag) +{ + rateDoneFlag_ = rateDoneFlag; +} + void PlayerCallbackTest::SetSeekPosition(int32_t seekPosition) { seekPosition_ = seekPosition; @@ -136,6 +141,18 @@ int32_t PlayerCallbackTest::SpeedSync() return MSERR_OK; } +int32_t PlayerCallbackTest::RateSync() +{ + if (rateDoneFlag_ == false) { + std::unique_lock lockRate(mutexCond_); + condVarRate_.wait_for(lockRate, std::chrono::seconds(waitsecond)); + if (rateDoneFlag_== false) { + return -1; + } + } + return MSERR_OK; +} + int32_t PlayerCallbackTest::TrackSync(bool &trackChange) { if (trackDoneFlag_ == false) { @@ -208,6 +225,10 @@ void PlayerCallbackTest::OnInfo(PlayerOnInfoType type, int32_t extra, const Form SetState(state_); Notify(state_); break; + case INFO_TYPE_RATEDONE: + SetRateDoneFlag(true); + condVarRate_.notify_all(); + break; case INFO_TYPE_SPEEDDONE: SetSpeedDoneFlag(true); condVarSpeed_.notify_all(); @@ -591,6 +612,17 @@ int32_t PlayerServerMock::SetPlaybackSpeed(PlaybackRateMode mode) return player_->SetPlaybackSpeed(mode); } +int32_t PlayerServerMock::SetPlaybackRate(float rate) +{ + UNITTEST_CHECK_AND_RETURN_RET_LOG(player_ != nullptr && callback_ != nullptr, -1, "player or callback is nullptr"); + callback_->SetRateDoneFlag(false); + int32_t ret = player_->SetPlaybackRate(rate); + if (ret == MSERR_OK) { + return callback_->RateSync(); + } + return player_->SetPlaybackRate(rate); +} + int32_t PlayerServerMock::GetPlaybackSpeed(PlaybackRateMode &mode) { UNITTEST_CHECK_AND_RETURN_RET_LOG(player_ != nullptr, -1, "player_ == nullptr"); diff --git a/test/unittest/player_server_test/src/player_server_unit_test.cpp b/test/unittest/player_server_test/src/player_server_unit_test.cpp index ada44d6d5..918e22526 100644 --- a/test/unittest/player_server_test/src/player_server_unit_test.cpp +++ b/test/unittest/player_server_test/src/player_server_unit_test.cpp @@ -385,6 +385,7 @@ void PlayerServerUnitTest::TearDown(void) void PlayerServerUnitTest::PlayFunTest(const std::string &protocol) { int32_t duration = 0; + float playbackRate = 2.5f; if (player_ != nullptr) { EXPECT_EQ(MSERR_OK, player_->GetDuration(duration)); EXPECT_EQ(MSERR_OK, player_->Play()); @@ -398,6 +399,7 @@ void PlayerServerUnitTest::PlayFunTest(const std::string &protocol) EXPECT_EQ(MSERR_OK, player_->GetVideoTrackInfo(videoTrack)); EXPECT_EQ(MSERR_OK, player_->GetAudioTrackInfo(audioTrack)); PlaybackRateMode mode; + player_->SetPlaybackRate(playbackRate); player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X); player_->GetPlaybackSpeed(mode); EXPECT_EQ(MSERR_OK, player_->SetLooping(true)); @@ -423,6 +425,7 @@ void PlayerServerUnitTest::GetSetParaFunTest() if (player_ != nullptr) { int32_t duration = 0; int32_t time = 0; + float playbackRate = 2.0f; PlaybackRateMode mode; std::vector videoTrack; std::vector audioTrack; @@ -430,6 +433,7 @@ void PlayerServerUnitTest::GetSetParaFunTest() player_->GetAudioTrackInfo(audioTrack); player_->GetCurrentTime(time); player_->GetDuration(duration); + player_->SetPlaybackRate(playbackRate); player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X); player_->GetPlaybackSpeed(mode); player_->SetLooping(true); @@ -669,6 +673,7 @@ HWTEST_F(PlayerServerUnitTest, Player_SetSource_003, TestSize.Level2) PlaybackRateMode mode; int32_t time = 0; int32_t duration = 0; + float playbackRate = 1.5f; std::vector videoTrack; std::vector audioTrack; int32_t ret = player_->SetSource(MEDIA_ROOT + "1kb.mp3"); @@ -690,6 +695,7 @@ HWTEST_F(PlayerServerUnitTest, Player_SetSource_003, TestSize.Level2) EXPECT_NE(MSERR_OK, player_->SetLooping(true)); EXPECT_EQ(false, player_->IsLooping()); EXPECT_NE(MSERR_OK, player_->SetVolume(1, 1)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_NE(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); EXPECT_NE(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_NE(MSERR_OK, player_->GetCurrentTime(time)); @@ -724,6 +730,7 @@ HWTEST_F(PlayerServerUnitTest, Player_SetSource_005, TestSize.Level3) { PlaybackRateMode mode; int32_t duration = 0; + float playbackRate = 1.5f; std::vector videoTrack; std::vector audioTrack; Format format; @@ -743,6 +750,7 @@ HWTEST_F(PlayerServerUnitTest, Player_SetSource_005, TestSize.Level3) EXPECT_EQ(MSERR_OK, player_->SetLooping(true)); EXPECT_EQ(true, player_->IsLooping()); EXPECT_EQ(MSERR_OK, player_->SetVolume(1, 1)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_NE(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_EQ(SPEED_FORWARD_1_00_X, mode); @@ -1062,6 +1070,7 @@ HWTEST_F(PlayerServerUnitTest, Player_Prepare_002, TestSize.Level2) */ HWTEST_F(PlayerServerUnitTest, Player_Prepare_003, TestSize.Level2) { + float playbackRate = 1.5f; PlaybackRateMode rateMode; ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); sptr renderSurface = player_->GetVideoSurface(); @@ -1071,6 +1080,7 @@ HWTEST_F(PlayerServerUnitTest, Player_Prepare_003, TestSize.Level2) bool ret = player_->IsLooping(); EXPECT_EQ(true, ret); EXPECT_EQ(MSERR_OK, player_->SetVolume(1, 1)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_NE(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(rateMode)); EXPECT_NE(SPEED_FORWARD_2_00_X, rateMode); @@ -1087,6 +1097,7 @@ HWTEST_F(PlayerServerUnitTest, Player_Prepare_003, TestSize.Level2) */ HWTEST_F(PlayerServerUnitTest, Player_Prepare_004, TestSize.Level2) { + float playbackRate = 1.5f; PlaybackRateMode mode; ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); sptr videoSurface = player_->GetVideoSurface(); @@ -1095,6 +1106,7 @@ HWTEST_F(PlayerServerUnitTest, Player_Prepare_004, TestSize.Level2) EXPECT_EQ(MSERR_OK, player_->Prepare()); EXPECT_EQ(MSERR_OK, player_->SetLooping(true)); EXPECT_EQ(MSERR_OK, player_->SetVolume(1, 1)); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate)); EXPECT_EQ(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_2_00_X)); EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_EQ(mode, SPEED_FORWARD_2_00_X); @@ -1174,6 +1186,26 @@ HWTEST_F(PlayerServerUnitTest, Player_PrepareAsync_003, TestSize.Level2) EXPECT_NE(SPEED_FORWARD_2_00_X, mode); } +/** + * @tc.name : Test Player PrepareAsync API + * @tc.number: Player_PrepareAsync1_003 + * @tc.desc : Test Player SetVolume/SetLooping/SetPlaybackRate->PrepareAsync + */ +HWTEST_F(PlayerServerUnitTest, Player_PrepareAsync1_003, TestSize.Level2) +{ + float playbackRate = 2.0f; + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->SetLooping(true)); + EXPECT_EQ(true, player_->IsLooping()); + EXPECT_EQ(MSERR_OK, player_->SetVolume(1, 1)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + EXPECT_EQ(true, player_->IsLooping()); +} + /** * @tc.name : Test Player PrepareAsync API * @tc.number: Player_PrepareAsync_004 @@ -1986,6 +2018,22 @@ HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackSpeed_001, TestSize.Level0) EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_EQ(SPEED_FORWARD_2_00_X, mode); } +/** + * @tc.name : Test SetPlaybackRate API + * @tc.number: Player_SetPlaybackRate_001 + * @tc.desc : Test Player SetPlaybackRate + */ +HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackRate_001, TestSize.Level1) +{ + float playbackRate = 2.0f; + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->Prepare()); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate)); +} /** * @tc.name : Test SetPlaybackSpeed API @@ -2027,6 +2075,41 @@ HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackSpeed_002, TestSize.Level2) EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); } +/** + * @tc.name : Test SetPlaybackRate API + * @tc.number: Player_SetPlaybackRate_002 + * @tc.desc : Test Player SetPlaybackRate + */ +HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackRate_002, TestSize.Level2) +{ + int32_t duration = 0; + float playbackRate1 = 2.0f; + float playbackRate2 = 1.75f; + float playbackRate3 = 1.25f; + float playbackRate4 = 0.75f; + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); + EXPECT_EQ(MSERR_OK, player_->PrepareAsync()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); + EXPECT_EQ(MSERR_OK, player_->Pause()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate2)); + EXPECT_EQ(MSERR_OK, player_->GetDuration(duration)); + EXPECT_EQ(MSERR_OK, player_->Seek(duration, SEEK_CLOSEST)); + EXPECT_EQ(MSERR_OK, player_->Play()); + sleep(PLAYING_TIME_2_SEC); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate4)); + EXPECT_EQ(MSERR_OK, player_->Stop()); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate3)); + EXPECT_EQ(MSERR_OK, player_->Reset()); + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate1)); +} + /** * @tc.name : Test SetLooping API * @tc.number: Player_SetLooping_001 @@ -3262,6 +3345,23 @@ HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackSpeed_003, TestSize.Level0) EXPECT_EQ(SPEED_FORWARD_0_50_X, mode); } +/** + * @tc.name : Test SetPlaybackRate API + * @tc.number: Player_SetPlaybackRate_003 + * @tc.desc : Test Player SetPlaybacRate SPEED_FORWARD_0_50_X + */ +HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackRate_003, TestSize.Level1) +{ + float playbackRate = 0.5f; + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->Prepare()); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate)); +} + /** * @tc.name : Test SetPlaybackSpeed API * @tc.number: Player_SetPlaybackSpeed_004 @@ -3281,6 +3381,23 @@ HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackSpeed_004, TestSize.Level0) EXPECT_EQ(SPEED_FORWARD_1_50_X, mode); } +/** + * @tc.name : Test SetPlaybackRate API + * @tc.number: Player_SetPlaybackRate_004 + * @tc.desc : Test Player SetPlaybackRate SPEED_FORWARD_1_50_X + */ +HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackRate_004, TestSize.Level1) +{ + float playbackRate = 1.5f; + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->Prepare()); + EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackRate)); +} + /** * @tc.name : Test SetPlaybackSpeed API * @tc.number: Player_SetPlaybackSpeed_005 @@ -3301,6 +3418,23 @@ HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackSpeed_005, TestSize.Level0) EXPECT_EQ(-1, mode); } +/** + * @tc.name : Test SetPlaybackRate API + * @tc.number: Player_SetPlaybackRate_005 + * @tc.desc : Test Player SetPlaybackRate Unvalid Value + */ +HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackRate_005, TestSize.Level1) +{ + ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); + sptr videoSurface = player_->GetVideoSurface(); + ASSERT_NE(nullptr, videoSurface); + EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); + EXPECT_EQ(MSERR_OK, player_->Prepare()); + EXPECT_EQ(MSERR_OK, player_->Play()); + float playbackRate = -1; + EXPECT_NE(MSERR_OK, player_->SetPlaybackRate(playbackRate)); +} + /** * @tc.name : Test SetSurface API * @tc.number: Player_SetSurface_001 @@ -4107,6 +4241,7 @@ HWTEST_F(PlayerServerUnitTest, Player_SeekContinuous_006, TestSize.Level0) */ HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackSpeed_006, TestSize.Level0) { + float playbackSpeed = 3.0f; PlaybackRateMode mode; ASSERT_EQ(MSERR_OK, player_->SetSource(VIDEO_FILE1)); sptr videoSurface = player_->GetVideoSurface(); @@ -4114,6 +4249,7 @@ HWTEST_F(PlayerServerUnitTest, Player_SetPlaybackSpeed_006, TestSize.Level0) EXPECT_EQ(MSERR_OK, player_->SetVideoSurface(videoSurface)); EXPECT_EQ(MSERR_OK, player_->Prepare()); EXPECT_EQ(MSERR_OK, player_->Play()); + EXPECT_EQ(MSERR_OK, player_->SetPlaybackRate(playbackSpeed)); EXPECT_EQ(MSERR_OK, player_->SetPlaybackSpeed(SPEED_FORWARD_3_00_X)); EXPECT_EQ(MSERR_OK, player_->GetPlaybackSpeed(mode)); EXPECT_EQ(SPEED_FORWARD_3_00_X, mode); -- Gitee