[M94 Migration][DA][MM] Enable Multi-Instance. 96/293396/20
authorK.Y. Lee <k-y.lee@samsung.com>
Mon, 9 Nov 2020 04:49:24 +0000 (13:49 +0900)
committerBot Blink <blinkbot@samsung.com>
Fri, 9 Jun 2023 01:22:26 +0000 (01:22 +0000)
From this patch, we will manage player code.
player requests codec type before prepare.
If HW codec is not being used in that time, HW codec will be assigned.
If HW codec is being used in that time, SW codec will be assigned.
(HW codec priority is higher that SW codec.)
Player returns codec type after unprepare.

Ref: https://review.tizen.org/gerrit/c/247510

Change-Id: Iace2eace6d19371d66e368083e8e1e318193a8c9
Signed-off-by: K.Y. Lee <k-y.lee@samsung.com>
14 files changed:
tizen_src/chromium_impl/content/browser/media/tizen/browser_media_player_manager_efl.cc
tizen_src/chromium_impl/content/browser/media/tizen/browser_media_player_manager_efl.h
tizen_src/chromium_impl/media/base/tizen/media_capability_manager.cc
tizen_src/chromium_impl/media/base/tizen/media_capability_manager.h
tizen_src/chromium_impl/media/base/tizen/media_capability_manager_impl.h
tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc
tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h
tizen_src/chromium_impl/media/base/tizen/media_player_efl.cc
tizen_src/chromium_impl/media/base/tizen/media_player_efl.h
tizen_src/chromium_impl/media/base/tizen/media_player_manager_efl.h
tizen_src/chromium_impl/media/base/tizen/media_source_player_capi.cc
tizen_src/chromium_impl/media/base/tizen/media_source_player_capi.h
tizen_src/chromium_impl/media/base/tizen/suspending_media_player.cc
tizen_src/chromium_impl/media/base/tizen/suspending_media_player.h

index f7c8cda9a2a0edf7d0bdf03e5fa9a09d29fab0e1..7b9323be1428e28bfcbbee849ec928f7f0359521 100644 (file)
@@ -1860,4 +1860,17 @@ void BrowserMediaPlayerManagerEfl::OnSetAiZoomSettings(
 }
 #endif  // defined(ENABLE_AUTO_ZOOM)
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+media::PlayerCodecType BrowserMediaPlayerManagerEfl::RequestAvailableCodecType(int player_id) {
+  return media_capability_manager_.RequestAvailableCodecType(player_id);
+}
+
+void BrowserMediaPlayerManagerEfl::UnregisterPlayerCodec(int player_id) {
+  return media_capability_manager_.UnregisterPlayerCodec(player_id);
+}
+
+bool BrowserMediaPlayerManagerEfl::HasPlayingVideoPlayers() {
+  return media_capability_manager_.HasPlayingVideoPlayers();
+}
+#endif
 }  // namespace content
