[M108 Migration][MM] Seperate MediaPlayerESPlusPlayer class for TV. 72/290272/3
authorSun-woo Nam <sunny.nam@samsung.com>
Wed, 22 Mar 2023 04:41:57 +0000 (21:41 -0700)
committerBot Blink <blinkbot@samsung.com>
Wed, 22 Mar 2023 13:25:41 +0000 (13:25 +0000)
Creates MediaPlayerESPlusPlayerTV to locate TV-specific codes for esplusplayer.
And dummy functions for migration has been crated.
Also, extract some functions in MediaPlayerESPlusPlayer for this job.
Codes for TV are expected to be implemented only on MediaPlayerESPlusPlayerTV.

Reference:
https://review.tizen.org/gerrit/#/c/287579/ (partially)
https://review.tizen.org/gerrit/#/c/288181/
https://review.tizen.org/gerrit/#/c/288297/ (partially)

Change-Id: I26a09ecc96d105128bfac58e3eefa3b0fe64c75c
Signed-off-by: Sun-woo Nam <sunny.nam@samsung.com>
tizen_src/chromium_impl/content/browser/media/tizen_renderer_impl.cc
tizen_src/chromium_impl/media/filters/media_player_esplusplayer.cc
tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h
tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.cc [new file with mode: 0644]
tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.h [new file with mode: 0644]
tizen_src/chromium_impl/media/filters/media_player_tizen.h
tizen_src/chromium_impl/media/media_efl.gni

index ed56acb..30c01e9 100644 (file)
 #include "tizen_src/chromium_impl/media/filters/media_player_registry.h"
 #include "tizen_src/chromium_impl/media/filters/media_player_tizen.h"
 
+#if BUILDFLAG(IS_TIZEN_TV)
+#include "tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.h"
+#endif
+
 #if defined(TIZEN_VIDEO_HOLE)
 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
 #endif
