Fix mute fail issue of tct-video-html5-tests 09/319009/1
authorzhishun.zhou <zhishun.zhou@samsung.com>
Sat, 12 Oct 2024 03:50:34 +0000 (11:50 +0800)
committerzhishun.zhou <zhishun.zhou@samsung.com>
Sat, 12 Oct 2024 03:50:34 +0000 (11:50 +0800)
Manual cases video_muted_present_manual and video_volume_silent_manual
are failed because the volume have not been set to platform player.

When platform player is not ready, we should pending the volume setting,
and in the ready callback function retrigger volume setting.

Change-Id: I057a70f061e826080e76294a64b75c3c3156d642
Signed-off-by: zhishun.zhou <zhishun.zhou@samsung.com>
tizen_src/chromium_impl/media/filters/media_player_bridge_capi.cc
tizen_src/chromium_impl/media/filters/media_player_bridge_capi.h
tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc
tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h

index 19053d72d74a7015d9efbf7d56accd3d44998a26..a849562a965c8db6fe6318c56eeaa4d3694834ea 100644 (file)
@@ -584,15 +584,15 @@ void MediaPlayerBridgeCapi::SeekInternal(base::TimeDelta time) {
 void MediaPlayerBridgeCapi::SetVolume(double volume) {
   LOG_ID(INFO, player_id_) << "(" << static_cast<void*>(this) << ") "
                            << __func__ << " volume: " << volume;
+  volume_ = volume;
   if (!IsPrepared()) {
-    LOG_ID(ERROR, player_id_) << "Player is not ready.";
+    LOG_ID(ERROR, player_id_) << "Player is not ready, pending set.";
+    pending_set_volume_ = true;
     return;
   }
 
   if (player_set_volume(player_, volume, volume) != PLAYER_ERROR_NONE)
     LOG_ID(ERROR, player_id_) << "|player_set_volume| failed";
-
-  volume_ = volume;
 }
 
 #if defined(TIZEN_VIDEO_HOLE)
@@ -826,12 +826,19 @@ void MediaPlayerBridgeCapi::PlayerPrepared() {
   LOG_ID(INFO, player_id_) << "(" << static_cast<void*>(this) << ") "
                            << __func__;
   if (GetPlayerState() < PLAYER_STATE_READY) {
+    LOG_ID(ERROR, player_id_) << "Invalid state (" << GetPlayerState()
+                              << ") change during prepare. Returning.";
     return;
   }
 
   player_prepared_ = true;
   is_preparing_ = false;
 
+  if (pending_set_volume_) {
+    pending_set_volume_ = false;
+    SetVolume(volume_);
+  }
+
 #if defined(TIZEN_VIDEO_HOLE)
   if (is_video_hole_)
     video_plane_controller_->ApplyDeferredVideoRectIfNeeded();
index e90eda2bc7493d66b3606e17a4da2da7500150a6..83aa3931e991e3d81760715f1f8ecfdf56339dde 100644 (file)
@@ -207,6 +207,7 @@ class MEDIA_EXPORT MediaPlayerBridgeCapi : public MediaPlayerTizen {
   bool is_paused_{true};
   bool is_seeking_{false};
 
+  bool pending_set_volume_{false};
   double volume_{0.0};
 #if defined(TIZEN_VIDEO_HOLE)
   bool is_video_hole_{false};
index c639126a2a870b5ba1445406e907f23e5f572afb..3f97711978dc6000e35026f6f8ff1bd025afa1af 100644 (file)
@@ -631,8 +631,10 @@ void MediaPlayerESPlusPlayer::SetVolume(double volume) {
                            << __func__ << " :" << volume;
   volume_ = volume;
   if (GetPlayerState() == ESPLUSPLAYER_STATE_NONE) {
-    LOG_ID(INFO, player_id_) << "(" << static_cast<void*>(this) << ") "
-                             << __func__ << ", player state is NONE, ignore";
+    LOG_ID(INFO, player_id_)
+        << "(" << static_cast<void*>(this) << ") " << __func__
+        << ", state is NONE, pending set volume.";
+    pending_set_volume_ = true;
     return;
   }
 
@@ -1246,6 +1248,12 @@ void MediaPlayerESPlusPlayer::PostPrepareComplete() {
 
   is_prepared_ = true;
   is_preparing_ = false;
+
+  if (pending_set_volume_) {
+    pending_set_volume_ = false;
+    SetVolume(volume_);
+  }
+
   if (pending_seek_) {
     GetMediaPlayerClient()->OnRequestSeek(pending_seek_position_);
   } else if (!is_paused_) {
index 9442ec4d9c4fbf1e78c935cb7ee92d910ee5883a..e7e8453c40d347af78178b7f5cb3d286a3ec19f7 100644 (file)
@@ -227,6 +227,7 @@ class MEDIA_EXPORT MediaPlayerESPlusPlayer : public MediaPlayerTizen {
 
   void SetMediaType(MediaTypeFlags type) { media_type_ = type; }
 
+  bool pending_set_volume_ = false;
   double volume_ = 1.0;
   double playback_rate_ = 0.0;
   bool is_prepared_ = false;