dvbsubenc: Forward GAP events as-is if we wouldn't produce an end packet and are...
authorSebastian Dröge <sebastian@centricular.com>
Wed, 7 Dec 2022 08:21:52 +0000 (10:21 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 7 Dec 2022 08:21:52 +0000 (10:21 +0200)
An end packet is only produced once for the last subtitle, so multiple
GAP events between subtitles would result only in a single end packet
and nothing else otherwise. This would potentially starve downstream
then, so instead forward the GAP events in that case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3534>

subprojects/gst-plugins-bad/gst/dvbsubenc/gstdvbsubenc.c

index ad316f7..5a7ea4c 100644 (file)
@@ -560,24 +560,29 @@ gst_dvb_sub_enc_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
     }
     case GST_EVENT_GAP:
     {
-      GstClockTime start, duration;
-
-      gst_event_parse_gap (event, &start, &duration);
-      if (GST_CLOCK_TIME_IS_VALID (start)) {
-        if (GST_CLOCK_TIME_IS_VALID (duration))
-          start += duration;
-        /* we do not expect another buffer until after gap,
-         * so that is our position now */
-        GST_DEBUG_OBJECT (enc,
-            "Got GAP event, advancing time to %" GST_TIME_FORMAT,
-            GST_TIME_ARGS (start));
-        gst_dvb_sub_enc_generate_end_packet (enc, start);
+      if (!GST_CLOCK_TIME_IS_VALID (enc->current_end_time)) {
+        ret = gst_pad_event_default (pad, parent, event);
       } else {
-        GST_WARNING_OBJECT (enc, "Got GAP event with invalid position");
+        GstClockTime start, duration;
+
+        gst_event_parse_gap (event, &start, &duration);
+
+        if (GST_CLOCK_TIME_IS_VALID (start)) {
+          if (GST_CLOCK_TIME_IS_VALID (duration))
+            start += duration;
+          /* we do not expect another buffer until after gap,
+           * so that is our position now */
+          GST_DEBUG_OBJECT (enc,
+              "Got GAP event, advancing time to %" GST_TIME_FORMAT,
+              GST_TIME_ARGS (start));
+          gst_dvb_sub_enc_generate_end_packet (enc, start);
+        } else {
+          GST_WARNING_OBJECT (enc, "Got GAP event with invalid position");
+        }
+
+        gst_event_unref (event);
+        ret = TRUE;
       }
-
-      gst_event_unref (event);
-      ret = TRUE;
       break;
     }
     case GST_EVENT_SEGMENT: