From 30043d7d81a4be1746ba40938c0369a564211d24 Mon Sep 17 00:00:00 2001 From: Sun-woo Nam Date: Thu, 11 Apr 2024 21:59:34 -0700 Subject: [PATCH] [MM] Report BufferingState when player is prepared and seeked. It regards that player has enough data to play after prepare complete callback. It also can be applied to seek complete callback. This patch fixes autoplay and seek issues. Change-Id: I07e90d6b392469f119fe826be7eec62fe569c41f Signed-off-by: Sun-woo Nam --- .../media/filters/media_player_esplusplayer.cc | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc b/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc index af00b63..4f51eb9 100644 --- a/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc +++ b/tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc @@ -996,9 +996,10 @@ void MediaPlayerESPlusPlayer::OnBufferingStatusChanged(DemuxerStream::Type type, } if (status != kBufferNone) { - if (GetOperationForData() == OperationForData::PLAY) + if (GetOperationForData() == OperationForData::PLAY) { ReportBufferingStateIfNeeded(BUFFERING_HAVE_ENOUGH, BUFFERING_CHANGE_REASON_UNKNOWN); + } } else { ReportBufferingStateIfNeeded(BUFFERING_HAVE_NOTHING, BUFFERING_CHANGE_REASON_UNKNOWN); @@ -1028,10 +1029,14 @@ void MediaPlayerESPlusPlayer::PerformOperationForData() { OperationForData operation = GetOperationForData(); switch (operation) { case OperationForData::PLAY: + ReportBufferingStateIfNeeded(BUFFERING_HAVE_ENOUGH, + BUFFERING_CHANGE_REASON_UNKNOWN); is_paused_by_buffering_ = false; Play(); break; case OperationForData::PAUSE: + ReportBufferingStateIfNeeded(BUFFERING_HAVE_NOTHING, + BUFFERING_CHANGE_REASON_UNKNOWN); is_paused_by_buffering_ = true; Pause(true); break; @@ -1074,8 +1079,6 @@ MediaPlayerESPlusPlayer::GetOperationForData() { // If data has been pushed enough (>= kMinWaitTimeForPlayback) if (time_diff >= kMinWaitTimeForPlayback) { LOG(INFO) << __func__ << " Data is enough to play,"; - ReportBufferingStateIfNeeded(BUFFERING_HAVE_ENOUGH, - BUFFERING_CHANGE_REASON_UNKNOWN); return OperationForData::PLAY; } } else { @@ -1091,10 +1094,6 @@ MediaPlayerESPlusPlayer::GetOperationForData() { if (should_pause) { LOG(INFO) << __func__ << " Not enough data to play."; - // If pushing pts smaller than current_position, should report - // BUFFERING_HAVE_NOTHING to replace BUFFERING_HAVE_ENOUGH - ReportBufferingStateIfNeeded(BUFFERING_HAVE_NOTHING, - BUFFERING_CHANGE_REASON_UNKNOWN); return OperationForData::PAUSE; } } @@ -1173,6 +1172,9 @@ void MediaPlayerESPlusPlayer::PostPrepareComplete() { video_plane_controller_->ApplyDeferredVideoRectIfNeeded(); #endif + ReportBufferingStateIfNeeded(BUFFERING_HAVE_ENOUGH, + BUFFERING_CHANGE_REASON_UNKNOWN); + is_prepared_ = true; is_preparing_ = false; if (pending_seek_) { @@ -1359,6 +1361,9 @@ void MediaPlayerESPlusPlayer::OnSeekComplete() { LOG(INFO) << "(" << static_cast(this) << ") " << __func__ << " is_paused:" << is_paused_; + ReportBufferingStateIfNeeded(BUFFERING_HAVE_ENOUGH, + BUFFERING_CHANGE_REASON_UNKNOWN); + current_position_ = seek_position_; is_seeking_ = false; expected_seek_ = false; -- 2.7.4