Sorry, I had some copy/paste errors. Here&#39;s the code, the runtime error is:<br><br> CRITICAL **: gst_interpolation_control_source_set: assertion `G_VALUE_TYPE (value) == self-&gt;priv-&gt;type&#39; failed.<br><br>I changed the duracion value variable unit to second (replacing 500 with 5), and I tryed with GST_SECOND insted, but it didn&#39;t work.<br>
So I wrote it back to GST_MSECOND.<br><br>The code ΅without&quot; typing errors:<br><br>#include &lt;gst.h&gt;<br>#include &lt;controller/gstcontroller.h&gt;<br><br>#include &lt;iostream&gt;<br>#include &lt;string.h&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>    GMainLoop *loop = (GMainLoop *) data;<br><br>    switch (GST_MESSAGE_TYPE (msg))<br>
    {<br>    case GST_MESSAGE_EOS:<br>        g_print (&quot;Final de stream\n&quot;);<br>        g_main_loop_quit (loop);<br>        break;<br>    case GST_MESSAGE_ERROR:<br>    {<br>        gchar *debug;<br>        GError *error;<br>
        gst_message_parse_error (msg, &amp;error, &amp;debug);<br>        g_free (debug);<br>        g_printerr (&quot;Error: %s\n&quot;, error-&gt;message);<br>        g_error_free (error);<br>        g_main_loop_quit (loop);<br>
        break;<br>    }<br>    default:<br>        break;<br>    }<br>    return TRUE;<br>}<br><br>static void on_pad_added (GstElement *element, GstPad *pad, gpointer  data)<br>{<br>  GstPad *sinkpad = NULL;<br>  GstElement * elemento = (GstElement *) data;<br>
<br><br>  /* Ahora linkeo el pad de comp con sink pad */<br>  g_print (&quot;Dynamic pad created, linking queue\n&quot;);<br>  sinkpad = gst_element_get_static_pad (elemento, &quot;sink&quot;);<br><br><br>  gst_pad_link (pad, sinkpad);<br>
  gst_object_unref(sinkpad);<br><br>}<br><br><br>int main(int argc, char *argv[])<br>{<br><br>  GMainLoop *loop = NULL;<br><br>  GstElement *src1, *src2,*dec1,*dec2,*alfa1,*color,*smpte,*queue,*sink;<br>  GstBus *bus;<br>
<br>  guint duracion = 500;<br>  gint transicion = 1;<br><br>  cout &lt;&lt; &quot;Inicio...&quot; &lt;&lt; endl;<br><br>    /* init GStreamer */<br>  gst_init (&amp;argc, &amp;argv);<br>  bool iniciado = gst_controller_init (&amp;argc, &amp;argv);<br>
 <br>  loop = g_main_loop_new (NULL, FALSE);<br> <br>  if (argc != 3) {<br>    g_print (&quot;Usage: %s &lt;filename1&gt; &lt;filename2&gt;\n&quot;, argv[0]);<br>    return -1;<br>  }<br><br>  cout &lt;&lt; &quot;Creando...&quot; &lt;&lt; endl;<br>
  src1 = gst_element_factory_make(&quot;filesrc&quot;, &quot;src1&quot;);<br>  g_object_set(G_OBJECT(src1),&quot;location&quot;,argv[1], NULL);<br><br>  src2 = gst_element_factory_make(&quot;filesrc&quot;, &quot;src2&quot;);<br>
  g_object_set(G_OBJECT(src1),&quot;location&quot;,argv[2], NULL);<br><br>  GstElement *pipeline = gst_pipeline_new (&quot;video-player&quot;);<br><br>  dec1 = gst_element_factory_make(&quot;decodebin2&quot;,&quot;dec1&quot;);<br>
<br>  dec2 = gst_element_factory_make(&quot;decodebin2&quot;,&quot;dec2&quot;);<br><br>  cout &lt;&lt; &quot;Creando pipeline...&quot; &lt;&lt; endl;<br><br>  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));<br>  gst_bus_add_watch (bus, bus_call, loop);<br>
  gst_object_unref (bus);<br><br>  alfa1   = gst_element_factory_make (&quot;alpha&quot;,&quot;alfa1&quot;);<br>  smpte  = gst_element_factory_make (&quot;smptealpha&quot;,&quot;smpte&quot;);<br>  g_object_set(smpte,&quot;type&quot;, transicion, NULL);<br>
  color  = gst_element_factory_make (&quot;ffmpegcolorspace&quot;, &quot;color&quot;);<br>  GstElement * mixer  = gst_element_factory_make(&quot;videomixer&quot;, &quot;mixer&quot;);<br><br>  if ((!alfa1) || (!smpte) || (!color) || (!mixer))<br>
  {<br>      g_printerr (&quot;Alguno de los elementos del Bin no pudo ser creado. Saliendo\n&quot;);<br>     return 0;<br>  }<br>  <br><br>  // Agrego Controlador<br><br>  GstController * ctrl = gst_object_control_properties(G_OBJECT(smpte), &quot;position&quot;,NULL);<br>