@@ -227,7 +231,11 @@ void TizenRendererImpl::Initialize(media::MediaResource* media_resource,
   media_resource_ = media_resource;
 
   if (media_resource_->GetType() == media::MediaResource::STREAM) {
+#if BUILDFLAG(IS_TIZEN_TV)
+    media_player_ = std::make_unique<media::MediaPlayerESPlusPlayerTV>();
+#else
     media_player_ = std::make_unique<media::MediaPlayerESPlusPlayer>();
+#endif
   } else {
     // When the type is media::MediaResource::URL
     std::string user_agent;
index 5d13de1..3613f7d 100644 (file)
@@ -610,6 +610,33 @@ esplusplayer_state MediaPlayerESPlusPlayer::GetPlayerState() {
                     : ESPLUSPLAYER_STATE_NONE);
 }
 
+int MediaPlayerESPlusPlayer::SetVideoStreamInfo(
+    media::VideoDecoderConfig& video_config,
+    esplusplayer_video_stream_info& video_stream_info) {
+  video_stream_info.width = video_config.coded_size().width();
+  video_stream_info.height = video_config.coded_size().height();
+  video_stream_info.mime_type =
+      ConvertToESPlusVideoMimeType(video_config.codec());
+
+  // TODO: Fetch frame rate from demuxer?
+  video_stream_info.framerate_num = kVideoFramerateNum;
+  video_stream_info.framerate_den = kVideoFramerateDen;
+  video_stream_info.codec_data_length = video_config.extra_data().size();
+  if (video_stream_info.codec_data_length > 0) {
+    video_stream_info.codec_data =
+        (char*)(const_cast<unsigned char*>(video_config.extra_data().data()));
+  } else {
+    video_stream_info.codec_data = NULL;
+  }
+  auto max_resolution =
+      GetMaxResolution(video_stream_info.mime_type, is_video_hole_);
+  LOG(INFO) << "max resolution: " << max_resolution.ToString();
+
+  video_stream_info.max_width = max_resolution.width();
+  video_stream_info.max_height = max_resolution.height();
+  return ESPLUSPLAYER_ERROR_TYPE_NONE;
+}
+
 void MediaPlayerESPlusPlayer::InitializeStreamConfig(DemuxerStream::Type type) {
   LOG(INFO) << "(" << static_cast<void*>(this) << ") " << __func__;
   DemuxerStream* stream = GetDemuxerStream(type);
@@ -681,29 +708,7 @@ void MediaPlayerESPlusPlayer::InitializeStreamConfig(DemuxerStream::Type type) {
     esplusplayer_video_stream_info video_stream_info;
     memset(&video_stream_info, 0, sizeof(esplusplayer_video_stream_info));
 
-    video_stream_info.width = video_config.coded_size().width();
-    video_stream_info.height = video_config.coded_size().height();
-    video_stream_info.mime_type =
-        ConvertToESPlusVideoMimeType(video_config.codec());
-
-    // TODO: Fetch frame rate from demuxer?
-    video_stream_info.framerate_num = kVideoFramerateNum;
-    video_stream_info.framerate_den = kVideoFramerateDen;
-    video_stream_info.codec_data_length = video_config.extra_data().size();
-    if (video_stream_info.codec_data_length > 0) {
-      video_stream_info.codec_data =
-          (char*)(const_cast<unsigned char*>(video_config.extra_data().data()));
-    } else {
-      video_stream_info.codec_data = NULL;
-    }
-    auto max_resolution =
-        GetMaxResolution(video_stream_info.mime_type, is_video_hole_);
-    LOG(INFO) << "max resolution: " << max_resolution.ToString();
-
-    video_stream_info.max_width = max_resolution.width();
-    video_stream_info.max_height = max_resolution.height();
-
-    int error;
+    int error = SetVideoStreamInfo(video_config, video_stream_info);
     if (!IsValid(type)) {
       error = esplusplayer_set_video_stream_info(esplayer_, &video_stream_info);
       if (error != ESPLUSPLAYER_ERROR_TYPE_NONE) {
@@ -992,6 +997,10 @@ void MediaPlayerESPlusPlayer::OnPrepareComplete(bool result) {
             << " pending_seek_ : " << pending_seek_
             << " pending_seek_position_ : " << pending_seek_position_;
 
+  PostPrepareComplete();
+}
+
+void MediaPlayerESPlusPlayer::PostPrepareComplete() {
 #if defined(TIZEN_VIDEO_HOLE)
   if (is_video_hole_)
     video_plane_controller_->ResetMediaGeometry();
index 7cd0780..0718057 100644 (file)
@@ -115,6 +115,17 @@ class MEDIA_EXPORT MediaPlayerESPlusPlayer : public MediaPlayerTizen {
 
   PlayerRoleFlags GetRoles() const noexcept override;
 
+ protected:
+  // Product sepecific implementation.
+  virtual int SetVideoStreamInfo(
+      media::VideoDecoderConfig& video_config,
+      esplusplayer_video_stream_info& video_stream_info);
+  virtual bool ReadFromBufferQueue(DemuxerStream::Type type);
+  virtual esplusplayer_submit_status SubmitEsPacket(
+      DemuxerStream::Type type,
+      scoped_refptr<DecoderBuffer> buffer);
+  virtual void PostPrepareComplete();
+
  private:
   struct ElementryStream {
     bool is_valid_ = false;
@@ -138,11 +149,7 @@ class MEDIA_EXPORT MediaPlayerESPlusPlayer : public MediaPlayerTizen {
   void OnBufferReady(DemuxerStream::Type type,
                      DemuxerStream::Status status,
                      scoped_refptr<DecoderBuffer> buffer);
-  bool ReadFromBufferQueue(DemuxerStream::Type type);
   esplusplayer_submit_status SubmitEosPacket(DemuxerStream::Type type);
-  esplusplayer_submit_status SubmitEsPacket(
-      DemuxerStream::Type type,
-      scoped_refptr<DecoderBuffer> buffer);
 
   void SeekInternal(base::TimeDelta time);
   void UpdateBufferedDtsDifference();
diff --git a/tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.cc b/tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.cc
new file mode 100644 (file)
index 0000000..ba3dc95
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2023 Samsung Electronics Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.h"
+
+#include "media/base/decoder_buffer.h"
+#include "media/base/renderer_client.h"
+
+namespace media {
+
+MediaPlayerESPlusPlayerTV::MediaPlayerESPlusPlayerTV() {}
+
+MediaPlayerESPlusPlayerTV::~MediaPlayerESPlusPlayerTV() {}
+
+void MediaPlayerESPlusPlayerTV::Initialize(VideoRendererSink* sink) {
+  LOG(INFO) << "(" << static_cast<void*>(this) << ") " << __func__;
+  MediaPlayerESPlusPlayer::Initialize(sink);
+}
+
+void MediaPlayerESPlusPlayerTV::Play() {
+  LOG(INFO) << "(" << static_cast<void*>(this) << ") " << __func__;
+  MediaPlayerESPlusPlayer::Play();
+}
+
+void MediaPlayerESPlusPlayerTV::PostPrepareComplete() {
+  MediaPlayerESPlusPlayer::PostPrepareComplete();
+}
+
+int MediaPlayerESPlusPlayerTV::SetVideoStreamInfo(
+    media::VideoDecoderConfig& video_config,
+    esplusplayer_video_stream_info& video_stream_info) {
+  MediaPlayerESPlusPlayer::SetVideoStreamInfo(video_config, video_stream_info);
+  return 0;
+}
+
+bool MediaPlayerESPlusPlayerTV::ReadFromBufferQueue(DemuxerStream::Type type) {
+  return MediaPlayerESPlusPlayer::ReadFromBufferQueue(type);
+}
+
+esplusplayer_submit_status MediaPlayerESPlusPlayerTV::SubmitEsPacket(
+    DemuxerStream::Type type,
+    scoped_refptr<DecoderBuffer> buffer) {
+  esplusplayer_submit_status status =
+      MediaPlayerESPlusPlayer::SubmitEsPacket(type, buffer);
+  return status;
+}
+
+void MediaPlayerESPlusPlayerTV::EnableLowLatencyMode() {
+  NOTIMPLEMENTED();
+}
+
+void MediaPlayerESPlusPlayerTV::SetHardwareResource(int config) {
+  NOTIMPLEMENTED();
+}
+
+void MediaPlayerESPlusPlayerTV::EnableTbmBufferCallback(bool enable) {
+  NOTIMPLEMENTED();
+}
+
+void MediaPlayerESPlusPlayerTV::SetAppInfo() {
+  NOTIMPLEMENTED();
+}
+
+void MediaPlayerESPlusPlayerTV::OnVideoFrameDropped(
+    const uint64_t dropped_count) {
+  NOTIMPLEMENTED();
+}
+
+}  // namespace media
diff --git a/tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.h b/tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.h
new file mode 100644 (file)
index 0000000..7d34a97
--- /dev/null
@@ -0,0 +1,39 @@
+// Copyright 2023 Samsung Electronics Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "tizen_src/chromium_impl/media/filters/media_player_esplusplayer.h"
+
+namespace media {
+
+class DemuxerStream;
+
+class MEDIA_EXPORT MediaPlayerESPlusPlayerTV : public MediaPlayerESPlusPlayer {
+ public:
+  MediaPlayerESPlusPlayerTV();
+  ~MediaPlayerESPlusPlayerTV() override;
+
+  void Initialize(VideoRendererSink* sink) override;
+  void Play() override;
+
+  void EnableLowLatencyMode() override;
+  void SetHardwareResource(int config) override;
+  void EnableTbmBufferCallback(bool enable) override;
+  void SetAppInfo() override;
+
+  void OnVideoFrameDropped(const uint64_t dropped_count);
+
+ protected:
+  void PostPrepareComplete() override;
+  int SetVideoStreamInfo(
+      media::VideoDecoderConfig& video_config,
+      esplusplayer_video_stream_info& video_stream_info) override;
+  bool ReadFromBufferQueue(DemuxerStream::Type type) override;
+  esplusplayer_submit_status SubmitEsPacket(
+      DemuxerStream::Type type,
+      scoped_refptr<DecoderBuffer> buffer) override;
+
+ private:
+  base::WeakPtrFactory<MediaPlayerESPlusPlayerTV> weak_factory_{this};
+};
+}  // namespace media
index 666d9d2..27345c0 100644 (file)
@@ -130,6 +130,13 @@ class MEDIA_EXPORT MediaPlayerTizen {
   virtual MediaTypeFlags GetMediaType() const = 0;
   virtual void SetMediaType(DemuxerStream::Type type) = 0;
   virtual PlayerRoleFlags GetRoles() const noexcept = 0;
+
+#if BUILDFLAG(IS_TIZEN_TV)
+  virtual void EnableLowLatencyMode() {}
+  virtual void SetHardwareResource(int config) {}
+  virtual void EnableTbmBufferCallback(bool enable) {}
+  virtual void SetAppInfo() {}
+#endif
 };
 }  // namespace media
 
index f334ee7..0d5ca02 100644 (file)
@@ -57,6 +57,13 @@ if (tizen_multimedia) {
     "//tizen_src/chromium_impl/media/filters/sequence.h",
   ]
 
+  if (tizen_product_tv) {
+    external_media_video_decode_sources += [
+      "//tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.cc",
+      "//tizen_src/chromium_impl/media/filters/media_player_esplusplayer_tv.h",
+    ]
+  }
+
   # MMPlayer implementation
   external_media_video_decode_config += [
     "//tizen_src/build:capi-media-player",