For HbbTV, only send the playing event when the video actually starts to 44/316944/2
authorMark Toller <mark.toller@samsung.com>
Fri, 30 Aug 2024 12:51:47 +0000 (13:51 +0100)
committerMark Toller <mark.toller@samsung.com>
Tue, 17 Sep 2024 15:06:47 +0000 (16:06 +0100)
play.

Change-Id: Ie29cd19218fe338e554fe482f8a19e310af66ad1

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

index f64396673925cabe4042065633729175c57c37e0..24cba535805c5adee016f49d2046331725d3342b 100644 (file)
@@ -494,6 +494,7 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tag_name,
       pending_action_flags_(0),
       playing_(false),
       should_delay_load_event_(false),
+      playing_event_pending_(false),
       have_fired_loaded_data_(false),
       can_autoplay_(true),
       muted_(false),
@@ -3059,8 +3060,14 @@ void HTMLMediaElement::PlayInternal() {
 
     if (ready_state_ <= kHaveCurrentData)
       ScheduleEvent(event_type_names::kWaiting);
-    else if (ready_state_ >= kHaveFutureData)
+    else if (ready_state_ >= kHaveFutureData) {
+      if (IsHbbTV()) {
+        LOG(INFO) << "HbbTV: Send playing event on first timeupdate";
+        playing_event_pending_ = true;
+      }
+
       ScheduleNotifyPlaying();
+    }
   } else if (ready_state_ >= kHaveFutureData) {
     ScheduleResolvePlayPromises();
   }
@@ -3524,6 +3531,11 @@ void HTMLMediaElement::ScheduleTimeupdateEvent(bool periodic_event) {
   if (periodic_event && !media_time_has_progressed)
     return;
 
+  if (IsHbbTV() && playing_event_pending_) {
+    playing_event_pending_ = false;
+    ScheduleNotifyPlaying();
+  }
+
   ScheduleEvent(event_type_names::kTimeupdate);
 
   last_time_update_event_media_time_ = media_time;
@@ -5636,6 +5648,12 @@ void HTMLMediaElement::ScheduleRejectPlayPromises(PlayPromiseError code) {
 }
 
 void HTMLMediaElement::ScheduleNotifyPlaying() {
+  if (playing_event_pending_) {
+    LOG(INFO) << "Playing event is pending in timeupdate";
+    return;
+  }
+  LOG(INFO) << "Playing event is NOT pending";
+
   ScheduleEvent(event_type_names::kPlaying);
   ScheduleResolvePlayPromises();
 }
index 1d930a562ac2054ed0af88ae408d47f6b5a05543..a698becd5823c42980b48980da9bd22f46999513 100644 (file)
@@ -956,6 +956,7 @@ class CORE_EXPORT HTMLMediaElement
   // FIXME: HTMLMediaElement has way too many state bits.
   bool playing_ : 1;
   bool should_delay_load_event_ : 1;
+  bool playing_event_pending_ : 1;
   bool have_fired_loaded_data_ : 1;
   bool can_autoplay_ : 1;
   bool muted_ : 1;