[M108 Migration][MM] Create MediaPlayerESPlusPlayer as multiple instances. 22/287222/11
authorSuhaspoornachandra <s.poornachan@samsung.com>
Wed, 25 Jan 2023 03:26:36 +0000 (08:56 +0530)
committerBot Blink <blinkbot@samsung.com>
Fri, 10 Mar 2023 13:17:56 +0000 (13:17 +0000)
MediaPlayerESPlusPlayer is created as singleton before, previously, but it caused an issue
that no video can be played in multi-video content.
This patch therefore changes MediaPlayerESPlusPlayer to be created as multiple instances and
it makes the latest video be played in multi-video content.

References:
https://review.tizen.org/gerrit/276973/
https://review.tizen.org/gerrit/277230/

Change-Id: Ifeb2e3af55bd5eba2cb58adcda2132d16d533d24
Signed-off-by: Suhaspoornachandra <s.poornachan@samsung.com>
tizen_src/chromium_impl/content/browser/media/tizen_renderer_impl.cc
tizen_src/chromium_impl/content/browser/media/tizen_renderer_impl.h
tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc
tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h

index 7999ed4..7f91026 100644 (file)
@@ -201,25 +201,13 @@ TizenRendererImpl::~TizenRendererImpl() {
 
   weak_factory_.InvalidateWeakPtrs();
 
-  if (GetPlayer()) {
-    GetPlayer()->Release();
-
-    // TODO(yg48.jung) : Currently |EsppPlayer| is singelton. |media_player_|
-    // will be changed as |std::unique_ptr| type later.
-    if (media_player_ !=
-        media::MediaPlayerESPlusPlayer::GetMediaPlayerESPlusPlayer())
-      delete media_player_;
-    media_player_ = nullptr;
-  }
+  if (media_player_)
+    media_player_->Release();
 
   if (web_contents_observer_)
     web_contents_observer_->RemoveMediaPlayerRenderer(this);
 }
 
