collectpads2: add convenience clipping function
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Fri, 16 Dec 2011 16:59:22 +0000 (17:59 +0100)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Mon, 19 Dec 2011 16:45:25 +0000 (17:45 +0100)
... which also converts to running time; useful for typical muxer.

libs/gst/base/gstcollectpads2.c
libs/gst/base/gstcollectpads2.h

index 932e3c9..3e51a0c 100644 (file)
@@ -401,6 +401,48 @@ gst_collect_pads2_set_event_function (GstCollectPads2 * pads,
   GST_OBJECT_UNLOCK (pads);
 }
 
+/**
+* gst_collect_pads2_clip_running:
+* @pads: the collectspads to use
+* @cdata: collect data of corrsponding pad
+* @buf: buffer being clipped
+* @outbuf: output buffer with running time, or NULL if clipped
+* @user_data: user data (unused)
+*
+* Convenience clipping function that converts incoming buffer's timestamp
+* to running time, or clips the buffer if outside configured segment.
+*
+* Since: 0.10.37
+*/
+GstFlowReturn
+gst_collect_pads2_clip_running_time (GstCollectPads2 * pads,
+    GstCollectData2 * cdata, GstBuffer * buf, GstBuffer ** outbuf,
+    gpointer user_data)
+{
+  GstClockTime time;
+
+  *outbuf = buf;
+  time = GST_BUFFER_TIMESTAMP (buf);
+
+  /* invalid left alone and passed */
+  if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (time))) {
+    time = gst_segment_to_running_time (&cdata->segment, GST_FORMAT_TIME, time);
+    if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (time))) {
+      GST_DEBUG_OBJECT (cdata->pad, "clipping buffer on pad outside segment");
+      gst_buffer_unref (buf);
+      *outbuf = NULL;
+    } else {
+      GST_LOG_OBJECT (cdata->pad, "buffer ts %" GST_TIME_FORMAT " -> %"
+          GST_TIME_FORMAT " running time",
+          GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_TIME_ARGS (time));
+      *outbuf = gst_buffer_make_metadata_writable (buf);
+      GST_BUFFER_TIMESTAMP (*outbuf) = time;
+    }
+  }
+
+  return GST_FLOW_OK;
+}
+
  /**
  * gst_collect_pads2_set_clip_function:
  * @pads: the collectspads to use
index 208b547..7890e7a 100644 (file)
@@ -380,6 +380,11 @@ GstBuffer* gst_collect_pads2_take_buffer   (GstCollectPads2 * pads, GstCollectData
 void           gst_collect_pads2_set_waiting   (GstCollectPads2 *pads, GstCollectData2 *data,
                                                 gboolean waiting);
 
+/* convenience helper */
+GstFlowReturn  gst_collect_pads2_clip_running_time (GstCollectPads2 * pads,
+                                               GstCollectData2 * cdata, GstBuffer * buf, GstBuffer ** outbuf,
+                                                gpointer user_data);
+
 
 G_END_DECLS