#endif
#if defined(TIZEN_MULTIMEDIA)
+#include "third_party/blink/renderer/core/html/media/html_media_element.h"
#include "tizen_src/chromium_impl/content/renderer/media/tizen/media_player_renderer_client_factory.h"
#endif
GetInterfaceBroker().GetInterface(
metrics_provider.InitWithNewPipeAndPassReceiver());
- const bool use_surface_layer = features::UseSurfaceLayerForVideo();
+#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+ const auto is_elementary_media_stream_source =
+ client->GetEmssPipelineMode().has_value();
+#else
+ const auto is_elementary_media_stream_source = false;
+#endif // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+
+ const bool use_surface_layer =
+ features::UseSurfaceLayerForVideo() || is_elementary_media_stream_source;
std::unique_ptr<blink::WebVideoFrameSubmitter> submitter =
use_surface_layer
? CreateSubmitter(main_thread_compositor_task_runner, settings,
#endif
#if defined(TIZEN_MULTIMEDIA) && defined(TIZEN_VIDEO_HOLE)
- if (media::IsUpstreamArchitectureEnabled()&&
+ if ((media::IsUpstreamArchitectureEnabled() ||
+ is_elementary_media_stream_source) &&
is_video_hole) {
LOG(INFO) << "Use upstream architecture, disable video hole";
is_video_hole = false;
}
#if defined(TIZEN_MULTIMEDIA)
- if (!media::IsUpstreamArchitectureEnabled()) {
+ if (!media::IsUpstreamArchitectureEnabled() &&
+ !blink::IsMediaElementNodeWithEmss(element_id)) {
auto media_player_factory =
std::make_unique<MediaPlayerRendererClientFactory>(
render_thread->compositor_task_runner(), CreateMojoRendererFactory());
virtual void OnPrePlayerReload(bool is_reload) = 0;
#endif
#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+ virtual bool IsElementaryMediaStreamSource() const = 0;
virtual void OnSessionIdChange(uint32_t session_id) = 0;
#endif
};
#if defined(TIZEN_MULTIMEDIA)
bool PipelineImpl::RendererWrapper::ShouldUseUpstreamArchitecture() const {
+#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+ if (demuxer_ &&
+ demuxer_->GetDemuxerType() == DemuxerType::kElementaryMediaStreamSource) {
+ return true;
+ }
+#endif // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+
return IsUpstreamArchitectureEnabled();
}
#endif // defined(TIZEN_MULTIMEDIA)
#if defined(TIZEN_MULTIMEDIA)
bool PipelineImpl::ShouldUseUpstreamArchitecture() const {
+#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+ if (client_ && client_->IsElementaryMediaStreamSource()) {
+ return true;
+ }
+#endif // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+
return IsUpstreamArchitectureEnabled();
}
#endif // defined(TIZEN_MULTIMEDIA)
State old_state = state_;
#if BUILDFLAG(IS_TIZEN_TV)
- if (!IsUpstreamArchitectureEnabled() && (old_state == State::RESUMING) &&
+ if (!ShouldUseUpstreamArchitecture() && (old_state == State::RESUMING) &&
(expected_state == State::SUSPENDED))
state_ = State::RESUMING;
else
// error, so here can set suspended directly once suspend called.
#if BUILDFLAG(IS_TIZEN_TV)
state_ =
- IsUpstreamArchitectureEnabled() ? State::SUSPENDING : State::SUSPENDED;
+ ShouldUseUpstreamArchitecture() ? State::SUSPENDING : State::SUSPENDED;
#else
state_ = State::SUSPENDING;
#endif
pipeline_->SetVideoVisibility(visible);
}
}
+
+bool PipelineController::ShouldUseUpstreamArchitecture() const {
+#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+ if (demuxer_ &&
+ demuxer_->GetDemuxerType() == DemuxerType::kElementaryMediaStreamSource) {
+ return true;
+ }
+#endif // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+
+ return IsUpstreamArchitectureEnabled();
+}
#endif
} // namespace media
double GetStartDate() const;
void DestroyPlayerSync(base::OnceClosure cb);
void SetVideoVisibility(bool visible);
+ bool ShouldUseUpstreamArchitecture() const;
#endif
private:
// Attempts to make progress from the current state to the target state.
int32_t HTMLMediaElement::GetVideoId() const {
#if BUILDFLAG(IS_TIZEN_TV)
- if (media::IsUpstreamArchitectureEnabled()) {
+ if (ShouldUseUpstreamArchitecture()) {
if (!web_media_player_) {
return 0;
}
}
#if BUILDFLAG(IS_TIZEN_TV)
- if (media::IsUpstreamArchitectureEnabled()) {
+ if (ShouldUseUpstreamArchitecture()) {
if (track->selected()) {
web_media_player_->SelectedVideoTrackChanged(track->id());
} else {
#endif
}
+#if BUILDFLAG(IS_TIZEN_TV)
+bool HTMLMediaElement::ShouldUseUpstreamArchitecture() const {
+#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+ if (media_source_attachment_ &&
+ media_source_attachment_->IsElementaryMediaStreamSource()) {
+ return true;
+ }
+#endif // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+
+ return media::IsUpstreamArchitectureEnabled();
+}
+#endif // BUILDFLAG(IS_TIZEN_TV)
+
bool HTMLMediaElement::IsInteractiveContent() const {
return FastHasAttribute(html_names::kControlsAttr);
}
}
#endif
+#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+bool IsMediaElementNodeWithEmss(blink::DOMNodeId dom_node_id) {
+ const auto* node = blink::Node::FromDomNodeId(dom_node_id);
+ if (!IsA<HTMLMediaElement>(*node)) {
+ return false;
+ }
+ const auto* media_element = static_cast<const blink::HTMLMediaElement*>(node);
+ return media_element ? media_element->IsElementaryMediaStreamSource() : false;
+}
+#endif // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+
STATIC_ASSERT_ENUM(WebMediaPlayer::kReadyStateHaveNothing,
HTMLMediaElement::kHaveNothing);
STATIC_ASSERT_ENUM(WebMediaPlayer::kReadyStateHaveMetadata,
// in which case default canplay events should not be emitted.
bool IsCanPlayControlledByEmss() const;
+#if BUILDFLAG(IS_TIZEN_TV)
+ bool ShouldUseUpstreamArchitecture() const;
+#endif // BUILDFLAG(IS_TIZEN_TV)
+
void RemotePlaybackCompatibilityChanged(const WebURL&,
bool is_compatible) final;
bool HasSelectedVideoTrack() final;
}
};
+#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+bool IsMediaElementNodeWithEmss(blink::DOMNodeId dom_node_id);
+#else
+inline bool IsMediaElementNodeWithEmss(blink::DOMNodeId) {
+ return false;
+}
+#endif // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_HTML_MEDIA_ELEMENT_H_
#endif
#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+bool WebMediaPlayerImpl::IsElementaryMediaStreamSource() const {
+ return client_ && client_->IsElementaryMediaStreamSource();
+}
+
void WebMediaPlayerImpl::OnSessionIdChange(uint32_t session_id) {
session_id_ = session_id;
}
if (media::IsUpstreamArchitectureEnabled())
return false;
+#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+ if (client_ && client_->IsElementaryMediaStreamSource())
+ return false;
+#endif // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+
bool single_process_mode = base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kSingleProcess);
bool isMSE = load_type_ == kLoadTypeMediaSource;
void OnAudioPipelineInfoChange(const media::AudioPipelineInfo& info) override;
void OnVideoPipelineInfoChange(const media::VideoPipelineInfo& info) override;
#if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+ bool IsElementaryMediaStreamSource() const override;
void OnSessionIdChange(uint32_t session_id) override;
#endif
#if defined(TIZEN_MULTIMEDIA)
base::RepeatingCallback<media::GpuVideoAcceleratorFactories*()>
get_gpu_factories_cb,
int element_id) {
- if (media::IsUpstreamArchitectureEnabled()) {
+ if (media::IsUpstreamArchitectureEnabled() ||
+ blink::IsMediaElementNodeWithEmss(element_id)) {
mojo::SharedRemote<media::mojom::TTvdVideoRendererManager>
ttvd_video_renderer_manager;
render_frame->GetBrowserInterfaceBroker().GetInterface(
base::RepeatingCallback<media::GpuVideoAcceleratorFactories*()>
get_gpu_factories_cb,
int element_id) {
- if (media::IsUpstreamArchitectureEnabled()) {
+ if (media::IsUpstreamArchitectureEnabled() ||
+ blink::IsMediaElementNodeWithEmss(element_id)) {
mojo::SharedRemote<media::mojom::TTvdVideoRendererManager>
ttvd_video_renderer_manager;
render_frame->GetBrowserInterfaceBroker().GetInterface(