[HbbTV] Delay prepare until play if decoder is busy 89/320389/2
authorThomas Daniel <t.daniel@samsung.com>
Wed, 13 Nov 2024 17:12:31 +0000 (17:12 +0000)
committerBot Blink <blinkbot@samsung.com>
Thu, 14 Nov 2024 11:15:21 +0000 (11:15 +0000)
Change-Id: I54fc8ad1f3b18bcc71501ac9099b066cf67eddcc

tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h
tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.cc

index c8120b945369f82f7f2e52760cc5b4f19b246056..30faf87fb317be8490e48294f9fdaa3a2a2d3a7a 100644 (file)
@@ -166,6 +166,7 @@ class MEDIA_EXPORT MediaPlayerESPlusPlayer : public MediaPlayerTizen {
   bool is_video_hole_ = false;
   bool is_video_low_latency_ = false;
   int player_id_ = 0;
+  bool is_paused_ = true;
   // first -> pts, second -> duration
   base::StaticMap<DemuxerStream::Type,
                   std::pair<base::TimeDelta, base::TimeDelta>,
@@ -219,7 +220,6 @@ class MEDIA_EXPORT MediaPlayerESPlusPlayer : public MediaPlayerTizen {
   double pending_playback_rate_ = 0.0;
   bool is_prepared_ = false;
   bool is_preparing_ = false;
-  bool is_paused_ = true;
   bool is_buffering_ = false;
   base::TimeDelta current_position_;
 
index a8b09dccd03e792df249fe90394b9754a40274e0..a1c7c624b35ac7325983459ee529f7a98b1eb9ed 100644 (file)
@@ -124,7 +124,21 @@ bool MediaPlayerESPlusPlayerTV::Play() {
   auto dec_name = content::kNoneDecoder;
   if (td_ptr) {
     dec_name = td_ptr->GetDecoderType();
-    SetDecoderAcquired(td_ptr->GetDecoderType());
+    if (!td_ptr->IsOwnerTheSame(content::DecoderOwner(this))) {
+      bool media_resource_acquired = false;
+      GetMediaPlayerClient()->NotifyPlaybackState(
+          kPlaybackVideoReady, GetPlayerId(), "", "", &media_resource_acquired,
+          NULL, NULL, dec_name);
+      if (!media_resource_acquired) {
+        LOG_ID(INFO, GetPlayerId()) << "HbbTV media resource was not acquired";
+      } else {
+        SetDecoderAcquired(td_ptr->GetDecoderType());
+        MediaPlayerESPlusPlayer::Prepare();
+        // Clear is_paused_ so that playback will start when prepare completes
+        is_paused_ = false;
+      }
+      return false;
+    }
   }
   if (GetMediaPlayerClient()) {
     bool media_resource_acquired = false;
@@ -180,10 +194,13 @@ void MediaPlayerESPlusPlayerTV::Prepare() {
       ChooseDecoderIfNeeded(video_config.codec());
       if (auto td_ptr = suitable_decoder_.lock()) {
         decoder_assigned_ = true;
+        if (td_ptr->IsOwnerTheSame(content::DecoderOwner(this))) {
+          // Decoder resource is acquired, we can prepare the player
+          MediaPlayerESPlusPlayer::Prepare();
+        }
       }
     }
   }
-  MediaPlayerESPlusPlayer::Prepare();
 }
 
 void MediaPlayerESPlusPlayerTV::Release() {