<br>  if (ctrl == NULL)<br>  {<br>        GST_WARNING (&quot;No puede controlar el elemento fuente\n&quot;);<br>        return 1;<br>  }<br><br>  // Todo valor GValue debe inicializarse en 0<br>  GValue val_int = { 0, };<br>
  g_value_init (&amp;val_int, G_TYPE_INT);<br><br>  // Set interpolation mode<br><br>  GstInterpolationControlSource * csource = gst_interpolation_control_source_new();<br><br>  gst_interpolation_control_source_set_interpolation_mode(csource,GST_INTERPOLATE_LINEAR);<br>
<br>  // Seteo primer valor<br>  g_value_set_int(&amp;val_int, 0);<br>  gst_interpolation_control_source_set(csource,(0 * GST_MSECOND),&amp;val_int);<br><br>  // Seteo segundo valor<br>  g_value_set_int (&amp;val_int, 1);<br>
  gst_interpolation_control_source_set(csource,(duracion*GST_MSECOND),&amp;val_int);<br><br>  gst_controller_set_control_source (ctrl, &quot;position&quot;, GST_CONTROL_SOURCE (csource));<br><br>  g_object_unref (csource);<br>
  g_value_unset (&amp;val_int);<br><br>  g_signal_connect (G_OBJECT (dec1), &quot;pad-added&quot;, G_CALLBACK (on_pad_added),alfa1);<br>  g_signal_connect (G_OBJECT (dec2), &quot;pad-added&quot;, G_CALLBACK (on_pad_added),smpte);<br>
<br>  queue = gst_element_factory_make(&quot;queue&quot;, &quot;queue&quot;);<br>  sink  = gst_element_factory_make(&quot;autovideosink&quot;, &quot;sink&quot;);<br><br>  gst_bin_add_many (GST_BIN (pipeline),src1, src2, dec1, dec2, alfa1, smpte, mixer, queue, color, sink, NULL);<br>
<br>  gst_element_link (src1,dec1);<br>  gst_element_link (src2,dec2);<br>  gst_element_link (alfa1,mixer);<br>  gst_element_link (smpte,mixer);<br>  gst_element_link (mixer,queue);<br>  gst_element_link (queue,sink);<br>
<br><br>  /* now run */<br>  gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>  cout &lt;&lt; &quot;Playing...&quot; &lt;&lt; endl;<br>  g_main_loop_run (loop);<br><br>    /* also clean up */<br>  gst_element_set_state (pipeline, GST_STATE_NULL);<br>
  gst_object_unref (GST_OBJECT (pipeline));<br><br>  return 0;<br>}<br><br><br><br><br><br><br><br><br><div class="gmail_quote">2011/10/26 Rossana Guerra <span dir="ltr">&lt;<a href="mailto:guerra.rossana@gmail.com">guerra.rossana@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Where it says guint duration = 500.0 it should say guint duration = 500. Nonetheless, the error persists.<div><div></div>
<div class="h5"><br><br><div class="gmail_quote">2011/10/26 Rossana Guerra <span dir="ltr">&lt;<a href="mailto:guerra.rossana@gmail.com" target="_blank">guerra.rossana@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">HI Stefan, thanks for your help, I changed the variable type from gdouble to guint, same error. <br><br>Here&#39;s the whole code example:<br>

