qtdemux: Don't push GAP event if first buffer is within 1s 51/248651/1 tizen_5.5
authorEdward Hervey <edward@centricular.com>
Wed, 13 Dec 2017 10:35:37 +0000 (11:35 +0100)
committerGilbok Lee <gilbok.lee@samsung.com>
Tue, 1 Dec 2020 07:11:27 +0000 (16:11 +0900)
If we saw empty segments, we previously unconditionally pushed a
GAP event downstream regardless of the duration of that empty
segment.

In order to avoid issues with initial negotiation of downstream elements
(which would negotiate to something before receiving any data due to
that initial GAP event), check if there's at least a second of difference
(like we do for other GAP-related checks in qtdemux) before
deciding to push a GAP event downstream.

Change-Id: I30318848c6f16cd04cf5bc776b77acd8ec0f3d0e

gst/isomp4/qtdemux.c

index b43cfc9..b5c5796 100644 (file)
@@ -6357,8 +6357,10 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux)
       GST_TIME_ARGS (dts), GST_TIME_ARGS (pts), GST_TIME_ARGS (duration));
 
   if (G_UNLIKELY (empty)) {
-    /* empty segment, push a gap and move to the next one */
-    gst_pad_push_event (stream->pad, gst_event_new_gap (pts, duration));
+    /* empty segment, push a gap if there's more than a second
+     * difference and move to the next one */
+    if ((pts + duration - stream->segment.position) > GST_SECOND)
+      gst_pad_push_event (stream->pad, gst_event_new_gap (pts, duration));
     stream->segment.position = pts + duration;
     goto next;
   }