gstreamer: collectpads2: assume 0 based segment if no time segment was provided

Mark Nauwelaerts mnauw at kemper.freedesktop.org
Mon Apr 16 08:01:08 PDT 2012


Module: gstreamer
Branch: master
Commit: b642b875798e93f302b4b452b89f7ddb0e02db6b
URL:    http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=b642b875798e93f302b4b452b89f7ddb0e02db6b

Author: Vincent Penquerc'h <vincent.penquerch at collabora.co.uk>
Date:   Fri Feb  3 17:08:35 2012 +0000

collectpads2: assume 0 based segment if no time segment was provided

https://bugzilla.gnome.org/show_bug.cgi?id=669305

---

 libs/gst/base/gstcollectpads2.c |   24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/libs/gst/base/gstcollectpads2.c b/libs/gst/base/gstcollectpads2.c
index 466e47d..9368e38 100644
--- a/libs/gst/base/gstcollectpads2.c
+++ b/libs/gst/base/gstcollectpads2.c
@@ -1493,8 +1493,14 @@ gst_collect_pads2_recalculate_waiting (GstCollectPads2 * pads)
     int cmp_res;
 
     /* check if pad has a segment */
-    if (data->segment.format == GST_FORMAT_UNDEFINED)
-      continue;
+    if (data->segment.format == GST_FORMAT_UNDEFINED) {
+      GST_WARNING_OBJECT (pads,
+          "GstCollectPads2 has no time segment, assuming 0 based.");
+      gst_segment_init (&data->segment, GST_FORMAT_TIME);
+      gst_segment_set_newsegment (&data->segment, FALSE, 1.0f,
+          GST_FORMAT_TIME, 0, -1, 0);
+      GST_COLLECT_PADS2_STATE_SET (data, GST_COLLECT_PADS2_STATE_NEW_SEGMENT);
+    }
 
     /* check segment format */
     if (data->segment.format != GST_FORMAT_TIME) {
@@ -1808,22 +1814,22 @@ gst_collect_pads2_event (GstPad * pad, GstEvent * event)
           ", stop %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
           GST_TIME_ARGS (stop));
 
-      gst_segment_set_newsegment_full (&data->segment, update, rate, arate,
-          format, start, stop, time);
-
-      GST_COLLECT_PADS2_STATE_SET (data, GST_COLLECT_PADS2_STATE_NEW_SEGMENT);
-
       /* default muxing functionality */
       if (!buffer_func)
         goto newsegment_done;
 
       /* default collection can not handle other segment formats than time */
       if (format != GST_FORMAT_TIME) {
-        GST_ERROR_OBJECT (pads, "GstCollectPads2 default collecting "
-            "can only handle time segments.");
+        GST_WARNING_OBJECT (pads, "GstCollectPads2 default collecting "
+            "can only handle time segments. Non time segment ignored.");
         goto newsegment_done;
       }
 
+      gst_segment_set_newsegment_full (&data->segment, update, rate, arate,
+          format, start, stop, time);
+
+      GST_COLLECT_PADS2_STATE_SET (data, GST_COLLECT_PADS2_STATE_NEW_SEGMENT);
+
       /* If oldest time is not known, or current pad got newsegment;
        * recalculate the state */
       if (!pads->priv->earliest_data || pads->priv->earliest_data == data) {



More information about the gstreamer-commits mailing list