<br><br>#include &lt;gst.h&gt;<br>#include &lt;controller/gstcontroller.h&gt;<br>
#include &lt;iostream&gt;<br><br><br>using namespace std;<br><br>// Error handler<br>static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)<br>{<br>    GMainLoop *loop = (GMainLoop *) data;<br><br>    switch (GST_MESSAGE_TYPE (msg))<br>


    {<br>    case GST_MESSAGE_EOS:<br>        g_print (&quot;Final de stream\n&quot;);<br>        g_main_loop_quit (loop);<br>        break;<br>    case GST_MESSAGE_ERROR:<br>    {<br>        gchar *debug;<br>        GError *error;<br>


        gst_message_parse_error (msg, &amp;error, &amp;debug);<br>        g_free (debug);<br>        g_printerr (&quot;Error: %s\n&quot;, error-&gt;message);<br>        g_error_free (error);<br>        g_main_loop_quit (loop);<br>


        break;<br>    }<br>    default:<br>        break;<br>    }<br>    return TRUE;<br>}<br><br>static void on_pad_added (GstElement *element, GstPad *pad, gpointer  data)<br>{<br>  GstPad *sinkpad = NULL;<br>  GstElement * elemento = (GstElement *) data;<br>


<br><br>  /* Ahora linkeo el pad de comp con sink pad */<br>  g_print (&quot;Dynamic pad created, linking queue\n&quot;);<br>  sinkpad = gst_element_get_static_pad (elemento, &quot;sink&quot;);<br><br><br>  gst_pad_link (pad, sinkpad);<br>


  gst_object_unref(sinkpad);<br><br>}<br><br><br>int main(int argc, char *argv[])<br>{<br><br>  GMainLoop *loop = NULL;<br><br>  GstElement *src1, *src2,*dec1,*dec2,*alfa1,*color,*smpte,*queue,*sink;<br>  GstBus *bus;<br>


<br>  guint duracion = 500.0;<br>  guint transicion = 1;<br> <br><br>    /* init GStreamer */<br>  gst_init (&amp;argc, &amp;argv);<br>  bool iniciado = gst_controller_init (&amp;argc, &amp;argv);<br><br>  <br><br>  loop = g_main_loop_new (NULL, FALSE);  <br>


<br>  /* make sure we have input */<br>  if (argc != 3) {<br>    g_print (&quot;Usage: %s &lt;filename1&gt; &lt;filename2&gt;\n&quot;, argv[0]);<br>    return -1;<br>  }<br><br>  src1 = gst_element_factory_make(&quot;filesrc&quot;, &quot;src1&quot;);<br>


  g_object_set(G_OBJECT(src1),&quot;location&quot;,argv[1], NULL);<br><br>  src2 = gst_element_factory_make(&quot;filesrc&quot;, &quot;src2&quot;);<br>  g_object_set(G_OBJECT(src1),&quot;location&quot;,argv[2], NULL);<br>


<br>  GstElement *pipeline = gst_pipeline_new (&quot;video-player&quot;);<br><br>  dec1 = gst_element_factory_make(&quot;decodebin2&quot;,&quot;dec1&quot;);<br><br>  dec2 = gst_element_factory_make(&quot;decodebin2&quot;,&quot;dec2&quot;);<br>


<br>  cout &lt;&lt; &quot;Creando pipeline...&quot; &lt;&lt; endl;<br><br>  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));<br>  gst_bus_add_watch (bus, bus_call, loop);<br>  gst_object_unref (bus);<br><br>  alfa1   = gst_element_factory_make (&quot;alpha&quot;,&quot;alfa1&quot;);<br>


  smpte  = gst_element_factory_make (&quot;smptealpha&quot;,&quot;smpte&quot;); <br>  g_object_set(smpte,&quot;type&quot;, transicion, NULL);<br>  color  = gst_element_factory_make (&quot;ffmpegcolorspace&quot;, &quot;color&quot;);<br>


  GstElement * mixer  = gst_element_factory_make(&quot;videomixer&quot;, &quot;mixer&quot;);<br><br>  if ((!alfa1) || (!smpte) || (!color) || (!mixer))<br>  {<br>      g_printerr (&quot;Alguno de los elementos del Bin no pudo ser creado. Saliendo\n&quot;);<br>


     return 0;<br>  }<br> <br><br>  // Controller creation<div><br><br>  GstController * ctrl = gst_object_control_properties(G_OBJECT(smpte), &quot;position&quot;,NULL);<br><br>  if (ctrl == NULL)<br>  {<br>        GST_WARNING (&quot;No puede controlar el elemento fuente\n&quot;);<br>


        return 1;<br>  }<br><br>  // Todo valor GValue debe inicializarse en 0<br>  GValue val_double = { 0, };<br>  g_value_init (&amp;val_double, G_TYPE_DOUBLE);<br>  <br></div>  // Set interpolation mode<div>
<br><br>  GstInterpolationControlSource * csource = gst_interpolation_control_source_new();<br>
<br>  gst_interpolation_control_source_set_interpolation_mode(csource,GST_INTERPOLATE_LINEAR);<br><br>  // Seteo primer valor<br>  g_value_set_double(&amp;val_double, 0.0);<br>  gst_interpolation_control_source_set(csource,(0 * GST_MSECOND),&amp;val_double);<br>


<br>  // Seteo segundo valor<br>  g_value_set_double (&amp;val_double, 1.0);<br>  gst_interpolation_control_source_set(csource,(duracion*GST_MSECOND),&amp;val_double);<br><br>  gst_controller_set_control_source (ctrl, &quot;position&quot;, GST_CONTROL_SOURCE (csource));<br>