index 9a6155c783f62b103644a4b057fa6dcfc2fd8267..b03aa82c12f27ff91ab1acfacbb2f0d46fefb4ac 100644 (file)
@@ -193,6 +193,12 @@ class CONTENT_EXPORT BrowserMediaPlayerManagerEfl
   void UpdateZOrder() override;
 #endif
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  media::PlayerCodecType RequestAvailableCodecType(int player_id) override;
+  void UnregisterPlayerCodec(int player_id) override;
+  bool HasPlayingVideoPlayers(void) override;
+#endif
+
   // Helper function to handle IPC from RenderMediaPlayerMangaerEfl.
   void OnPlay(RenderFrameHost* render_frame_host, int player_id);
   void OnPause(RenderFrameHost* render_frame_host,
index 6d1ce4274fe336dd824ad72c193fd893257c3932..512d977aa7cd807e79d65ebd3e5fbd47aad74167 100644 (file)
@@ -78,4 +78,45 @@ bool MediaCapabilityManagerBase::RunPlayer(
   // when hiding
   return was_not_awaiting;
 }
+
+#if defined(OS_TIZEN_DA_PRODUCT)
+PlayerCodecType MediaCapabilityManagerBase::RequestAvailableCodecType(int player_id) {
+  LOG(INFO) << __func__ <<"[" << player_id << "]";
+  for (std::pair<int, PlayerCodecType> it : player_codec_map_) {
+    if (it.second == PlayerCodecType::HW_CODEC) {
+      //Allocating SW codec , as HW can only use one video.
+      player_codec_map_[player_id] = PlayerCodecType::SW_CODEC;
+      LOG(INFO) << "player [" << player_id << "] acquired [SW] codec";
+      return PlayerCodecType::SW_CODEC;
+    }
+  }
+  LOG(INFO) << "player [" << player_id << "] acquired [HW] codec";
+  player_codec_map_[player_id] = PlayerCodecType::HW_CODEC;
+  return PlayerCodecType::HW_CODEC;
+}
+
+void MediaCapabilityManagerBase::UnregisterPlayerCodec(int player_id) {
+  LOG(INFO) << __func__ <<"[" << player_id << "]";
+  //std::string codec = player_codec_map_[player_id];
+  LOG(INFO) << "player [" << player_id << "] has ["
+            << (player_codec_map_[player_id] == PlayerCodecType::HW_CODEC ? "HW" : "SW")
+            << "] codec. release it";
+  player_codec_map_.erase(player_id);
+}
+
+bool MediaCapabilityManagerBase::HasPlayingVideoPlayers() const {
+  for (auto it = players_.begin(); it != players_.end(); ++it) {
+    LOG(INFO) << "player_id : " << it->first->GetPlayerId();
+    LOG(INFO) << "ispaused : " << it->first->IsPaused();
+    if (it->first->GetMediaType() & MediaType::Video) {
+      if (!(it->first->IsPaused()) && !(it->first->IsPlayerSuspended()) ) {
+           LOG(INFO) << "There is a playing video player. So, Keep waking display lock.";
+           return true;
+      }
+    }
+  }
+  LOG(INFO) << "There is no playing video players. So, Release display lock.";
+  return false;
+}
+#endif
 }  // namespace media
index 9b856d929dae8dc0138da38e303431d10f626137..2ef5c94faab634533f3516f582f94cab15718899 100644 (file)
@@ -37,13 +37,22 @@ class MediaCapabilityManagerBase {
     return FindSlots<type>{}(slots_).result;
   }
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  PlayerCodecType RequestAvailableCodecType(int player_id);
+  void UnregisterPlayerCodec(int player_id);
+  bool HasPlayingVideoPlayers() const;
+#endif
+
  protected:
   using PlayerList =
       std::unordered_map<MediaPlayerInterfaceEfl*, platform::PlayerInfo>;
-
   platform::SlotsType slots_;
   PlayerList players_;
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  std::unordered_map<int, PlayerCodecType> player_codec_map_;
+#endif
+
   bool RunPlayer(const platform::DescriptorType& descr,
                  MediaPlayerInterfaceEfl* player);
 
@@ -122,6 +131,12 @@ class MediaCapabilityManager : public MediaCapabilityManagerBase,
   // Gets number of players that have all |flags| set.
   unsigned PlayersCount(State flags);
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  PlayerCodecType RequestAvailableCodecType(int player_id);
+  void UnregisterPlayerCodec(int player_id);
+  bool HasPlayingVideoPlayers();
+#endif
+
  private:
   // Will make one step along the
   // BARRED -VISIBLE-> PREEMPTED -ACTIVE-> RUNNINIG
index 865647766c8daef2307f74624fca65a2139388e8..0b7dc5794e2d738c3345e65fd12c6eee42e01d97 100644 (file)
@@ -305,6 +305,23 @@ unsigned MediaCapabilityManager<ConflictStrategy>::PlayersCount(State state) {
                        });
 }
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+template <typename ConflictStrategy>
+PlayerCodecType MediaCapabilityManager<ConflictStrategy>::RequestAvailableCodecType(int player_id) {
+  return MediaCapabilityManagerBase::RequestAvailableCodecType(player_id);
+}
+
+template <typename ConflictStrategy>
+void MediaCapabilityManager<ConflictStrategy>::UnregisterPlayerCodec(int player_id) {
+  return MediaCapabilityManagerBase::UnregisterPlayerCodec(player_id);
+}
+
+template <typename ConflictStrategy>
+bool MediaCapabilityManager<ConflictStrategy>::HasPlayingVideoPlayers() {
+  return MediaCapabilityManagerBase::HasPlayingVideoPlayers();
+}
+#endif
+
 }  // namespace media
 
 #endif  // MEDIA_BASE_TIZEN_MEDIA_CAPABILITY_MANAGER_IMPL_H_
