mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 09:10:36 +00:00
tests: Fix rtprtx test by handling buffer lists
Commit #1018aa made rtprtxsend handle buffer lists, breaking the test which probes for buffers, but not buffer lists. Use a utility function to run the probe callback on each buffer in the list in turn and remove any buffers that are dropped.
This commit is contained in:
parent
fe739b7f88
commit
a51073c7de
1 changed files with 53 additions and 1 deletions
|
@ -303,12 +303,63 @@ typedef struct
|
||||||
guint seqnum_prev;
|
guint seqnum_prev;
|
||||||
} RTXReceiveData;
|
} RTXReceiveData;
|
||||||
|
|
||||||
|
static GstPadProbeReturn
|
||||||
|
do_buffer_list_as_buffers_probe (GstPad * pad, GstPadProbeInfo * info,
|
||||||
|
gpointer user_data, GstPadProbeCallback callback)
|
||||||
|
{
|
||||||
|
/* Iterate the buffer list, removing any items that we're
|
||||||
|
* told to drop and creating a new bufferlist. If all buffers
|
||||||
|
* are dropped, return DROP.
|
||||||
|
*/
|
||||||
|
guint i, len;
|
||||||
|
GstBufferList *list;
|
||||||
|
GstBufferList *outlist;
|
||||||
|
GstPadProbeInfo buf_info = *info;
|
||||||
|
|
||||||
|
GST_INFO_OBJECT (pad, "probing each buffer in list individually");
|
||||||
|
|
||||||
|
list = gst_pad_probe_info_get_buffer_list (info);
|
||||||
|
|
||||||
|
g_return_val_if_fail (list != NULL, GST_PAD_PROBE_REMOVE);
|
||||||
|
|
||||||
|
len = gst_buffer_list_length (list);
|
||||||
|
outlist = gst_buffer_list_new_sized (len);
|
||||||
|
|
||||||
|
buf_info.type = GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH;
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
GstBuffer *buffer = gst_buffer_list_get (list, i);
|
||||||
|
GstPadProbeReturn ret;
|
||||||
|
buf_info.data = buffer;
|
||||||
|
ret = callback (pad, &buf_info, user_data);
|
||||||
|
/* If the buffer wasn't dropped, add it to the output list */
|
||||||
|
if (ret != GST_PAD_PROBE_DROP)
|
||||||
|
gst_buffer_list_insert (outlist, -1, gst_buffer_ref (buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
len = gst_buffer_list_length (outlist);
|
||||||
|
if (len == 0) {
|
||||||
|
/* Everything was discarded, drop our outlist */
|
||||||
|
gst_buffer_list_unref (outlist);
|
||||||
|
return GST_PAD_PROBE_DROP;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Replace the original buffer list with the modified one */
|
||||||
|
gst_buffer_list_unref (list);
|
||||||
|
info->data = outlist;
|
||||||
|
return GST_PAD_PROBE_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static GstPadProbeReturn
|
static GstPadProbeReturn
|
||||||
rtprtxsend_srcpad_probe (GstPad * pad, GstPadProbeInfo * info,
|
rtprtxsend_srcpad_probe (GstPad * pad, GstPadProbeInfo * info,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GstPadProbeReturn ret = GST_PAD_PROBE_OK;
|
GstPadProbeReturn ret = GST_PAD_PROBE_OK;
|
||||||
|
|
||||||
|
GST_LOG_OBJECT (pad, "here");
|
||||||
|
if (info->type == (GST_PAD_PROBE_TYPE_BUFFER_LIST | GST_PAD_PROBE_TYPE_PUSH))
|
||||||
|
return do_buffer_list_as_buffers_probe (pad, info, user_data,
|
||||||
|
rtprtxsend_srcpad_probe);
|
||||||
|
|
||||||
if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
|
if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
|
||||||
GstBuffer *buffer = GST_BUFFER (info->data);
|
GstBuffer *buffer = GST_BUFFER (info->data);
|
||||||
RTXSendData *rtxdata = (RTXSendData *) user_data;
|
RTXSendData *rtxdata = (RTXSendData *) user_data;
|
||||||
|
@ -531,7 +582,8 @@ GST_START_TEST (test_drop_one_sender)
|
||||||
|
|
||||||
srcpad = gst_element_get_static_pad (rtprtxsend, "src");
|
srcpad = gst_element_get_static_pad (rtprtxsend, "src");
|
||||||
gst_pad_add_probe (srcpad,
|
gst_pad_add_probe (srcpad,
|
||||||
(GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH),
|
(GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST |
|
||||||
|
GST_PAD_PROBE_TYPE_PUSH),
|
||||||
(GstPadProbeCallback) rtprtxsend_srcpad_probe, &send_rtxdata, NULL);
|
(GstPadProbeCallback) rtprtxsend_srcpad_probe, &send_rtxdata, NULL);
|
||||||
sinkpad = gst_pad_get_peer (srcpad);
|
sinkpad = gst_pad_get_peer (srcpad);
|
||||||
fail_if (sinkpad == NULL);
|
fail_if (sinkpad == NULL);
|
||||||
|
|
Loading…
Reference in a new issue