[EMSS] Fix autoplay when playing with TTvd 38/314338/1
authorPiotr Bałut <p.balut@samsung.com>
Tue, 4 Jun 2024 11:28:19 +0000 (13:28 +0200)
committerj.gajownik2 <j.gajownik2@samsung.com>
Wed, 10 Jul 2024 08:35:51 +0000 (10:35 +0200)
This patch introduces changes required to make autoplay work when using
EMSS with TTvd:

* In normal latency EMSS will be now correctly identified by
  web_media_player_impl regardless of Demuxer implementation working in
  either EMSS renderer or default Chromium renderer (TTvd).

* In low latency EMSS will open before play is issued on HTML Media
  Element when autoplay policy is set to true. This will allow media
  element to play when the first packet is appended, when
  webmediaplayer_ms will up the ready state.

Bug: https://jira-eu.sec.samsung.net/browse/VDWASM-1501
Signed-off-by: Piotr Bałut <p.balut@samsung.com>
Change-Id: Ia32ecee5916d4bfec67e66ed66d11d3ec104caaf

third_party/blink/renderer/core/html/media/html_media_element.cc
third_party/blink/renderer/platform/media/web_media_player_impl.cc
third_party/blink/renderer/platform/media/web_media_player_impl.h

index 28122437c3007f2146b7edceec2de53274485a41..61f4393fb4d75169530d477edb9b886d8d583457 100644 (file)
@@ -5468,6 +5468,14 @@ void HTMLMediaElement::FireDeferredLoadAfterSourceOpen() {
 
   // See comment in `IsCanPlayControlledByEmss()`
   ScheduleEvent(event_type_names::kCanplay);
+
+  if (autoplay_policy_->RequestAutoplayByAttribute()) {
+    // Open EMSS without an actual play being fired. Once EMSS appends the first
+    // packet, webmediaplayer_ms will up it's ready state and html_media_element
+    // will autoplay.
+    if (media_source_attachment_)
+      media_source_attachment_->OnPlay(media_source_tracer_);
+  }
 }
 #endif
 
index 9baaebceacbe533ed65779ed2fbf8cea145e1e91..fd3c23ebb5bf2ef59f25cce2950a8ad837c3dd17 100644 (file)
@@ -2122,6 +2122,10 @@ void WebMediaPlayerImpl::OnDemuxerOpened() {
 }
 
 #if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+bool WebMediaPlayerImpl::IsElementaryMediaStreamSource() const {
+  return load_type_ == kLoadTypeSamsungElementaryMediaStreamSource;
+}
+
 void WebMediaPlayerImpl::OnElementaryMediaStreamDemuxerOpened(
     std::shared_ptr<blink::WebElementaryMediaStreamSourceDispatcher>
         web_elementary_media_stream_source_dispatcher) {
@@ -2570,7 +2574,6 @@ bool WebMediaPlayerImpl::CanPlayThrough() {
     return true;
   if (chunk_demuxer_)
     return true;
-  // FIXME(p.balut): todo EMSS
 #if defined(TIZEN_MULTIMEDIA)
   if (demuxer_->GetType() == media::MediaResource::Type::URL) {
     // TODO : Need to check buffered status
@@ -2578,7 +2581,7 @@ bool WebMediaPlayerImpl::CanPlayThrough() {
   }
 #endif
 #if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
-  if (demuxer_->GetType() == media::MediaResource::Type::ELEMENTARY_STREAM) {
+  if (IsElementaryMediaStreamSource()) {
     return true;
   }
 #endif
index 7667fa4afbb92b678834778f289d3709b52c062a..33459cd01f54907b7cc47470ef3ecd19443e0750 100644 (file)
@@ -404,6 +404,7 @@ class PLATFORM_EXPORT WebMediaPlayerImpl
   void OnPipelineSeeked(bool time_updated);
   void OnDemuxerOpened();
 #if defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)
+  bool IsElementaryMediaStreamSource() const;
   void OnElementaryMediaStreamDemuxerOpened(
       std::shared_ptr<blink::WebElementaryMediaStreamSourceDispatcher>);
 #endif  // defined(SAMSUNG_ELEMENTARY_MEDIA_STREAM_SOURCE)