index f321006774881b8291da0f5e6f1d4797c07e2515..fafbec864dea4d2d259f8a39dd5307d6b7674e41 100644 (file)
@@ -851,6 +851,17 @@ void MediaPlayerBridgeCapi::DoPrepare(const std::string& fs_path) {
   } else {
     NotifyPlaybackState(blink::WebMediaPlayer::kPlaybackReady, GetPlayerId());
     SetDisplayAtPausedState();
+#endif
+#if defined(OS_TIZEN_DA_PRODUCT)
+    if (RequestAvailableCodecType(GetPlayerId()) == PlayerCodecType::HW_CODEC) {
+      // this is first player. use (DEFAULT)HW codec.
+      ret = player_set_video_codec_type_ex(player_, PLAYER_VIDEO_CODEC_TYPE_EX_DEFAULT);
+    } else {
+      // this is second player. use SW codec.
+      ret = player_set_video_codec_type_ex(player_, PLAYER_VIDEO_CODEC_TYPE_EX_SW);
+    }
+    if (ret != PLAYER_ERROR_NONE)
+      RunCompleteCB(false, FROM_HERE);
 #endif
     ret = player_prepare_async(player_, PlayerPreparedCb, this);
 #if defined(OS_TIZEN_TV_PRODUCT)
@@ -1046,6 +1057,11 @@ void MediaPlayerBridgeCapi::Release() {
   LOG_ID(INFO, GetPlayerId()) << "Release, this: " << this;
   player_prepared_ = false;
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  if (IsAllVideoPlayersStopped()) {
+    ReleaseDisplayLock();
+  }
+#endif
 #if defined(OS_TIZEN_TV_PRODUCT)
   if (player_released_) {
     LOG_ID(INFO, GetPlayerId()) << "player is already released";
@@ -1130,6 +1146,10 @@ void MediaPlayerBridgeCapi::Release() {
       player_unprepare(player_) != PLAYER_ERROR_NONE)
 #endif
     LOG_ID(ERROR, GetPlayerId()) << "|player_unprepare| failed";
+#if defined(OS_TIZEN_DA_PRODUCT)
+  else
+    UnregisterPlayerCodec(GetPlayerId());
+#endif
 
 #if !defined(OS_TIZEN_TV_PRODUCT)
   player_destroy(player_);
@@ -1309,6 +1329,7 @@ void MediaPlayerBridgeCapi::Pause(bool is_media_related_action) {
       << "Pause,this:" << this
       << ",is_media_related_action : " << is_media_related_action
       << ",current_time:" << GetCurrentTime().InSecondsF();
+
   if (is_resuming_ || is_seeking_ || !player_prepared_) {
     PushDelayedPlayerState(PLAYER_STATE_DELAYED_PAUSE);
     return;
@@ -1339,10 +1360,17 @@ void MediaPlayerBridgeCapi::Pause(bool is_media_related_action) {
   if (!is_file_url_)
     StartBufferingUpdateTimer();
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  is_paused_ = true;
+  if (IsAllVideoPlayersStopped())
+#else
   if (GetMediaType() & MediaType::Video)
+#endif
     ReleaseDisplayLock();
   StopCurrentTimeUpdateTimer();
+#if !defined(OS_TIZEN_DA_PRODUCT)
   is_paused_ = true;
+#endif
 }
 
 void MediaPlayerBridgeCapi::SetRate(double rate) {
@@ -4604,4 +4632,15 @@ void MediaPlayerBridgeCapi::ActivateCurrentStream(
   mixer_player_active_audio_ = player_;
 }
 #endif
+
+#if defined(OS_TIZEN_DA_PRODUCT)
+PlayerCodecType MediaPlayerBridgeCapi::RequestAvailableCodecType(int player_id) {
+  return manager()->RequestAvailableCodecType(player_id);
+}
+
+void MediaPlayerBridgeCapi::UnregisterPlayerCodec(int player_id) {
+  manager()->UnregisterPlayerCodec(player_id);
+}
+#endif
+
 }  // namespace media
index 3b7b5045f043de8113dc1575d2b5f29b878b381c..7fa367951b3400419813026ae087c67b25372e0b 100644 (file)
 #include "media/base/video_frame.h"
 #include "third_party/blink/public/platform/web_media_player.h"
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+#include "media/base/tizen/media_capabilities.h"
+#endif
+
 #if defined(TIZEN_VIDEO_HOLE)
 #include "ui/gfx/geometry/rect_f.h"
 #endif
@@ -224,6 +228,11 @@ class MEDIA_EXPORT MediaPlayerBridgeCapi : public MediaPlayerEfl {
 #endif
 #endif
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  PlayerCodecType RequestAvailableCodecType(int player_id);
+  void UnregisterPlayerCodec(int player_id);
+#endif
+
  protected:
   void Release() override;
   void Prepare(CompleteCB cb);
index d90915bf0a0b288a995ffd5638355923e7106f87..4a0e4efc0f537a5dd87a8474517a133a8fc983e6 100644 (file)
@@ -518,8 +518,10 @@ void MediaPlayerEfl::OnMediaError(std::pair<MediaError, std::string> err_info) {
       state = blink::WebMediaPlayer::kNetworkStateNetworkError;
       break;
   }
-
   manager()->OnNetworkStateChange(GetPlayerId(), state, err_info.second);
+#if defined(OS_TIZEN_DA_PRODUCT)
+  if(IsAllVideoPlayersStopped())
+#endif
   ReleaseDisplayLock();
 }
 
@@ -569,4 +571,13 @@ void MediaPlayerEfl::OnFocusReleased(bool resume_playing) {
 }
 #endif
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+bool MediaPlayerEfl::IsAllVideoPlayersStopped() const {
+  if (!(manager_->HasPlayingVideoPlayers())) {
+    return true;
+  } else {
+    return false;
+  }
+}
+#endif
 }  // namespace media
index 389a4170ca6d55733d99dd2c2330f0341dde98b1..6335274b45de8f1d0a9e22337e50d7c63e042267 100644 (file)
@@ -227,6 +227,10 @@ class MEDIA_EXPORT MediaPlayerEfl : public MediaPlayerInterfaceEfl {
 #endif
 #endif
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  bool IsAllVideoPlayersStopped() const;
+#endif
+
  protected:
   explicit MediaPlayerEfl(int player_id,
                           MediaPlayerManager* manager,
index ee63719487374afc1b3e5f346eebef8d8e90b795..079a988c673925ce78ceb6a6166b7228203d92e1 100644 (file)
 #include "media/base/tizen/media_player_efl.h"
 #include "third_party/blink/public/platform/web_media_player.h"
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+#include "media/base/tizen/media_capabilities.h"
+#endif
+
 #if defined(OS_TIZEN_TV_PRODUCT)
 #include "content/browser/media/tizen/hardware_resource_helper.h"
 #endif
@@ -151,8 +155,12 @@ class MEDIA_EXPORT MediaPlayerManager {
 #endif
   virtual content::WebContents* GetWebContents(int player_id) = 0;
   virtual void OnPlayerSuspendRequest(int player_id) = 0;
+#if defined(OS_TIZEN_DA_PRODUCT)
+  virtual PlayerCodecType RequestAvailableCodecType(int player_id) = 0;
+  virtual void UnregisterPlayerCodec(int player_id) = 0;
+  virtual bool HasPlayingVideoPlayers(void) = 0;
+#endif
 };
-
 }  // namespace media
 
 #endif  // MEDIA_BASE_TIZEN_MEDIA_PLAYER_MANAGER_EFL_H_
index 8e4d57ff417ba7db07e3770157e08003211386b4..e12ad57273aa742cd7e4390d3012a8bb9a157f36 100644 (file)
@@ -864,10 +864,10 @@ void MediaSourcePlayerCapi::PlayInternal() {
     is_paused_ = false;
     paused_by_buffering_logic_ = false;
     should_seek_after_resume_ = true;
-
+#if !defined(OS_TIZEN_DA_PRODUCT)
     if (HasVideoMediaType())
       WakeUpDisplayAndAcquireDisplayLock();
-
+#endif
     StartCurrentTimeUpdateTimer();
   }
 }
@@ -876,8 +876,11 @@ void MediaSourcePlayerCapi::SeekInternal() {
   LOG(INFO) << "seek time : " << seek_offset_
             << " state : " << GetString(GetPlayerState());
 #if defined(OS_TIZEN_DA_PRODUCT)
-  if (GetPlayerState() == PLAYER_STATE_PAUSED)
+  if (((GetPlayerState() == PLAYER_STATE_PAUSED)
+     || (GetPlayerState() == PLAYER_STATE_READY))
+     && IsAllVideoPlayersStopped()) {
     ReleaseDisplayLock();
+  }
 #endif
   if (GetPlayerState() < PLAYER_STATE_READY || !player_prepared_) {
     // Will be handled once prepare is complete.
@@ -1330,8 +1333,14 @@ void MediaSourcePlayerCapi::Pause(bool is_media_related_action) {
     return;
 
   StopCurrentTimeUpdateTimer();
-  if (!is_media_related_action && HasVideoMediaType()) {
-    ReleaseDisplayLock();
+  if (!is_media_related_action) {
+#if defined(OS_TIZEN_DA_PRODUCT)
+    if (IsAllVideoPlayersStopped()) {
+#else
+    if (HasVideoMediaType()) {
+#endif
+      ReleaseDisplayLock();
+    }
   }
 }
 
@@ -1361,6 +1370,11 @@ void MediaSourcePlayerCapi::Initialize() {
 
 void MediaSourcePlayerCapi::Release() {
   LOG(INFO) << "Release,this:" << (void*)this;
+#if defined(OS_TIZEN_DA_PRODUCT)
+  if (IsAllVideoPlayersStopped()) {
+    ReleaseDisplayLock();
+  }
+#endif
 #if !defined(OS_TIZEN_TV_PRODUCT)
   is_paused_ = true;
 #endif
@@ -2246,6 +2260,11 @@ bool MediaSourcePlayerCapi::ChangePlayerState(player_state_e state) {
     // Multiple PLAY/PAUSE requests can be triggered during rapid seek.
     // Reset delayed state handler to avoid moving CAPI player to an
     // invalid state.
+#if defined(OS_TIZEN_DA_PRODUCT)
+    if ((GetPlayerState() == PLAYER_STATE_PAUSED)
+       && IsAllVideoPlayersStopped())
+      ReleaseDisplayLock();
+#endif
     return false;
   }
 
@@ -2253,6 +2272,9 @@ bool MediaSourcePlayerCapi::ChangePlayerState(player_state_e state) {
     // We need to destroy the player if we want to abort player_prepare
     player_new_state_ = PLAYER_STATE_NONE;
     player_unprepare(player_);
+#if defined(OS_TIZEN_DA_PRODUCT)
+    UnregisterPlayerCodec(GetPlayerId());
+#endif
     return true;
   }
 
@@ -2318,6 +2340,9 @@ bool MediaSourcePlayerCapi::ChangePlayerState(player_state_e state) {
           HandlePlayerError(error, FROM_HERE);
           return false;
         }
+#if defined(OS_TIZEN_DA_PRODUCT)
+        UnregisterPlayerCodec(GetPlayerId());
+#endif
       }
       player_prepared_ = false;
       break;
@@ -2325,6 +2350,19 @@ bool MediaSourcePlayerCapi::ChangePlayerState(player_state_e state) {
       if (GetPlayerState() == PLAYER_STATE_IDLE) {
 #if defined(OS_TIZEN_TV_PRODUCT)
         NotifyPlaybackState(blink::WebMediaPlayer::kPlaybackReady);
+#endif
+#if defined(OS_TIZEN_DA_PRODUCT)
+        if (RequestAvailableCodecType(GetPlayerId()) == PlayerCodecType::HW_CODEC) {
+          // this is first player. use DEFAULT(HW) codec.
+          error = player_set_video_codec_type_ex(player_, PLAYER_VIDEO_CODEC_TYPE_EX_DEFAULT);
+        } else {
+          // this is second player. use SW codec.
+          error = player_set_video_codec_type_ex(player_, PLAYER_VIDEO_CODEC_TYPE_EX_SW);
+        }
+        if (error != PLAYER_ERROR_NONE) {
+          HandlePlayerError(error, FROM_HERE);
+          return false;
+        }
 #endif
         if (!SetPlayerExtraInitParams())
           return false;
@@ -2347,6 +2385,10 @@ bool MediaSourcePlayerCapi::ChangePlayerState(player_state_e state) {
         HandlePlayerError(error, FROM_HERE);
         return false;
       }
+#if defined(OS_TIZEN_DA_PRODUCT)
+      if (HasVideoMediaType())
+        WakeUpDisplayAndAcquireDisplayLock();
+#endif
 #if defined(OS_TIZEN_TV_PRODUCT)
       NotifyPlaybackState(blink::WebMediaPlayer::kPlaybackStart);
 #endif
@@ -2556,4 +2598,14 @@ base::Optional<uint> MediaSourcePlayerCapi::GetVideoBitrate() const {
 }
 #endif
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+PlayerCodecType MediaSourcePlayerCapi::RequestAvailableCodecType(int player_id) {
+  return manager()->RequestAvailableCodecType(player_id);
+}
+
+void MediaSourcePlayerCapi::UnregisterPlayerCodec(int player_id) {
+  manager()->UnregisterPlayerCodec(player_id);
+}
+#endif
+
 }  // namespace media
index 578caec8bef2ecaeca6737d2fb09ab5b5281382c..ddf6b02e634b1d8cd6c33d36cb5a6ba12774bd1e 100644 (file)
 #include "media/filters/source_buffer_stream.h"
 #include "third_party/blink/public/platform/web_media_player.h"
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+#include "media/base/tizen/media_capabilities.h"
+#endif
+
 #if defined(TIZEN_VIDEO_HOLE)
 namespace gfx {
 class RectF;
@@ -168,6 +172,11 @@ class MEDIA_EXPORT MediaSourcePlayerCapi : public MediaPlayerEfl,
   base::Optional<PlayerStates> ReturnPlayerState() override;
 #endif
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  PlayerCodecType RequestAvailableCodecType(int player_id);
+  void UnregisterPlayerCodec(int player_id);
+#endif
+
  protected:
   void Release() override;
   void OnMediaError(std::pair<MediaError, std::string> error_info) override;
index a261843eefaf9eeeac8b8a357c5d55196c0a359a..2302369eb5f5bf9d2afa2ad5e14cf03be090ac3d 100644 (file)
@@ -193,6 +193,19 @@ void SuspendingMediaPlayer::AcquireKey(int player_id) {
     manager_->AcquireKey(player_id);
 }
 #endif
+#if defined(OS_TIZEN_DA_PRODUCT)
+PlayerCodecType SuspendingMediaPlayer::RequestAvailableCodecType(int player_id) {
+  return manager_->RequestAvailableCodecType(player_id);
+}
+
+void SuspendingMediaPlayer::UnregisterPlayerCodec(int player_id) {
+  manager_->UnregisterPlayerCodec(player_id);
+}
+
+bool SuspendingMediaPlayer::HasPlayingVideoPlayers() {
+  return manager_->HasPlayingVideoPlayers();
+}
+#endif
 
 MediaTypeFlags SuspendingMediaPlayer::GetMediaType() const {
   return player_->GetMediaType();
index 29df2e493c2979523b82675a707947a2b16a38bf..f827ee0a4ae97b385225d5e37733fbf92fcd16e6 100644 (file)
@@ -143,6 +143,12 @@ class SuspendingMediaPlayer : public MediaPlayerInterfaceEfl,
   void OnFocusReleased(bool resume_playing) override;
 #endif
 
+#if defined(OS_TIZEN_DA_PRODUCT)
+  PlayerCodecType RequestAvailableCodecType(int player_id) override;
+  void UnregisterPlayerCodec(int player_id) override;
+  bool HasPlayingVideoPlayers(void) override;
+#endif
+
 #if defined(TIZEN_EXTERNAL_MEDIA_EVENT)
   void ReleaseKey(int player_id) override;
   void AcquireKey(int player_id) override;