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>
#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
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;
: 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);
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) {
<< " 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();
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;
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();
--- /dev/null
+// 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
--- /dev/null
+// 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
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
"//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",