<div dir="ltr"><div>Hi Annick,</div><div><br></div>Which doc did you grab this from? Just want to make sure it is proper ones.<div><br></div><div>Luis</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 28 October 2014 17:06, Annick Fron <span dir="ltr"><<a href="mailto:list@afceurope.com" target="_blank">list@afceurope.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I have copied from the doc the appsrc example, and tried to create contents using cairo, but the example does not work.<br>
<br>
Any idea ?<br>
<br>
Annick Fron<br>
<br>
/*<br>
============================================================================<br>
Name        : Cairo-src.c<br>
<br>
============================================================================<br>
*/<br>
<br>
<br>
#include <gst/gst.h><br>
#include <cairo.h><br>
#include <gst/video/video.h><br>
#include <stdio.h><br>
<br>
static GMainLoop *loop;<br>
<br>
static void<br>
cb_need_data (GstElement *appsrc,<br>
        guint       unused_size,<br>
        gpointer    user_data)<br>
{<br>
static gboolean white = FALSE;<br>
static GstClockTime timestamp = 0;<br>
GstBuffer *buffer;<br>
GstMapInfo info;<br>
guint size;<br>
GstFlowReturn ret;<br>
GstMemory * memory;<br>
cairo_t *  cr;<br>
<br>
<br>
cairo_surface_t * imageSurface;<br>
<br>
<br>
size = 640 * 50 * 4;<br>
<br>
buffer = gst_buffer_new_allocate (NULL, size, NULL);<br>
<br>
<br>
memory=gst_buffer_get_all_memory(buffer);<br>
gst_buffer_make_writable(buffer);<br>
gst_buffer_map (buffer, &info, GST_MAP_WRITE);<br>
    printf("buffer \n");<br>
imageSurface = cairo_image_surface_create_for_data (info.data,<br>
        CAIRO_FORMAT_ARGB32,<br>
        640,<br>
        50,<br>
        640*4);<br>
cr = cairo_create(imageSurface);<br>
cairo_set_source_rgb(cr,1.0,0,1.0);<br>
cairo_rectangle(cr, 100.0,20.0,400.0,40.0 );<br>
cairo_fill(cr);<br>
<br>
//gst_buffer_unmap (buffer, &info);<br>
<br>
GST_BUFFER_PTS (buffer) = timestamp;<br>
GST_BUFFER_DURATION (buffer) = gst_util_uint64_scale_int (1, GST_SECOND, 2);<br>
<br>
timestamp += GST_BUFFER_DURATION (buffer);<br>
<br>
<br>
g_signal_emit_by_name (appsrc, "push-buffer", buffer, &ret);<br>
<br>
<br>
if (ret != GST_FLOW_OK) {<br>
  /* something wrong, stop pushing */<br>
  g_main_loop_quit (loop);<br>
}<br>
}<br>
<br>
gint<br>
main (gint   argc,<br>
    gchar *argv[])<br>
{<br>
GstElement *pipeline, *appsrc, *conv, *videosink;<br>
<br>
/* init GStreamer */<br>
gst_init (&argc, &argv);<br>
loop = g_main_loop_new (NULL, FALSE);<br>
<br>
/* setup pipeline */<br>
pipeline = gst_pipeline_new ("pipeline");<br>
appsrc = gst_element_factory_make ("appsrc", "source");<br>
conv = gst_element_factory_make ("videoconvert", "conv");<br>
videosink = gst_element_factory_make ("ximagesink", "videosink");<br>
<br>
/* setup */<br>
g_object_set (G_OBJECT (appsrc), "caps",<br>
        gst_caps_new_simple ("video/x-raw",<br>
                   "format", G_TYPE_STRING, "ARGB",<br>
                   "width", G_TYPE_INT, 640,<br>
                   "height", G_TYPE_INT, 50,<br>
                   "framerate", GST_TYPE_FRACTION, 15, 1,<br>
                   NULL), NULL);<br>
gst_bin_add_many (GST_BIN (pipeline), appsrc, conv, videosink, NULL);<br>
gst_element_link_many (appsrc, conv, videosink, NULL);<br>
<br>
/* setup appsrc */<br>
g_object_set (G_OBJECT (appsrc),<br>
      "stream-type", 0,<br>
      "format", GST_FORMAT_TIME, NULL);<br>
g_signal_connect (appsrc, "need-data", G_CALLBACK (cb_need_data), NULL);<br>
<br>
/* play */<br>
gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>
g_main_loop_run (loop);<br>
<br>
/* clean up */<br>
gst_element_set_state (pipeline, GST_STATE_NULL);<br>
gst_object_unref (GST_OBJECT (pipeline));<br>
g_main_loop_unref (loop);<br>
<br>
return 0;<br>
}<br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</blockquote></div><br></div>