<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
    <title></title>
  </head>
  <body bgcolor="#ffffff" text="#000000">
    On 10/25/2011 08:06 AM, Rossana Guerra wrote:
    <blockquote
cite="mid:CAAMjx-fTwirkrZUcbswN8xt2=fqbMK+z3G=2Ww5VufLQPqscWw@mail.gmail.com"
      type="cite">Hello everyone, I am translating the following code to
      C/C++: <a moz-do-not-send="true"
        href="http://notes.brooks.nu/2011/01/python-gstreamer-controller/">http://notes.brooks.nu/2011/01/python-gstreamer-controller/</a><br>
      It's a controller for controlling the alpha channel during
      crossfade, I adapted it for transitions, using, smpte instead.<br>
    </blockquote>
    <br>
    smptealpha does not have a property called "alpha". Only "border"
    and "invert" are controllable right now.<br>
    <br>
    Stefan<br>
    <blockquote
cite="mid:CAAMjx-fTwirkrZUcbswN8xt2=fqbMK+z3G=2Ww5VufLQPqscWw@mail.gmail.com"
      type="cite">
      <br>
      The fact is it returns NULL and the programs stop running. The
      code is below, I appreciate any suggestion.<br>
      I am a bit clueless is an adaptation of a code I did before and it
      works.<br>
      <br>
      Thanks and regards.<br>
      <br>
      Rossana<br>
      <br>
      //// the code<br>
      <br>
      #include &lt;gst.h&gt;<br>
      #include &lt;controller/gstcontroller.h&gt;<br>
      <br>
      #include &lt;iostream&gt;<br>
      <br>
      <br>
      using namespace std;<br>
      <br>
      // Manejador de errores<br>
      static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer
      data)<br>
      {<br>
      ::::::::::::::::::::::::................<br>
      }<br>
      <br>
      static void on_pad_added (GstElement *element, GstPad *pad,
      gpointer&nbsp; data)<br>
      {<br>
      &nbsp; GstPad *sinkpad = NULL;<br>
      &nbsp; GstElement * elemento = (GstElement *) data;<br>
      <br>
      <br>
      &nbsp; /* Ahora linkeo el pad de comp con sink pad */<br>
      &nbsp; g_print ("Dynamic pad created, linking queue\n");<br>
      &nbsp; sinkpad = gst_element_get_static_pad (elemento, "sink");<br>
      <br>
      <br>
      &nbsp; gst_pad_link (pad, sinkpad);<br>
      &nbsp; gst_object_unref(sinkpad);<br>
      <br>
      }<br>
      <br>
      <br>
      int main(int argc, char *argv[])<br>
      {<br>
      <br>
      &nbsp; GMainLoop *loop = NULL;<br>
      <br>
      &nbsp; GstElement *src1,
      *src2,*dec1,*dec2,*alfa1,*color,*smpte,*queue,*sink;<br>
      &nbsp; GstBus *bus;<br>
      <br>
      &nbsp; gdouble duracion = 500;<br>
      &nbsp; gint transicion = 1;<br>
      <br>
      &nbsp; cout &lt;&lt; "Inicio..." &lt;&lt; endl;<br>
      <br>
      &nbsp;&nbsp;&nbsp; /* init GStreamer */<br>
      &nbsp; gst_init (&amp;argc, &amp;argv);<br>
      &nbsp; gst_controller_init (&amp;argc, &amp;argv);<br>
      <br>
      &nbsp; loop = g_main_loop_new (NULL, FALSE);&nbsp; <br>
      <br>
      &nbsp; /* make sure we have input */<br>
      &nbsp; if (argc != 3) {<br>
      &nbsp;&nbsp;&nbsp; g_print ("Usage: %s &lt;filename1&gt; &lt;filename2&gt;\n",
      argv[0]);<br>
      &nbsp;&nbsp;&nbsp; return -1;<br>
      &nbsp; }<br>
      &nbsp; <br>
      &nbsp; src1 = gst_element_factory_make("filesrc", "src1");<br>
      &nbsp; g_object_set(G_OBJECT(src1),"location",argv[1], NULL);<br>
      <br>
      &nbsp; src2 = gst_element_factory_make("filesrc", "src2");<br>
      &nbsp; g_object_set(G_OBJECT(src1),"location",argv[2], NULL);<br>
      <br>
      &nbsp; GstElement *pipeline = gst_pipeline_new ("video-player");<br>
      <br>
      &nbsp; dec1 = gst_element_factory_make("decodebin2","dec1");<br>
      <br>
      &nbsp; dec2 = gst_element_factory_make("decodebin2","dec2");<br>
      <br>
      &nbsp; bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));<br>
      &nbsp; gst_bus_add_watch (bus, bus_call, loop);<br>
      &nbsp; gst_object_unref (bus);<br>
      <br>
      &nbsp; alfa1&nbsp;&nbsp; = gst_element_factory_make ("alpha","alfa1");<br>
      &nbsp; smpte&nbsp; = gst_element_factory_make ("smptealpha","smpte");<br>
      &nbsp; color&nbsp; = gst_element_factory_make ("ffmpegcolorspace", "color");<br>
      &nbsp; GstElement * mixer&nbsp; = gst_element_factory_make("videomixer",
      "mixer");<br>
      <br>
      &nbsp; if ((!alfa1) || (!smpte) || (!color) || (!mixer))<br>
      &nbsp; {<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_printerr ("Alguno de los elementos del Bin no pudo ser
      creado. Saliendo\n");<br>
      &nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>
      &nbsp; }<br>
      <br>
      &nbsp; queue = gst_element_factory_make("queue", "queue");<br>
      &nbsp; sink&nbsp; = gst_element_factory_make("autovideosink", "sink");<br>
      <br>
      &nbsp; cout &lt;&lt; "Creando 1..." &lt;&lt; endl;<br>
      <br>
      &nbsp; // Agrego Controlador<br>
      <br>
      &nbsp; GstController * ctrl = NULL;<br>
      &nbsp; if (!(ctrl = gst_controller_new (G_OBJECT(smpte),
      "alpha",NULL)))&nbsp; /// Here's the error, always return NULL<br>
      &nbsp; {<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "ctrl value..." &lt;&lt; ctrl &lt;&lt;
      endl;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GST_WARNING ("No puede controlar el elemento fuente\n");<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<br>
      &nbsp; }<br>
    </blockquote>
    <br>
    <br>
    <br>
    <blockquote
cite="mid:CAAMjx-fTwirkrZUcbswN8xt2=fqbMK+z3G=2Ww5VufLQPqscWw@mail.gmail.com"
      type="cite"><br>
      &nbsp; // Todo valor GValue debe inicializarse en 0<br>
      &nbsp; GValue val_double = { 0, };<br>
      &nbsp; g_value_init (&amp;val_double, G_TYPE_DOUBLE);<br>
      <br>
      <br>
      &nbsp; // Creo la fuente al controlador y la asocio al controlador<br>
      &nbsp; // Seteo modo de interpolacion<br>
      <br>
      &nbsp; GstInterpolationControlSource * csource =
      gst_interpolation_control_source_new();<br>
      &nbsp; gst_controller_set_control_source (ctrl, "alpha",
      GST_CONTROL_SOURCE (csource));<br>
      <br>
      &nbsp;
gst_interpolation_control_source_set_interpolation_mode(csource,GST_INTERPOLATE_LINEAR);<br>
      <br>
      &nbsp; // Seteo primer valor<br>
      &nbsp; g_value_set_double(&amp;val_double, 0.0);<br>
      &nbsp; gst_interpolation_control_source_set(csource,(0 *
      GST_MSECOND),&amp;val_double);<br>
      <br>
      &nbsp; // Seteo segundo valor<br>
      &nbsp; g_value_set_double (&amp;val_double, duracion);<br>
      &nbsp; gst_interpolation_control_source_set(csource,(1 *
      GST_MSECOND),&amp;val_double);<br>
      <br>
      &nbsp; g_object_unref (csource);<br>
      <br>
      &nbsp; gst_bin_add_many (GST_BIN (pipeline),src1, src2, dec1, dec2,
      alfa1, smpte, mixer, queue, color, sink, NULL);<br>
      &nbsp; g_signal_connect (G_OBJECT (dec1), "pad-added", G_CALLBACK
      (on_pad_added),alfa1);<br>
      &nbsp; g_signal_connect (G_OBJECT (dec2), "pad-added", G_CALLBACK
      (on_pad_added),smpte);<br>
      <br>
      &nbsp; gst_element_link (src1,dec1);<br>
      &nbsp; gst_element_link (src2,dec2);<br>
      &nbsp; gst_element_link (alfa1,mixer);<br>
      &nbsp; gst_element_link (smpte,mixer);<br>
      &nbsp; gst_element_link (mixer,queue);<br>
      &nbsp; gst_element_link (queue,sink);<br>
      &nbsp; g_object_set(smpte,"type", transicion, NULL);<br>
      <br>
      &nbsp; /* now run */<br>
      &nbsp; gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>
      &nbsp; cout &lt;&lt; "Playing..." &lt;&lt; endl;<br>
      &nbsp; g_main_loop_run (loop);<br>
      <br>
      &nbsp;&nbsp;&nbsp; /* also clean up */<br>
      &nbsp; gst_element_set_state (pipeline, GST_STATE_NULL);<br>
      &nbsp; gst_object_unref (GST_OBJECT (pipeline));<br>
      <br>
      &nbsp; return 0;<br>
      }<br>
      <br>
      <br>
      <br>
      <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
gstreamer-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>