[gst-embedded] I can't draw on RGB space a frame from webcam
Juan Pablo Hernández Vogt
jphv.mail at gmail.com
Sat May 9 07:34:07 PDT 2009
Hello! I'm doing my first steps with GStreamer :)
I'd like to draw lines in a RGB space before show it. I let you a simple c++
program that shows a webcam. I've add a callback to get the buffer after
convert it, but it's in YUY2 and not in RGB. What am I doing wrong?
Notes:
width x height x bits_per_pixel / 8 = buffer size (in bytes)
YUY2: 640x480x16/8 = 614400
RGB: 640x480x24/8 = 921600
Program output "ch_havedata: buffer size 614400" :(
Thanks,
Juan Pablo
[code]
// Compile: g++ -Wall `pkg-config --cflags --libs gstreamer-0.10`
pipeline03.cpp -o pipeline03
#include <gst/gst.h>
static GMainLoop *loop;
static gboolean cb_have_data(GstPad *pad, GstBuffer *buffer, gpointer
u_data)
{
g_print("ch_havedata: buffer size %d\n",GST_BUFFER_SIZE(buffer));
return TRUE;
}
gint main (gint argc, gchar *argv[])
{
GstElement *pipeline, *webcamsrc, *flt, *colorspace, *videosink;
GstPad *pad;
// init GStreamer
gst_init (&argc, &argv);
// create pipeline
pipeline = gst_pipeline_new ("pipeline");
// configure pipeline
webcamsrc = gst_element_factory_make ("v4l2src", "webcamsrc");
flt = gst_element_factory_make ("capsfilter", "flt");
colorspace = gst_element_factory_make ("ffmpegcolorspace", "colorspace");
videosink = gst_element_factory_make ("xvimagesink", "videosink");
// setup capsfilter
g_object_set (G_OBJECT (flt), "caps",
gst_caps_new_simple ("video/x-raw-yuv",
"format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'),
"width", G_TYPE_INT, 640,
"height", G_TYPE_INT, 480,
"framerate", GST_TYPE_FRACTION, 20, 1,
"bpp", G_TYPE_INT, 16,
"depth", G_TYPE_INT, 16,
"endianness", G_TYPE_INT, G_BYTE_ORDER,
NULL), NULL);
// add two callback
pad = gst_element_get_pad(videosink, "sink");
gst_pad_add_buffer_probe (pad, G_CALLBACK (cb_have_data), NULL);
gst_object_unref (pad);
// link
gst_bin_add_many (GST_BIN (pipeline), webcamsrc, flt, colorspace,
videosink, NULL);
gst_element_link_many (webcamsrc, flt, videosink, NULL);
// play pipeline
gst_element_set_state (pipeline, GST_STATE_PLAYING);
// create mainloop
loop = g_main_loop_new (NULL, FALSE);
g_main_loop_run (loop);
// clean up
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
g_main_loop_unref (loop);
return 0;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-embedded/attachments/20090509/d8ccd598/attachment.htm>
More information about the Gstreamer-embedded
mailing list