-media::MediaPlayerTizen* TizenRendererImpl::GetPlayer() {
-  return media_player_;
-}
-
 void TizenRendererImpl::Initialize(media::MediaResource* media_resource,
                                    media::RendererClient* client,
                                    media::PipelineStatusCallback init_cb) {
@@ -234,30 +222,29 @@ void TizenRendererImpl::Initialize(media::MediaResource* media_resource,
   media_resource_ = media_resource;
 
   if (media_resource_->GetType() == media::MediaResource::STREAM) {
-    media_player_ =
-        media::MediaPlayerESPlusPlayer::GetMediaPlayerESPlusPlayer();
+    media_player_ = std::make_unique<media::MediaPlayerESPlusPlayer>();
   } else {
-    media_player_ = new media::MediaPlayerBridgeCapiAdapter(
+    media_player_ = std::make_unique<media::MediaPlayerBridgeCapiAdapter>(
         media_resource->GetMediaUrlParams().media_url, volume_);
   }
 
-  if (!GetPlayer()->CreatePlayer()) {
+  if (!media_player_->CreatePlayer()) {
     std::move(init_cb_).Run(media::PIPELINE_ERROR_INITIALIZATION_FAILED);
     return;
   }
 
   // TODO: return unsupported error for CDM.
   std::move(init_cb_).Run(media::PIPELINE_OK);
-  GetPlayer()->SetTaskRunner(task_runner_.get());
+  media_player_->SetTaskRunner(task_runner_.get());
 }
 
 void TizenRendererImpl::SetStreamInfo() {
   if (media_resource_->GetType() == media::MediaResource::URL) {
     video_renderer_client_ = std::make_unique<RendererClientInternal>(
         media::DemuxerStream::VIDEO, this);
-    GetPlayer()->SetStreamInfo(media::DemuxerStream::VIDEO, 0,
-                               video_renderer_client_.get());
-    GetPlayer()->SetRendererClientExtension(video_renderer_client_.get());
+    media_player_->SetStreamInfo(media::DemuxerStream::VIDEO, 0,
+                                 video_renderer_client_.get());
+    media_player_->SetRendererClientExtension(video_renderer_client_.get());
     return;
   }
 
@@ -265,26 +252,24 @@ void TizenRendererImpl::SetStreamInfo() {
   if (audio_stream_) {
     audio_renderer_client_ = std::make_unique<RendererClientInternal>(
         media::DemuxerStream::AUDIO, this);
-    GetPlayer()->SetStreamInfo(media::DemuxerStream::AUDIO, audio_stream_,
-                               audio_renderer_client_.get());
+    media_player_->SetStreamInfo(media::DemuxerStream::AUDIO, audio_stream_,
+                                 audio_renderer_client_.get());
   }
 
   video_stream_ = media_resource_->GetFirstStream(media::DemuxerStream::VIDEO);
   if (video_stream_) {
     video_renderer_client_ = std::make_unique<RendererClientInternal>(
         media::DemuxerStream::VIDEO, this);
-    GetPlayer()->SetStreamInfo(media::DemuxerStream::VIDEO, video_stream_,
-                               video_renderer_client_.get());
+    media_player_->SetStreamInfo(media::DemuxerStream::VIDEO, video_stream_,
+                                 video_renderer_client_.get());
+
+    // Will be removed later by using |ClientExtention| interface.
 #if defined(TIZEN_TBM_SUPPORT)
-    media::MediaPlayerESPlusPlayer::GetMediaPlayerESPlusPlayer()
-        ->SetFrameAvailableCallback(
-            base::BindRepeating(&TizenRendererImpl::OnNewTbmFrameAvailable,
-                                base::Unretained(this)));
+    media_player_->SetFrameAvailableCallback(base::BindRepeating(
+        &TizenRendererImpl::OnNewTbmFrameAvailable, base::Unretained(this)));
 #else
-    // Will be removed later by using |ClientExtention| interface.
-    media::MediaPlayerESPlusPlayer::GetMediaPlayerESPlusPlayer()
-        ->SetFrameAvailableCallback(base::BindRepeating(
-            &TizenRendererImpl::OnNewFrameAvailable, base::Unretained(this)));
+    media_player_->SetFrameAvailableCallback(base::BindRepeating(
+        &TizenRendererImpl::OnNewFrameAvailable, base::Unretained(this)));
 #endif
   }
 }
@@ -338,13 +323,13 @@ void TizenRendererImpl::Flush(base::OnceClosure flush_cb) {
 
   flush_cb_ = std::move(flush_cb);
   state_ = STATE_FLUSHING;
-  GetPlayer()->Flush(std::move(flush_cb));
+  media_player_->Flush(std::move(flush_cb));
 }
 
 void TizenRendererImpl::Seek(base::TimeDelta time) {
   LOG(INFO) << "(" << static_cast<void*>(this) << ") " << __func__
             << " time : " << time.InMicroseconds();
-  GetPlayer()->Seek(time);
+  media_player_->Seek(time);
 }
 
 #if defined(TIZEN_VIDEO_HOLE)
@@ -357,8 +342,8 @@ void TizenRendererImpl::SetVideoHole(bool is_video_hole) {
 }
 
 void TizenRendererImpl::SetPlayerVideoHole() {
-  if (GetPlayer())
-    GetPlayer()->SetVideoHole(is_video_hole_);
+  if (media_player_)
+    media_player_->SetVideoHole(is_video_hole_);
 }
 
 void TizenRendererImpl::SetMediaGeometry(const gfx::RectF& rect) {
@@ -370,8 +355,8 @@ void TizenRendererImpl::SetMediaGeometry(const gfx::RectF& rect) {
 }
 
 void TizenRendererImpl::SetPlayerMediaGeometry() {
-  if (GetPlayer())
-    GetPlayer()->SetMediaGeometry(GetViewportRect(), video_rect_);
+  if (media_player_)
+    media_player_->SetMediaGeometry(GetViewportRect(), video_rect_);
 }
 
 gfx::Rect TizenRendererImpl::GetViewportRect() const {
@@ -395,28 +380,29 @@ gfx::Rect TizenRendererImpl::GetViewportRect() const {
 void TizenRendererImpl::StartPlayingFrom(base::TimeDelta time) {
   LOG(INFO) << "(" << static_cast<void*>(this) << ") " << __func__
             << " time : " << time.InMicroseconds();
-  DCHECK(GetPlayer());
+  DCHECK(media_player_);
   DCHECK(task_runner_->BelongsToCurrentThread());
   TRACE_EVENT1("media", "TizenRendererImpl::StartPlayingFrom", "time_us",
                time.InMicroseconds());
 
-  if (!GetPlayer()->IsInitialized())
+  if (!media_player_->IsInitialized()) {
 #if defined(TIZEN_VIDEO_HOLE)
     if (is_video_hole_) {
       SetPlayerVideoHole();
       SetPlayerMediaGeometry();
     }
 #endif
-  GetPlayer()->Initialize(sink_);
+    media_player_->Initialize(sink_);
+  }
 
-  if (!GetPlayer()->IsPrepared()) {
+  if (!media_player_->IsPrepared()) {
     SetStreamInfo();
     SetPlayerVolume();
-    GetPlayer()->Prepare();
+    media_player_->Prepare();
   }
 
   state_ = STATE_INITIALIZING;
-  GetPlayer()->Seek(time);
+  media_player_->Seek(time);
   state_ = STATE_PLAYING;
 }
 
@@ -433,10 +419,10 @@ void TizenRendererImpl::SetPlaybackRate(double playback_rate) {
   playback_rate_ = playback_rate;
 
   if (playback_rate > 0) {
-    GetPlayer()->SetRate(playback_rate_);
-    GetPlayer()->Play();
+    media_player_->SetRate(playback_rate_);
+    media_player_->Play();
   } else {
-    GetPlayer()->Pause();
+    media_player_->Pause();
   }
 }
 
@@ -449,16 +435,16 @@ void TizenRendererImpl::SetVolume(float volume) {
   volume_ = volume;
 
   // |SetVolume| could be called before initializing.
-  if (GetPlayer())
+  if (media_player_)
     SetPlayerVolume();
 }
 
 void TizenRendererImpl::SetPlayerVolume() {
-  GetPlayer()->SetVolume(volume_);
+  media_player_->SetVolume(volume_);
 }
 
 base::TimeDelta TizenRendererImpl::GetMediaTime() {
-  return GetPlayer()->GetCurrentTime();
+  return media_player_->GetCurrentTime();
 }
 
 void TizenRendererImpl::OnSelectedVideoTracksChanged(
index d526c43..fd4dc95 100644 (file)
@@ -144,8 +144,6 @@ class CONTENT_EXPORT TizenRendererImpl
   void OnVideoOpacityChange(bool opaque);
   void OnVideoFrameRateChange(absl::optional<int> fps);
 
-  media::MediaPlayerTizen* GetPlayer();
-
   media::RendererClient* client_;
 
   State state_;
@@ -172,7 +170,7 @@ class CONTENT_EXPORT TizenRendererImpl
   media::DemuxerStream* audio_stream_;
   media::DemuxerStream* video_stream_;
 
-  media::MediaPlayerTizen* media_player_ = nullptr;
+  std::unique_ptr<media::MediaPlayerTizen> media_player_;
   double volume_ = kDefaultVolume;
   double playback_rate_ = 0.0;
 
index 4b15096..156a7d8 100644 (file)
@@ -122,9 +122,9 @@ void ErrorCallback(const esplusplayer_error_type error_type, void* user_data) {
   player->OnError(error_type);
 }
 
-// static
-MediaPlayerESPlusPlayer* MediaPlayerESPlusPlayer::GetMediaPlayerESPlusPlayer() {
-  return base::Singleton<MediaPlayerESPlusPlayer>::get();
+MediaPlayerESPlusPlayer::MediaPlayerESPlusPlayer() {
+  LOG(INFO) << "(" << static_cast<void*>(this) << ") " << __func__;
+  player_id_ = MediaPlayerRegistry::GetInstance()->RegisterMediaPlayer(this);
 }
 
 MediaPlayerESPlusPlayer::~MediaPlayerESPlusPlayer() {
@@ -200,8 +200,6 @@ void MediaPlayerESPlusPlayer::Initialize(VideoRendererSink* sink) {
     return;
   }
 
-  player_id_ = MediaPlayerRegistry::GetInstance()->RegisterMediaPlayer(this);
-
   LOG(INFO) << "(" << static_cast<void*>(this) << ") " << __func__
             << " state:" << GetString(GetPlayerState());
 
index 1f80bd7..0361c4c 100644 (file)
@@ -8,7 +8,6 @@
 #include <esplusplayer_capi.h>
 
 #include "base/containers/circular_deque.h"
-#include "base/memory/singleton.h"
 #include "base/memory/unsafe_shared_memory_region.h"
 #include "base/task/single_thread_task_runner.h"
 #include "base/time/time.h"
@@ -35,7 +34,8 @@ using Queue = base::circular_deque<scoped_refptr<DecoderBuffer>>;
 // This class handles media source extensions for CAPI port.
 class MEDIA_EXPORT MediaPlayerESPlusPlayer : public MediaPlayerTizen {
  public:
-  static MediaPlayerESPlusPlayer* GetMediaPlayerESPlusPlayer();
+  MediaPlayerESPlusPlayer();
+  ~MediaPlayerESPlusPlayer() override;
 
 #if defined(TIZEN_TBM_SUPPORT)
   using DataRequestCB = base::RepeatingCallback<
@@ -112,10 +112,6 @@ class MEDIA_EXPORT MediaPlayerESPlusPlayer : public MediaPlayerTizen {
     base::circular_deque<scoped_refptr<DecoderBuffer>> pending_buffers_;
   };
 
-  friend struct base::DefaultSingletonTraits<MediaPlayerESPlusPlayer>;
-
-  explicit MediaPlayerESPlusPlayer() = default;
-  ~MediaPlayerESPlusPlayer() override;
   MediaPlayerESPlusPlayer(const MediaPlayerESPlusPlayer&) = delete;
   MediaPlayerESPlusPlayer& operator=(const MediaPlayerESPlusPlayer&) = delete;