[MM] Report BufferingState when player is prepared and seeked. 47/309547/2
authorSun-woo Nam <sunny.nam@samsung.com>
Fri, 12 Apr 2024 04:59:34 +0000 (21:59 -0700)
committerBot Blink <blinkbot@samsung.com>
Sat, 13 Apr 2024 06:08:29 +0000 (06:08 +0000)
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 <sunny.nam@samsung.com>
tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc

index af00b63..4f51eb9 100644 (file)
@@ -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<void*>(this) << ") " << __func__
             << " is_paused:" << is_paused_;
 
+  ReportBufferingStateIfNeeded(BUFFERING_HAVE_ENOUGH,
+                               BUFFERING_CHANGE_REASON_UNKNOWN);
+
   current_position_ = seek_position_;
   is_seeking_ = false;
   expected_seek_ = false;