mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-18 05:16:05 +00:00
Added unit tests for buffer list support in appsink.
This commit is contained in:
parent
6518d283d5
commit
55a5679d89
1 changed files with 123 additions and 0 deletions
|
@ -201,6 +201,128 @@ GST_START_TEST (test_notify1)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
static GstBufferList *mylist;
|
||||
static GstCaps *mycaps;
|
||||
|
||||
static GstBufferList *
|
||||
create_buffer_list (void)
|
||||
{
|
||||
GstBufferListIterator *it;
|
||||
GstBuffer *buffer;
|
||||
|
||||
mylist = gst_buffer_list_new ();
|
||||
fail_if (mylist == NULL);
|
||||
|
||||
mycaps = gst_caps_from_string ("application/x-gst-check");
|
||||
fail_if (mycaps == NULL);
|
||||
|
||||
it = gst_buffer_list_iterate (mylist);
|
||||
fail_if (it == NULL);
|
||||
|
||||
gst_buffer_list_iterator_add_group (it);
|
||||
|
||||
buffer = gst_buffer_new_and_alloc (sizeof (gint));
|
||||
*(gint *) GST_BUFFER_DATA (buffer) = 1;
|
||||
gst_buffer_set_caps (buffer, mycaps);
|
||||
gst_buffer_list_iterator_add (it, buffer);
|
||||
|
||||
gst_buffer_list_iterator_add_group (it);
|
||||
|
||||
buffer = gst_buffer_new_and_alloc (sizeof (gint));
|
||||
*(gint *) GST_BUFFER_DATA (buffer) = 2;
|
||||
gst_buffer_set_caps (buffer, mycaps);
|
||||
gst_buffer_list_iterator_add (it, buffer);
|
||||
|
||||
buffer = gst_buffer_new_and_alloc (sizeof (gint));
|
||||
*(gint *) GST_BUFFER_DATA (buffer) = 4;
|
||||
gst_buffer_set_caps (buffer, mycaps);
|
||||
gst_buffer_list_iterator_add (it, buffer);
|
||||
|
||||
gst_buffer_list_iterator_free (it);
|
||||
|
||||
return mylist;
|
||||
}
|
||||
|
||||
static void
|
||||
check_buffer_list (GstBufferList * list)
|
||||
{
|
||||
GstBufferListIterator *it;
|
||||
GstBuffer *buf;
|
||||
GstCaps *caps;
|
||||
|
||||
fail_unless (list == mylist);
|
||||
fail_unless (gst_buffer_list_n_groups (list) == 2);
|
||||
|
||||
it = gst_buffer_list_iterate (list);
|
||||
fail_if (it == NULL);
|
||||
|
||||
fail_unless (gst_buffer_list_iterator_next_group (it));
|
||||
fail_unless (gst_buffer_list_iterator_n_buffers (it) == 1);
|
||||
buf = gst_buffer_list_iterator_next (it);
|
||||
fail_if (buf == NULL);
|
||||
fail_unless (*(gint *) GST_BUFFER_DATA (buf) == 1);
|
||||
caps = gst_buffer_get_caps (buf);
|
||||
fail_unless (caps == mycaps);
|
||||
fail_unless (gst_caps_is_equal (caps, mycaps));
|
||||
gst_caps_unref (caps);
|
||||
|
||||
fail_unless (gst_buffer_list_iterator_next_group (it));
|
||||
fail_unless (gst_buffer_list_iterator_n_buffers (it) == 2);
|
||||
buf = gst_buffer_list_iterator_next (it);
|
||||
fail_if (buf == NULL);
|
||||
fail_unless (*(gint *) GST_BUFFER_DATA (buf) == 2);
|
||||
caps = gst_buffer_get_caps (buf);
|
||||
fail_unless (caps == mycaps);
|
||||
gst_caps_unref (caps);
|
||||
|
||||
buf = gst_buffer_list_iterator_next (it);
|
||||
fail_if (buf == NULL);
|
||||
fail_unless (*(gint *) GST_BUFFER_DATA (buf) == 4);
|
||||
caps = gst_buffer_get_caps (buf);
|
||||
fail_unless (caps == mycaps);
|
||||
gst_caps_unref (caps);
|
||||
|
||||
gst_buffer_list_iterator_free (it);
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
callback_function_buffer_list (GstAppSink * appsink, gpointer callback_data)
|
||||
{
|
||||
GstBufferList *list;
|
||||
|
||||
list = gst_app_sink_pull_buffer_list (appsink);
|
||||
fail_unless (GST_IS_BUFFER_LIST (list));
|
||||
|
||||
check_buffer_list (list);
|
||||
|
||||
gst_buffer_list_unref (list);
|
||||
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
|
||||
GST_START_TEST (test_buffer_list)
|
||||
{
|
||||
GstElement *sink;
|
||||
GstBufferList *list;
|
||||
GstAppSinkCallbacks callbacks = { NULL };
|
||||
|
||||
sink = setup_appsink ();
|
||||
|
||||
callbacks.new_buffer_list = callback_function_buffer_list;
|
||||
|
||||
gst_app_sink_set_callbacks (GST_APP_SINK (sink), &callbacks, NULL, NULL);
|
||||
|
||||
ASSERT_SET_STATE (sink, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
|
||||
|
||||
list = create_buffer_list ();
|
||||
fail_unless (gst_pad_push_list (mysrcpad, list) == GST_FLOW_OK);
|
||||
|
||||
ASSERT_SET_STATE (sink, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
|
||||
cleanup_appsink (sink);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
static Suite *
|
||||
appsink_suite (void)
|
||||
{
|
||||
|
@ -212,6 +334,7 @@ appsink_suite (void)
|
|||
tcase_add_test (tc_chain, test_handoff_callback);
|
||||
tcase_add_test (tc_chain, test_notify0);
|
||||
tcase_add_test (tc_chain, test_notify1);
|
||||
tcase_add_test (tc_chain, test_buffer_list);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue