238
handoff_cb (GstElement * element, GstBuffer * buf, GstPad * pad,
242
GST_LOG ("counter = %d", *p_counter);
245
GST_START_TEST (test_reuse_push)
247
GstElement *src, *sep, *sink, *pipeline;
249
gint counter, repeat = 3, num_buffers = 10;
251
pipeline = gst_pipeline_new ("pipeline");
252
fail_unless (pipeline != NULL, "Failed to create pipeline!");
254
bus = gst_element_get_bus (pipeline);
256
src = gst_element_factory_make ("fakesrc", "fakesrc");
257
fail_unless (src != NULL, "Failed to create 'fakesrc' element!");
259
sep = gst_element_factory_make ("queue", "queue");
260
fail_unless (sep != NULL, "Failed to create 'queue' element");
262
sink = gst_element_factory_make ("fakesink", "fakesink");
263
fail_unless (sink != NULL, "Failed to create 'fakesink' element!");
265
g_object_set (sink, "signal-handoffs", TRUE, NULL);
266
g_signal_connect (sink, "handoff", G_CALLBACK (handoff_cb), &counter);
268
gst_bin_add_many (GST_BIN (pipeline), src, sep, sink, NULL);
270
fail_unless (gst_element_link (src, sep));
271
fail_unless (gst_element_link (sep, sink));
273
g_object_set (src, "num-buffers", num_buffers, NULL);
276
GstStateChangeReturn state_ret;
279
GST_INFO ("====================== round %d ======================", repeat);
283
state_ret = gst_element_set_state (pipeline, GST_STATE_PAUSED);
284
fail_unless (state_ret != GST_STATE_CHANGE_FAILURE);
286
if (state_ret == GST_STATE_CHANGE_ASYNC) {
287
GST_LOG ("waiting for pipeline to reach PAUSED state");
288
state_ret = gst_element_get_state (pipeline, NULL, NULL, -1);
289
fail_unless_equals_int (state_ret, GST_STATE_CHANGE_SUCCESS);
292
GST_LOG ("PAUSED, let's read all of it");
294
state_ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
295
fail_unless (state_ret != GST_STATE_CHANGE_FAILURE);
297
msg = gst_bus_poll (bus, GST_MESSAGE_EOS, -1);
298
fail_unless (msg != NULL, "Expected EOS message on bus!");
300
gst_message_unref (msg);
302
if (num_buffers >= 0) {
303
fail_unless_equals_int (counter, num_buffers);
306
fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
307
GST_STATE_CHANGE_SUCCESS);
310
} while (repeat > 0);
312
gst_object_unref (bus);
313
gst_object_unref (pipeline);
238
319
fakesrc_suite (void)