collectpads2: Merge the clip and prepare_buffer function into one

This commit is contained in:
Sebastian Dröge 2011-10-28 10:37:21 +02:00
parent 415f3dd808
commit 2f100e86f6
4 changed files with 24 additions and 71 deletions

View file

@ -754,11 +754,10 @@ GstCollectData2DestroyNotify
GstCollectPads2BufferFunction GstCollectPads2BufferFunction
GstCollectPads2CompareFunction GstCollectPads2CompareFunction
GstCollectPads2EventFunction GstCollectPads2EventFunction
GstCollectPads2ClipFunction
GstCollectPads2Function GstCollectPads2Function
GstCollectPads2StateFlags GstCollectPads2StateFlags
GST_COLLECT_PADS2_FLOW_DROP
GST_COLLECT_PADS2_STATE GST_COLLECT_PADS2_STATE
GST_COLLECT_PADS2_STATE_IS_SET GST_COLLECT_PADS2_STATE_IS_SET
GST_COLLECT_PADS2_STATE_SET GST_COLLECT_PADS2_STATE_SET
@ -794,9 +793,9 @@ gst_collect_pads2_take_buffer
gst_collect_pads2_set_buffer_function gst_collect_pads2_set_buffer_function
gst_collect_pads2_set_compare_function gst_collect_pads2_set_compare_function
gst_collect_pads2_set_event_function gst_collect_pads2_set_event_function
gst_collect_pads2_set_clip_function
gst_collect_pads2_set_flushing gst_collect_pads2_set_flushing
gst_collect_pads2_set_function gst_collect_pads2_set_function
gst_collect_pads2_set_prepare_buffer_function
gst_collect_pads2_set_waiting gst_collect_pads2_set_waiting
<SUBSECTION Standard> <SUBSECTION Standard>
GstCollectPads2Class GstCollectPads2Class

View file

@ -176,9 +176,6 @@ gst_collect_pads2_init (GstCollectPads2 * pads)
pads->event_func = NULL; pads->event_func = NULL;
pads->event_user_data = NULL; pads->event_user_data = NULL;
pads->prepare_buffer_func = NULL;
pads->prepare_buffer_user_data = NULL;
/* members for default muxing */ /* members for default muxing */
pads->buffer_func = NULL; pads->buffer_func = NULL;
pads->buffer_user_data = NULL; pads->buffer_user_data = NULL;
@ -239,32 +236,6 @@ gst_collect_pads2_new (void)
return newcoll; return newcoll;
} }
/**
* gst_collect_pads2_set_prepare_buffer_function:
* @pads: the collectpads to use
* @func: the function to set
* @user_data: user data passed to the function
*
* Set the callback function and user data that will be called
* for every buffer that arrives.
*
* MT safe.
*
* Since: 0.10.36
*/
void
gst_collect_pads2_set_prepare_buffer_function (GstCollectPads2 * pads,
GstCollectPads2BufferFunction func, gpointer user_data)
{
g_return_if_fail (pads != NULL);
g_return_if_fail (GST_IS_COLLECT_PADS2 (pads));
GST_OBJECT_LOCK (pads);
pads->prepare_buffer_func = func;
pads->prepare_buffer_user_data = user_data;
GST_OBJECT_UNLOCK (pads);
}
/* Must be called with GstObject lock! */ /* Must be called with GstObject lock! */
static void static void
gst_collect_pads2_set_buffer_function_locked (GstCollectPads2 * pads, gst_collect_pads2_set_buffer_function_locked (GstCollectPads2 * pads,
@ -1826,8 +1797,6 @@ gst_collect_pads2_chain (GstPad * pad, GstBuffer * buffer)
GstFlowReturn ret; GstFlowReturn ret;
GstBuffer **buffer_p; GstBuffer **buffer_p;
guint32 cookie; guint32 cookie;
GstCollectPads2BufferFunction prepare_buffer_func;
gpointer prepare_buffer_user_data;
GST_DEBUG ("Got buffer for pad %s:%s", GST_DEBUG_PAD_NAME (pad)); GST_DEBUG ("Got buffer for pad %s:%s", GST_DEBUG_PAD_NAME (pad));
@ -1840,10 +1809,6 @@ gst_collect_pads2_chain (GstPad * pad, GstBuffer * buffer)
GST_OBJECT_UNLOCK (pad); GST_OBJECT_UNLOCK (pad);
pads = data->collect; pads = data->collect;
GST_OBJECT_LOCK (pads);
prepare_buffer_func = pads->prepare_buffer_func;
prepare_buffer_user_data = pads->prepare_buffer_user_data;
GST_OBJECT_UNLOCK (pads);
GST_COLLECT_PADS2_STREAM_LOCK (pads); GST_COLLECT_PADS2_STREAM_LOCK (pads);
/* if not started, bail out */ /* if not started, bail out */
@ -1860,28 +1825,22 @@ gst_collect_pads2_chain (GstPad * pad, GstBuffer * buffer)
/* see if we need to clip */ /* see if we need to clip */
if (pads->clip_func) { if (pads->clip_func) {
buffer = pads->clip_func (pads, data, buffer, pads->clip_user_data); GstBuffer *outbuf = NULL;
ret = pads->clip_func (pads, data, buffer, &outbuf, pads->clip_user_data);
if (G_UNLIKELY (buffer == NULL)) if (G_UNLIKELY (outbuf == NULL))
goto clipped; goto clipped;
buffer = outbuf;
if (G_UNLIKELY (ret == GST_FLOW_UNEXPECTED))
goto unexpected;
else if (G_UNLIKELY (ret != GST_FLOW_OK))
goto error;
} }
GST_DEBUG_OBJECT (pads, "Queuing buffer %p for pad %s:%s", buffer, GST_DEBUG_OBJECT (pads, "Queuing buffer %p for pad %s:%s", buffer,
GST_DEBUG_PAD_NAME (pad)); GST_DEBUG_PAD_NAME (pad));
if (prepare_buffer_func) {
ret = prepare_buffer_func (pads, data, buffer, prepare_buffer_user_data);
if (ret == GST_COLLECT_PADS2_FLOW_DROP) {
GST_DEBUG_OBJECT (pads, "Dropping buffer as requested");
ret = GST_FLOW_OK;
goto unlock_done;
} else if (ret == GST_FLOW_UNEXPECTED) {
goto unexpected;
} else if (ret != GST_FLOW_OK) {
goto error;
}
}
/* One more pad has data queued */ /* One more pad has data queued */
if (GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_WAITING)) if (GST_COLLECT_PADS2_STATE_IS_SET (data, GST_COLLECT_PADS2_STATE_WAITING))
pads->queuedpads++; pads->queuedpads++;
@ -1996,9 +1955,8 @@ unexpected:
clipped: clipped:
{ {
GST_DEBUG ("clipped buffer on pad %s:%s", GST_DEBUG_PAD_NAME (pad)); GST_DEBUG ("clipped buffer on pad %s:%s", GST_DEBUG_PAD_NAME (pad));
GST_OBJECT_UNLOCK (pads); ret = GST_FLOW_OK;
unref_data (data); goto unlock_done;
return GST_FLOW_OK;
} }
error: error:
{ {

View file

@ -113,8 +113,6 @@ typedef enum {
*/ */
#define GST_COLLECT_PADS2_STATE_UNSET(data,flag) (GST_COLLECT_PADS2_STATE (data) &= ~(flag)) #define GST_COLLECT_PADS2_STATE_UNSET(data,flag) (GST_COLLECT_PADS2_STATE (data) &= ~(flag))
#define GST_COLLECT_PADS2_FLOW_DROP GST_FLOW_CUSTOM_SUCCESS
/** /**
* GstCollectData2: * GstCollectData2:
* @collect: owner #GstCollectPads2 * @collect: owner #GstCollectPads2
@ -222,24 +220,26 @@ typedef gboolean (*GstCollectPads2EventFunction) (GstCollectPads2 *pads, GstColl
* GstCollectPads2ClipFunction: * GstCollectPads2ClipFunction:
* @pads: a #GstCollectPads2 * @pads: a #GstCollectPads2
* @data: a #GstCollectData2 * @data: a #GstCollectData2
* @buffer: a #GstBuffer * @inbuffer: the input #GstBuffer
* @outbuffer: the output #GstBuffer
* @user_data: user data * @user_data: user data
* *
* A function that will be called when @buffer is received on the pad managed * A function that will be called when @inbuffer is received on the pad managed
* by @data in the collecpad object @pads. * by @data in the collecpad object @pads.
* *
* The function should use the segment of @data and the negotiated media type on * The function should use the segment of @data and the negotiated media type on
* the pad to perform clipping of @buffer. * the pad to perform clipping of @inbuffer.
* *
* This function takes ownership of @buffer. * This function takes ownership of @inbuffer and should output a buffer in
* @outbuffer or return %NULL in @outbuffer if the buffer should be dropped.
* *
* Returns: a #GstBuffer that contains the clipped data of @buffer or NULL when * Returns: a #GstFlowReturn that corresponds to the result of clipping.
* the buffer has been clipped completely.
* *
* Since: 0.10.36 * Since: 0.10.36
*/ */
typedef GstBuffer * (*GstCollectPads2ClipFunction) (GstCollectPads2 *pads, GstCollectData2 *data, typedef GstFlowReturn (*GstCollectPads2ClipFunction) (GstCollectPads2 *pads, GstCollectData2 *data,
GstBuffer *buffer, gpointer user_data); GstBuffer *inbuffer, GstBuffer **outbuffer,
gpointer user_data);
/** /**
* GST_COLLECT_PADS2_GET_STREAM_LOCK: * GST_COLLECT_PADS2_GET_STREAM_LOCK:
@ -304,8 +304,6 @@ struct _GstCollectPads2 {
GstCollectPads2Function func; /* function and user_data for callback */ GstCollectPads2Function func; /* function and user_data for callback */
gpointer user_data; gpointer user_data;
GstCollectPads2BufferFunction prepare_buffer_func; /* function and user_data for prepare buffer callback */
gpointer prepare_buffer_user_data;
GstCollectPads2BufferFunction buffer_func; /* function and user_data for buffer callback */ GstCollectPads2BufferFunction buffer_func; /* function and user_data for buffer callback */
gpointer buffer_user_data; gpointer buffer_user_data;
GstCollectPads2CompareFunction compare_func; GstCollectPads2CompareFunction compare_func;
@ -339,8 +337,6 @@ GstCollectPads2* gst_collect_pads2_new (void);
/* set the callbacks */ /* set the callbacks */
void gst_collect_pads2_set_function (GstCollectPads2 *pads, GstCollectPads2Function func, void gst_collect_pads2_set_function (GstCollectPads2 *pads, GstCollectPads2Function func,
gpointer user_data); gpointer user_data);
void gst_collect_pads2_set_prepare_buffer_function (GstCollectPads2 *pads,
GstCollectPads2BufferFunction func, gpointer user_data);
void gst_collect_pads2_set_buffer_function (GstCollectPads2 *pads, void gst_collect_pads2_set_buffer_function (GstCollectPads2 *pads,
GstCollectPads2BufferFunction func, gpointer user_data); GstCollectPads2BufferFunction func, gpointer user_data);
void gst_collect_pads2_set_event_function (GstCollectPads2 *pads, void gst_collect_pads2_set_event_function (GstCollectPads2 *pads,

View file

@ -222,11 +222,11 @@ EXPORTS
gst_collect_pads2_read_buffer gst_collect_pads2_read_buffer
gst_collect_pads2_remove_pad gst_collect_pads2_remove_pad
gst_collect_pads2_set_buffer_function gst_collect_pads2_set_buffer_function
gst_collect_pads2_set_clip_function
gst_collect_pads2_set_compare_function gst_collect_pads2_set_compare_function
gst_collect_pads2_set_event_function gst_collect_pads2_set_event_function
gst_collect_pads2_set_flushing gst_collect_pads2_set_flushing
gst_collect_pads2_set_function gst_collect_pads2_set_function
gst_collect_pads2_set_prepare_buffer_function
gst_collect_pads2_set_waiting gst_collect_pads2_set_waiting
gst_collect_pads2_start gst_collect_pads2_start
gst_collect_pads2_stop gst_collect_pads2_stop