Don't pause after first seek from pipeline in MMPlayer bridge. 25/320625/5
authorMaciej Pietka <m.pietka@samsung.com>
Wed, 9 Oct 2024 09:47:23 +0000 (11:47 +0200)
committerBot Blink <blinkbot@samsung.com>
Wed, 20 Nov 2024 13:30:22 +0000 (13:30 +0000)
Tracking double seek behavior of the pipeline is no longer required.
Remove pause after first seek.
Revert "[HBBTV] Handle double seek - pause content until second seek"

This reverts commit 273a1a9c5d7bb0265696775f26447f8bf1a50ac1.

Bug: https://jira-eu.sec.samsung.net/browse/VDWASM-1821
Signed-off-by: Maciej Pietka <m.pietka@samsung.com>
Change-Id: Ia602a1787a8ae9b2a73f2662ca865822b694a4dc

tizen_src/chromium_impl/media/filters/media_player_bridge_capi.h
tizen_src/chromium_impl/media/filters/media_player_bridge_capi_tv.cc
tizen_src/chromium_impl/media/filters/media_player_bridge_capi_tv.h

index 9ec71f525f4d489a767aebbcaab20e722cb0b20f..5839f2ed67ed76b0206e5c5acff2a900f21e58fc 100644 (file)
@@ -182,7 +182,7 @@ class MEDIA_EXPORT MediaPlayerBridgeCapi : public MediaPlayerTizen {
   virtual void OnResumeComplete(bool success);
   virtual void HandleBufferingStatus(int percent);
 
-  virtual void SeekInternal(base::TimeDelta time);
+  void SeekInternal(base::TimeDelta time);
   void StartBufferingUpdateTimer();
   void StopCurrentTimeUpdateTimer();
 
index d2ab37671ec224781e2045ad9fed283fdc02d1d4..aff04004f09e8de40effdf139211b7c5cc1b15a2 100644 (file)
@@ -6,7 +6,6 @@
 #include "base/command_line.h"
 #include "base/no_destructor.h"
 #include "base/strings/string_split.h"
-#include "base/time/time.h"
 #include "content/public/browser/web_contents_delegate.h"
 #include "ewk/efl_integration/common/content_switches_efl.h"
 #include "media/base/efl/media_player_util_efl.h"
@@ -404,7 +403,6 @@ void MediaPlayerBridgeCapiTV::Resume() {
 }
 
 void MediaPlayerBridgeCapiTV::Release() {
-  was_paused_before_.reset();
   is_preloaded_ = false;
   player_prepared_ = false;
   if (player_released_) {
@@ -489,84 +487,11 @@ void MediaPlayerBridgeCapiTV::Release() {
   }
 }
 
-void MediaPlayerBridgeCapiTV::TrackDoubleSeek(base::TimeDelta pts) {
-  if (!blink::IsHbbTV()) {
-    return;
-  }
-
-  const bool is_paused = is_paused_;
-  switch (seek_state_) {
-    case SeekState::kNone:
-    case SeekState::kSecondSeekComplete:
-      Pause(false);
-      was_paused_before_ = is_paused;
-      seek_state_pts_ = pts;
-      seek_state_ = SeekState::kFirstSeek;
-      break;
-    case SeekState::kFirstSeekComplete:
-      if (seek_state_pts_.has_value() && seek_state_pts_.value() == pts) {
-        seek_state_ = SeekState::kSecondSeek;
-        break;
-      }
-      LOG_ID(ERROR, player_id_)
-          << "Unexpected flow for double seek, wrong pts=" << pts;
-      RestorePlaybackSeekState();
-      seek_state_ = SeekState::kNone;
-      break;
-    case SeekState::kFirstSeek:
-    case SeekState::kSecondSeek:
-      LOG_ID(ERROR, player_id_) << "Unexpected flow for double seek";
-      RestorePlaybackSeekState();
-      seek_state_ = SeekState::kNone;
-      break;
-  }
-}
-
-void MediaPlayerBridgeCapiTV::TrackDoubleSeekCompleted() {
-  if (!blink::IsHbbTV()) {
-    return;
-  }
-
-  switch (seek_state_) {
-    case SeekState::kNone:
-    case SeekState::kSecondSeekComplete:
-    case SeekState::kFirstSeekComplete:
-      LOG_ID(ERROR, player_id_) << "Unexpected flow for double seek";
-      RestorePlaybackSeekState();
-      seek_state_ = SeekState::kNone;
-      break;
-    case SeekState::kFirstSeek:
-      seek_state_ = SeekState::kFirstSeekComplete;
-      break;
-    case SeekState::kSecondSeek:
-      RestorePlaybackSeekState();
-      seek_state_ = SeekState::kSecondSeekComplete;
-      break;
-  }
-}
-
-void MediaPlayerBridgeCapiTV::RestorePlaybackSeekState() {
-  if (!blink::IsHbbTV()) {
-    return;
-  }
-
-  if (!was_paused_before_.value_or(true)) {
-    Play();
-  }
-  seek_state_pts_.reset();
-  was_paused_before_.reset();
-}
-
-void MediaPlayerBridgeCapiTV::SeekInternal(base::TimeDelta time) {
-  TrackDoubleSeek(time);
-  MediaPlayerBridgeCapi::SeekInternal(time);
-}
-
 bool MediaPlayerBridgeCapiTV::Play() {
   LOG_ID(INFO, player_id_) << "(" << static_cast<void*>(this) << ") "
                            << __func__
                            << ",current_time:" << GetCurrentTime().InSecondsF();
-  was_paused_before_.reset();
+
   if (IsPlayerSuspended()) {
     is_play_pending_ = true;
     LOG_ID(INFO, GetPlayerId()) << "Player is suspended";
@@ -696,7 +621,6 @@ bool MediaPlayerBridgeCapiTV::Play() {
 }
 
 void MediaPlayerBridgeCapiTV::Pause(bool is_media_related_action) {
-  was_paused_before_.reset();
   if (!player_prepared_ || is_resuming_) {
     delayed_player_state_ = PLAYER_STATE_DELAYED_PAUSE;
     return;
@@ -736,7 +660,6 @@ void MediaPlayerBridgeCapiTV::RequestSuspend(bool resource_conflicted) {
     return;
   }
 
-  RestorePlaybackSeekState();
   if (GetMediaPlayerClient())
     GetMediaPlayerClient()->OnRequestSuspend(resource_conflicted);
   MediaPlayerBridgeCapi::Suspend();
@@ -790,10 +713,6 @@ void MediaPlayerBridgeCapiTV::Seek(base::TimeDelta time,
         << "(" << static_cast<void*>(this) << ") "
         << " stashing pending seek - " << time.InSecondsF() << "s";
 
-    // NOTE: Stashing seek prevents double seek. This would require to use
-    //      a queue to store seeks and handle them one after another.
-    RestorePlaybackSeekState();
-
     if(delayed_player_state_ == PLAYER_STATE_DELAYED_PLAY ||
        delayed_player_state_ == PLAYER_STATE_DELAYED_SEEK_THEN_PLAY)
       delayed_player_state_ = PLAYER_STATE_DELAYED_SEEK_THEN_PLAY;
@@ -815,7 +734,7 @@ void MediaPlayerBridgeCapiTV::Seek(base::TimeDelta time,
   }
 
   LOG_ID(INFO, player_id_) << "SeekInternal";
-  SeekInternal(time);
+  MediaPlayerBridgeCapi::SeekInternal(time);
 
   LOG_ID(INFO, player_id_) << "NotifySubtitleState seek start";
   NotifySubtitleState(blink::WebMediaPlayer::kSubtitleSeekStart,
@@ -1010,7 +929,6 @@ void MediaPlayerBridgeCapiTV::OnTimeUpdate(int player_id,
 }
 
 void MediaPlayerBridgeCapiTV::SeekCompleteUpdate() {
-  TrackDoubleSeekCompleted();
   MediaPlayerBridgeCapi::SeekCompleteUpdate();
   NotifySubtitleState(blink::WebMediaPlayer::kSubtitleSeekComplete);
 
@@ -4021,6 +3939,5 @@ bool MediaPlayerBridgeCapiTV::CompleteDrmInit(int& drmhandle) {
   waiting_for_drm_init_complete_ = false;
   return (decryptor_ != 0);
 }
-
 #endif
 }  // namespace media
index a379698998654b6c270ed398c260d6d09d4d4ea1..b3cc10b11e80df1a584c9b200515577185a63357 100644 (file)
@@ -7,10 +7,8 @@
 
 #include <emeCDM/IEME.h>
 #include <player_product.h>
-#include <string>
 
 #include "base/synchronization/condition_variable.h"
-#include "base/time/time.h"
 #include "media/filters/hardware_resource_helper.h"
 #include "media/filters/media_player_bridge_capi.h"
 #include "tizen_src/chromium_impl/build/tizen_version.h"
@@ -52,14 +50,6 @@ enum TrackAction {
   DEL_INBAND_TEXT_TRACK,
 };
 
-enum class SeekState {
-  kNone,
-  kFirstSeek,
-  kFirstSeekComplete,
-  kSecondSeek,
-  kSecondSeekComplete
-};
-
 #if defined(TIZEN_VD_NGA)
 struct AudioPreselectionInfos {
   std::string id;
@@ -217,11 +207,6 @@ class MEDIA_EXPORT MediaPlayerBridgeCapiTV : public MediaPlayerBridgeCapi {
     return is_player_reload_by_mixer_;
   };
 
-  void TrackDoubleSeek(base::TimeDelta pts);
-  void TrackDoubleSeekCompleted();
-  void RestorePlaybackSeekState();
-
-  void SeekInternal(base::TimeDelta time) override;
   bool ActivateAudioStreamIfNeeded();
   bool DeactivateAudioStreamIfNeeded();
   bool ActivateAudioStream();
@@ -396,10 +381,6 @@ class MEDIA_EXPORT MediaPlayerBridgeCapiTV : public MediaPlayerBridgeCapi {
   // NOTE: Weak pointers must be invalidated before all other member variables.
   base::WeakPtrFactory<MediaPlayerBridgeCapiTV> weak_factory_;
 
-  SeekState seek_state_ = SeekState::kNone;
-  absl::optional<bool> was_paused_before_;
-  absl::optional<base::TimeDelta> seek_state_pts_;
-
   bool has_encrypted_listener_or_cdm_{false};
   // Flag indicating that has_encrypted_listener_or_cdm_ has been changed.
   bool encrypted_listener_or_cdm_has_changed_{false};