2
/*** block from ../../../docs/manual/advanced-dataaccess.xml ***/
5
static GMainLoop *loop;
8
cb_need_data (GstElement *appsrc,
12
static gboolean white = FALSE;
13
static GstClockTime timestamp = 0;
20
buffer = gst_buffer_new_allocate (NULL, size, NULL);
22
/* this makes the image black/white */
23
gst_buffer_memset (buffer, 0, white ? 0xff : 0x0, size);
27
GST_BUFFER_PTS (buffer) = timestamp;
28
GST_BUFFER_DURATION (buffer) = gst_util_uint64_scale_int (1, GST_SECOND, 2);
30
timestamp += GST_BUFFER_DURATION (buffer);
32
g_signal_emit_by_name (appsrc, "push-buffer", buffer, &ret);
34
if (ret != GST_FLOW_OK) {
35
/* something wrong, stop pushing */
36
g_main_loop_quit (loop);
44
GstElement *pipeline, *appsrc, *conv, *videosink;
47
gst_init (&argc, &argv);
48
loop = g_main_loop_new (NULL, FALSE);
51
pipeline = gst_pipeline_new ("pipeline");
52
appsrc = gst_element_factory_make ("appsrc", "source");
53
conv = gst_element_factory_make ("videoconvert", "conv");
54
videosink = gst_element_factory_make ("xvimagesink", "videosink");
57
g_object_set (G_OBJECT (appsrc), "caps",
58
gst_caps_new_simple ("video/x-raw",
59
"format", G_TYPE_STRING, "RGB16",
60
"width", G_TYPE_INT, 384,
61
"height", G_TYPE_INT, 288,
62
"framerate", GST_TYPE_FRACTION, 0, 1,
64
gst_bin_add_many (GST_BIN (pipeline), appsrc, conv, videosink, NULL);
65
gst_element_link_many (appsrc, conv, videosink, NULL);
68
g_object_set (G_OBJECT (appsrc),
70
"format", GST_FORMAT_TIME, NULL);
71
g_signal_connect (appsrc, "need-data", G_CALLBACK (cb_need_data), NULL);
74
gst_element_set_state (pipeline, GST_STATE_PLAYING);
75
g_main_loop_run (loop);
78
gst_element_set_state (pipeline, GST_STATE_NULL);
79
gst_object_unref (GST_OBJECT (pipeline));
80
g_main_loop_unref (loop);