[HBBTV] Redundant MMPlayer API usage when resuming video playback after pause. 77/315077/8
authorMaciej Pietka <m.pietka@samsung.com>
Wed, 17 Jul 2024 12:09:42 +0000 (14:09 +0200)
committerBot Blink <blinkbot@samsung.com>
Thu, 25 Jul 2024 08:57:23 +0000 (08:57 +0000)
[*KONA_ID] DF240624-01128 [PreCert][SCL][TV][24_OSU_TV(23_KantSU2e)][Italy][TivuSat][SelfTC] MdsInf_HbbTV_,7,8,9,10 : During DRM VOD playback, when PLAY is performed in PAUSE state, it stops and then played again.

Do not execute redundant calls to player_select_track_ex for audio after resuming HBBTV playback, calling this API when playback is active causes the video to buffer and hang for a short period.

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

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 2df60dcacf71e1993a12b065ad0839d6d800d270..82607964f8e7304ff8d1dd42d9f76d906107f1ad 100644 (file)
@@ -3174,16 +3174,47 @@ void MediaPlayerBridgeCapiTV::UpdatePreferAudio() {
     return;
   }
 
-  int ret = player_select_track_ex(player_, PLAYER_STREAM_TYPE_AUDIO,
-                                   prefer_audio_adaptionset_idx_, -1);
-  if (ret != PLAYER_ERROR_NONE) {
-    LOG(ERROR) << "player_select_track_ex fail";
+  if (!SelectAudioTrack(prefer_audio_adaptionset_idx_)) {
     return;
   }
-  active_audio_track_id_ = prefer_audio_adaptionset_idx_;
+
   last_prefer_audio_adaptionset_idx_ = prefer_audio_adaptionset_idx_;
 }
 
+bool MediaPlayerBridgeCapiTV::SelectAudioTrack(int audio_track_id) {
+  constexpr int kAdapationSetNotCare{-1};
+
+  int active_audio_track = 0;
+  int active_alternative_set = 0;
+
+  auto ret = player_get_current_track_ex(player_, PLAYER_STREAM_TYPE_AUDIO,
+    &active_audio_track, &active_alternative_set);
+
+  if (ret != PLAYER_ERROR_NONE) {
+    LOG(ERROR) << "player_get_current_track_ex fail, ret val = " << ret;
+    return false;
+  }
+
+  if (active_audio_track == audio_track_id) {
+    return true;
+  }
+
+  LOG(INFO) << "Updating active_audio_track_id_=" << active_audio_track_id_
+    << " to new value active_audio_track=" << active_audio_track;
+
+  ret = player_select_track_ex(player_, PLAYER_STREAM_TYPE_AUDIO,
+    active_audio_track_id_, kAdapationSetNotCare);
+
+  if (ret != PLAYER_ERROR_NONE) {
+    LOG(ERROR) << "player_select_track_ex fail, ret val = " << ret;
+    return false;
+  }
+
+  active_audio_track_id_ = active_audio_track;
+
+  return true;
+}
+
 bool MediaPlayerBridgeCapiTV::GetUserPreferAudioLanguage() {
   prefer_audio_lang_.clear();
   int retval;
@@ -3243,11 +3274,7 @@ void MediaPlayerBridgeCapiTV::SetActiveAudioTrack(int index) {
   if (active_audio_track_id_ == index)
     return;
 
-  active_audio_track_id_ = index;
-  int ret = player_select_track_ex(player_, PLAYER_STREAM_TYPE_AUDIO,
-                                   active_audio_track_id_, -1);
-  if (ret != PLAYER_ERROR_NONE)
-    LOG(WARNING) << "player_select_track_ex fail,ret:" << ret;
+  SelectAudioTrack(index);
 }
 
 void MediaPlayerBridgeCapiTV::SetActiveVideoTrack(int index) {
index 7db7d1b2aa59afd837d36817ad9dcd730424a4d2..b3cc10b11e80df1a584c9b200515577185a63357 100644 (file)
@@ -252,6 +252,7 @@ class MEDIA_EXPORT MediaPlayerBridgeCapiTV : public MediaPlayerBridgeCapi {
   std::string MapMediaTrackKind(const std::string& role, const int size);
   bool GetUserPreferAudioLanguage();
   void UpdatePreferAudio();
+  bool SelectAudioTrack(int audio_track_id);
   void HandleInbandTextTrack(const std::string& info,
                              int band_type,
                              int action);