<br>  g_object_unref (csource);<br>  g_value_unset (&amp;val_double);<br>  <br></div>  g_signal_connect (G_OBJECT (dec1), &quot;pad-added&quot;, G_CALLBACK (on_pad_added),alfa1);<br>  g_signal_connect (G_OBJECT (dec2), &quot;pad-added&quot;, G_CALLBACK (on_pad_added),smpte);<br>


<br>  queue = gst_element_factory_make(&quot;queue&quot;, &quot;queue&quot;);<br>  sink  = gst_element_factory_make(&quot;autovideosink&quot;, &quot;sink&quot;);<br><br>  gst_bin_add_many (GST_BIN (pipeline),src1, src2, dec1, dec2, alfa1, smpte, mixer, queue, color, sink, NULL);<br>


<br>  gst_element_link (src1,dec1);<br>  gst_element_link (src2,dec2);<br>  gst_element_link (alfa1,mixer);<br>  gst_element_link (smpte,mixer);<br>  gst_element_link (mixer,queue);<br>  gst_element_link (queue,sink);<br>


<br><br>  /* now run */<br>  gst_element_set_state (pipeline, GST_STATE_PLAYING);<br>  cout &lt;&lt; &quot;Playing...&quot; &lt;&lt; endl;<br>  g_main_loop_run (loop);<br><br>    /* also clean up */<br>  gst_element_set_state (pipeline, GST_STATE_NULL);<br>


  gst_object_unref (GST_OBJECT (pipeline));<br><br>  return 0;<div><div></div><div><br>}<br><br><br><br><br><br><br><div class="gmail_quote">2011/10/26 Stefan Sauer <span dir="ltr">&lt;<a href="mailto:ensonic@hora-obscura.de" target="_blank">ensonic@hora-obscura.de</a>&gt;</span><br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u>

  
    
  
  <div bgcolor="#ffffff" text="#000000"><div>
    On 10/26/2011 03:12 AM, Rossana Guerra wrote:
    <blockquote type="cite">
      <pre>Hi I trying to control the position property of a smptealpha element. It
controls the opacity of the alpha channel,</pre>
    </blockquote></div>
    no, position controls the transition of the fade. 0.0:input1,
    1.0:input2.<div><br>
    <blockquote type="cite">
      <pre> it varies from 0.0 to 1.0.
The duration of this setting is 500ms.

I am working around this problem, it happens at runtime, I can&#39;t figure out
what it&#39;s wrong.
</pre>
    </blockquote>
    <br></div>
    What is not working? The code snippet looks more of less okay. Maybe
    you can post a full standalone example.<br>
    <br>
    Stefan<div><br>
    <blockquote type="cite">
      <pre>Thanks and regards,

Rossana


Here&#39;s the code;
_____________


gst_interpolation_control_source_set: assertion `G_VALUE_TYPE (value) ==
self-&gt;priv-&gt;type&#39; failed

// Agrego Controlador

  gdouble duracion = 500;
</pre>
    </blockquote></div>
    guint64 duracion = 500;<br>
    <blockquote type="cite"><div>
      <pre>  GstController * ctrl = gst_object_control_properties(G_OBJECT(smpte),
&quot;position&quot;,NULL);

  if (ctrl == NULL)
  {
        GST_WARNING (&quot;No puede controlar el elemento fuente\n&quot;);
        return 0;
  }


  // Todo valor GValue debe inicializarse en 0
  GValue val_double = { 0, };
  g_value_init (&amp;val_double, G_TYPE_DOUBLE);


  // Seteo modo de interpolacion

  GstInterpolationControlSource * csource =
gst_interpolation_control_source_new();


gst_interpolation_control_source_set_interpolation_mode(csource,GST_INTERPOLATE_LINEAR);

  // Seteo primer valor
  g_value_set_double(&amp;val_double, 0.0);
  gst_interpolation_control_source_set(csource,(0 *
GST_MSECOND),&amp;val_double);

  // Seteo segundo valor
  g_value_set_double (&amp;val_double, 1.0);

gst_interpolation_control_source_set(csource,(duracion*GST_MSECOND),&amp;val_double);

  gst_controller_set_control_source (ctrl, &quot;position&quot;, GST_CONTROL_SOURCE
(csource));

  g_object_unref (csource);
  g_value_unset (&amp;val_double);

</pre>
      </div><pre><fieldset></fieldset>
_______________________________________________
gstreamer-devel mailing list
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a>
<a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a>
</pre>
    </blockquote>
    <br>
  </div>

<br>_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">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>
<br></blockquote></div><br>
</div></div></blockquote></div><br>
</div></div></blockquote></div><br>