collectpads2: add convenience clipping function

... which also converts to running time; useful for typical muxer.
This commit is contained in:
Mark Nauwelaerts 2011-12-16 17:59:22 +01:00
parent 78565da18b
commit 28e9d735bb
2 changed files with 47 additions and 0 deletions

View 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

View 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