Invalid property's type for a controller at runtime: `G_VALUE_TYPE (value) == self->priv->type' failed

Rossana Guerra guerra.rossana at gmail.com
Fri Oct 28 11:14:35 PDT 2011


Hi Stefan, I didn't receive the email, I even looked into the spam folder,
just in case....

2011/10/28 Stefan Sauer <ensonic at hora-obscura.de>

> **
> On 10/28/2011 12:40 AM, Rossana Guerra wrote:
>
> Sorry Stefan, where is the code to compare with?
>
> I forwarded the mail to your personal address. Out mailing list tried to be
> super smart and stipped attached *sourcecode*.
>
>
> ..I downloaded the doc (pdf) and the order remains the same.
>
> I pushed the fix to the API docs to git. That does not regenerate the pdf.
> To be sure which pdf exactly are you talking about?
>


The pdf asociated with the html file, the one that has this chapter:
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-dparams-parameters.html
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/manual.pdf

thanks



> Stefan
>
>
> Regards and thanks
>
>
> 2011/10/27 Stefan Sauer <ensonic at hora-obscura.de>
>
>>  Hi,
>> On 10/27/2011 01:37 AM, Rossana Guerra wrote:
>>
>> Well the error type disappeared, it was due where the place the
>> gst_controller_set_control_source (ctrl, "position", GST_CONTROL_SOURCE
>> (csource)) sentence was.
>> The first time I did it according the documentation, at the end of the
>> value sets of the control source. It seems it isn't the right place, I
>> changed the sentences right after creating the controller, it seems it
>> works. Hope it helps someone else.
>>
>> I fix the wrong order of calls in the docs.
>>
>>  In this way:
>>
>>
>> I made a few more fixes - compare your source and mine in a diff viewer
>> (e.g. meld). You still need to do more stuff to ensure both sources can be
>> mixed (run it as GST_DEBUG="*:2" ./ctrl <file1> <file2> to see the
>> warnings).
>>
>> Stefan
>>
>>
>> GstInterpolationControlSource * csource =
>> gst_interpolation_control_source_new();
>>
>>
>> gst_interpolation_control_source_set_interpolation_mode(csource,GST_INTERPOLATE_LINEAR);
>> gst_controller_set_control_source (ctrl, "position", GST_CONTROL_SOURCE
>> (csource));
>>
>> (Now the runtime is another! but one less at least)
>>
>> Specially thanks to Stefan!
>>
>>
>> Here is the complete code:
>>
>> #include <gst.h>
>> #include <controller/gstcontroller.h>
>>
>> #include <iostream>
>> #include <string.h>
>>
>> using namespace std;
>>
>> // Manejador de errores
>> static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
>> {
>>     GMainLoop *loop = (GMainLoop *) data;
>>
>>     switch (GST_MESSAGE_TYPE (msg))
>>     {
>>     case GST_MESSAGE_EOS:
>>         g_print ("Final de stream\n");
>>         g_main_loop_quit (loop);
>>         break;
>>     case GST_MESSAGE_ERROR:
>>     {
>>         gchar *debug;
>>         GError *error;
>>         gst_message_parse_error (msg, &error, &debug);
>>         g_free (debug);
>>         g_printerr ("Error: %s\n", error->message);
>>         g_error_free (error);
>>         g_main_loop_quit (loop);
>>         break;
>>     }
>>     default:
>>         break;
>>     }
>>     return TRUE;
>> }
>>
>> static void on_pad_added (GstElement *element, GstPad *pad, gpointer
>> data)
>> {
>>   GstPad *sinkpad = NULL;
>>   GstElement * elemento = (GstElement *) data;
>>
>>
>>   /* Ahora linkeo el pad de comp con sink pad */
>>   g_print ("Dynamic pad created, linking queue\n");
>>   sinkpad = gst_element_get_static_pad (elemento, "sink");
>>
>>
>>   gst_pad_link (pad, sinkpad);
>>   gst_object_unref(sinkpad);
>>
>> }
>>
>> int main(int argc, char *argv[])
>> {
>>
>>   GMainLoop *loop = NULL;
>>
>>   GstElement *src1, *src2,*dec1,*dec2,*alfa1,*color,*smpte,*queue,*sink;
>>   GstBus *bus;
>>
>>   gdouble duracion = 500.0;
>>   gint transicion = 1;
>>
>>   cout << "Inicio..." << endl;
>>
>>     /* init GStreamer */
>>   gst_init (&argc, &argv);
>>   bool iniciado = gst_controller_init (&argc, &argv);
>>
>>    loop = g_main_loop_new (NULL, FALSE);
>>   //gint transicion = 1;
>>
>>   /* make sure we have input */
>>   if (argc != 3) {
>>     g_print ("Usage: %s <filename1> <filename2>\n", argv[0]);
>>     return -1;
>>   }
>>
>>   cout << "Creando..." << endl;
>>   src1 = gst_element_factory_make("filesrc", "src1");
>>   g_object_set(G_OBJECT(src1),"location",argv[1], NULL);
>>
>>   src2 = gst_element_factory_make("filesrc", "src2");
>>   g_object_set(G_OBJECT(src1),"location",argv[2], NULL);
>>
>>   GstElement *pipeline = gst_pipeline_new ("video-player");
>>
>>   dec1 = gst_element_factory_make("decodebin2","dec1");
>>
>>   dec2 = gst_element_factory_make("decodebin2","dec2");
>>
>>   cout << "Creando pipeline..." << endl;
>>
>>   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
>>   gst_bus_add_watch (bus, bus_call, loop);
>>   gst_object_unref (bus);
>>
>>   alfa1   = gst_element_factory_make ("alpha","alfa1");
>>   smpte  = gst_element_factory_make ("smptealpha","smpte");
>>   g_object_set(smpte,"type", transicion, NULL);
>>   color  = gst_element_factory_make ("ffmpegcolorspace", "color");
>>   GstElement * mixer  = gst_element_factory_make("videomixer", "mixer");
>>
>>   if ((!alfa1) || (!smpte) || (!color) || (!mixer))
>>   {
>>       g_printerr ("Alguno de los elementos del Bin no pudo ser creado.
>> Saliendo\n");
>>      return 0;
>>   }
>>
>>
>>   cout << "Creando 1..." << endl;
>>
>>   // Agrego Controlador
>>
>>   GstController * ctrl = gst_object_control_properties(G_OBJECT(smpte),
>> "position",NULL);
>>
>>   if (ctrl == NULL)
>>   {
>>         GST_WARNING ("No puede controlar el elemento fuente\n");
>>         return 1;
>>   }
>>
>>   // Todo valor GValue debe inicializarse en 0
>>   GValue val_double = { 0, };
>>   g_value_init (&val_double, G_TYPE_DOUBLE);
>>
>>   // Creo la fuente al controlador y la asocio al controlador
>>   // Seteo modo de interpolacion
>>
>>   GstInterpolationControlSource * csource =
>> gst_interpolation_control_source_new();
>>
>>
>> gst_interpolation_control_source_set_interpolation_mode(csource,GST_INTERPOLATE_LINEAR);
>>   gst_controller_set_control_source (ctrl, "position", GST_CONTROL_SOURCE
>> (csource));
>>
>>   // Seteo primer valor
>>   g_value_set_double(&val_double, 0.0);
>>   gst_interpolation_control_source_set(csource,(0 *
>> GST_MSECOND),&val_double);
>>
>>   // Seteo segundo valor
>>   g_value_set_double(&val_double, 1.0);
>>
>> gst_interpolation_control_source_set(csource,(duracion*GST_MSECOND),&val_double);
>>
>>   //gst_controller_set_control_source (ctrl, "position",
>> GST_CONTROL_SOURCE (csource));
>>
>>   g_object_unref (csource);
>>   g_value_unset (&val_double);
>>
>>   g_signal_connect (G_OBJECT (dec1), "pad-added", G_CALLBACK
>> (on_pad_added),alfa1);
>>   g_signal_connect (G_OBJECT (dec2), "pad-added", G_CALLBACK
>> (on_pad_added),smpte);
>>
>>   queue = gst_element_factory_make("queue", "queue");
>>   sink  = gst_element_factory_make("autovideosink", "sink");
>>
>>   gst_bin_add_many (GST_BIN (pipeline),src1, src2, dec1, dec2, alfa1,
>> smpte, mixer, queue, color, sink, NULL);
>>
>>   gst_element_link (src1,dec1);
>>   gst_element_link (src2,dec2);
>>   gst_element_link (alfa1,mixer);
>>   gst_element_link (smpte,mixer);
>>   gst_element_link (mixer,queue);
>>   gst_element_link (queue,sink);
>>
>>
>>   /* now run */
>>   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>>   cout << "Playing..." << endl;
>>   g_main_loop_run (loop);
>>
>>     /* also clean up */
>>   gst_element_set_state (pipeline, GST_STATE_NULL);
>>   gst_object_unref (GST_OBJECT (pipeline));
>>
>>   return 0;
>> }
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> 2011/10/26 Rossana Guerra <guerra.rossana at gmail.com>
>>
>>> Sorry, I had some copy/paste errors. Here's the code, the runtime error
>>> is:
>>>
>>>  CRITICAL **: gst_interpolation_control_source_set: assertion
>>> `G_VALUE_TYPE (value) == self->priv->type' failed.
>>>
>>> I changed the duracion value variable unit to second (replacing 500 with
>>> 5), and I tryed with GST_SECOND insted, but it didn't work.
>>> So I wrote it back to GST_MSECOND.
>>>
>>> The code ΅without" typing errors:
>>>
>>>
>>> #include <gst.h>
>>> #include <controller/gstcontroller.h>
>>>
>>> #include <iostream>
>>>  #include <string.h>
>>>
>>>
>>> using namespace std;
>>>
>>> // Manejador de errores
>>>
>>> static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
>>> {
>>>     GMainLoop *loop = (GMainLoop *) data;
>>>
>>>     switch (GST_MESSAGE_TYPE (msg))
>>>     {
>>>     case GST_MESSAGE_EOS:
>>>         g_print ("Final de stream\n");
>>>         g_main_loop_quit (loop);
>>>         break;
>>>     case GST_MESSAGE_ERROR:
>>>     {
>>>         gchar *debug;
>>>         GError *error;
>>>         gst_message_parse_error (msg, &error, &debug);
>>>         g_free (debug);
>>>         g_printerr ("Error: %s\n", error->message);
>>>         g_error_free (error);
>>>         g_main_loop_quit (loop);
>>>         break;
>>>     }
>>>     default:
>>>         break;
>>>     }
>>>     return TRUE;
>>> }
>>>
>>> static void on_pad_added (GstElement *element, GstPad *pad, gpointer
>>> data)
>>> {
>>>   GstPad *sinkpad = NULL;
>>>   GstElement * elemento = (GstElement *) data;
>>>
>>>
>>>   /* Ahora linkeo el pad de comp con sink pad */
>>>   g_print ("Dynamic pad created, linking queue\n");
>>>   sinkpad = gst_element_get_static_pad (elemento, "sink");
>>>
>>>
>>>   gst_pad_link (pad, sinkpad);
>>>   gst_object_unref(sinkpad);
>>>
>>> }
>>>
>>>
>>> int main(int argc, char *argv[])
>>> {
>>>
>>>   GMainLoop *loop = NULL;
>>>
>>>   GstElement *src1, *src2,*dec1,*dec2,*alfa1,*color,*smpte,*queue,*sink;
>>>   GstBus *bus;
>>>
>>>    guint duracion = 500;
>>>   gint transicion = 1;
>>>
>>>   cout << "Inicio..." << endl;
>>>
>>>
>>>     /* init GStreamer */
>>>   gst_init (&argc, &argv);
>>>   bool iniciado = gst_controller_init (&argc, &argv);
>>>
>>>   loop = g_main_loop_new (NULL, FALSE);
>>>
>>>    if (argc != 3) {
>>>     g_print ("Usage: %s <filename1> <filename2>\n", argv[0]);
>>>     return -1;
>>>   }
>>>
>>>    cout << "Creando..." << endl;
>>>
>>>   src1 = gst_element_factory_make("filesrc", "src1");
>>>   g_object_set(G_OBJECT(src1),"location",argv[1], NULL);
>>>
>>>   src2 = gst_element_factory_make("filesrc", "src2");
>>>   g_object_set(G_OBJECT(src1),"location",argv[2], NULL);
>>>
>>>   GstElement *pipeline = gst_pipeline_new ("video-player");
>>>
>>>   dec1 = gst_element_factory_make("decodebin2","dec1");
>>>
>>>   dec2 = gst_element_factory_make("decodebin2","dec2");
>>>
>>>   cout << "Creando pipeline..." << endl;
>>>
>>>   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
>>>   gst_bus_add_watch (bus, bus_call, loop);
>>>   gst_object_unref (bus);
>>>
>>>   alfa1   = gst_element_factory_make ("alpha","alfa1");
>>>   smpte  = gst_element_factory_make ("smptealpha","smpte");
>>>   g_object_set(smpte,"type", transicion, NULL);
>>>   color  = gst_element_factory_make ("ffmpegcolorspace", "color");
>>>   GstElement * mixer  = gst_element_factory_make("videomixer", "mixer");
>>>
>>>   if ((!alfa1) || (!smpte) || (!color) || (!mixer))
>>>   {
>>>       g_printerr ("Alguno de los elementos del Bin no pudo ser creado.
>>> Saliendo\n");
>>>      return 0;
>>>   }
>>>
>>>
>>>    // Agrego Controlador
>>>
>>>
>>>   GstController * ctrl = gst_object_control_properties(G_OBJECT(smpte),
>>> "position",NULL);
>>>
>>>   if (ctrl == NULL)
>>>   {
>>>         GST_WARNING ("No puede controlar el elemento fuente\n");
>>>         return 1;
>>>   }
>>>
>>>   // Todo valor GValue debe inicializarse en 0
>>>    GValue val_int = { 0, };
>>>   g_value_init (&val_int, G_TYPE_INT);
>>>
>>>
>>>   // Set interpolation mode
>>>
>>>   GstInterpolationControlSource * csource =
>>> gst_interpolation_control_source_new();
>>>
>>>
>>> gst_interpolation_control_source_set_interpolation_mode(csource,GST_INTERPOLATE_LINEAR);
>>>
>>>   // Seteo primer valor
>>>    g_value_set_int(&val_int, 0);
>>>   gst_interpolation_control_source_set(csource,(0 *
>>> GST_MSECOND),&val_int);
>>>
>>>   // Seteo segundo valor
>>>   g_value_set_int (&val_int, 1);
>>>
>>> gst_interpolation_control_source_set(csource,(duracion*GST_MSECOND),&val_int);
>>>
>>>
>>>
>>>   gst_controller_set_control_source (ctrl, "position", GST_CONTROL_SOURCE
>>> (csource));
>>>
>>>   g_object_unref (csource);
>>>    g_value_unset (&val_int);
>>>
>>>
>>>   g_signal_connect (G_OBJECT (dec1), "pad-added", G_CALLBACK
>>> (on_pad_added),alfa1);
>>>   g_signal_connect (G_OBJECT (dec2), "pad-added", G_CALLBACK
>>> (on_pad_added),smpte);
>>>
>>>   queue = gst_element_factory_make("queue", "queue");
>>>   sink  = gst_element_factory_make("autovideosink", "sink");
>>>
>>>   gst_bin_add_many (GST_BIN (pipeline),src1, src2, dec1, dec2, alfa1,
>>> smpte, mixer, queue, color, sink, NULL);
>>>
>>>   gst_element_link (src1,dec1);
>>>   gst_element_link (src2,dec2);
>>>   gst_element_link (alfa1,mixer);
>>>   gst_element_link (smpte,mixer);
>>>   gst_element_link (mixer,queue);
>>>   gst_element_link (queue,sink);
>>>
>>>
>>>   /* now run */
>>>   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>>>   cout << "Playing..." << endl;
>>>   g_main_loop_run (loop);
>>>
>>>     /* also clean up */
>>>   gst_element_set_state (pipeline, GST_STATE_NULL);
>>>   gst_object_unref (GST_OBJECT (pipeline));
>>>
>>>   return 0;
>>> }
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>   2011/10/26 Rossana Guerra <guerra.rossana at gmail.com>
>>>
>>>> Where it says guint duration = 500.0 it should say guint duration = 500.
>>>> Nonetheless, the error persists.
>>>>
>>>>
>>>> 2011/10/26 Rossana Guerra <guerra.rossana at gmail.com>
>>>>
>>>>> HI Stefan, thanks for your help, I changed the variable type from
>>>>> gdouble to guint, same error.
>>>>>
>>>>> Here's the whole code example:
>>>>>
>>>>>
>>>>> #include <gst.h>
>>>>> #include <controller/gstcontroller.h>
>>>>> #include <iostream>
>>>>>
>>>>>
>>>>> using namespace std;
>>>>>
>>>>> // Error handler
>>>>> static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
>>>>> {
>>>>>     GMainLoop *loop = (GMainLoop *) data;
>>>>>
>>>>>     switch (GST_MESSAGE_TYPE (msg))
>>>>>     {
>>>>>     case GST_MESSAGE_EOS:
>>>>>         g_print ("Final de stream\n");
>>>>>         g_main_loop_quit (loop);
>>>>>         break;
>>>>>     case GST_MESSAGE_ERROR:
>>>>>     {
>>>>>         gchar *debug;
>>>>>         GError *error;
>>>>>         gst_message_parse_error (msg, &error, &debug);
>>>>>         g_free (debug);
>>>>>         g_printerr ("Error: %s\n", error->message);
>>>>>         g_error_free (error);
>>>>>         g_main_loop_quit (loop);
>>>>>         break;
>>>>>     }
>>>>>     default:
>>>>>         break;
>>>>>     }
>>>>>     return TRUE;
>>>>> }
>>>>>
>>>>> static void on_pad_added (GstElement *element, GstPad *pad, gpointer
>>>>> data)
>>>>> {
>>>>>   GstPad *sinkpad = NULL;
>>>>>   GstElement * elemento = (GstElement *) data;
>>>>>
>>>>>
>>>>>   /* Ahora linkeo el pad de comp con sink pad */
>>>>>   g_print ("Dynamic pad created, linking queue\n");
>>>>>   sinkpad = gst_element_get_static_pad (elemento, "sink");
>>>>>
>>>>>
>>>>>   gst_pad_link (pad, sinkpad);
>>>>>   gst_object_unref(sinkpad);
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>> int main(int argc, char *argv[])
>>>>> {
>>>>>
>>>>>   GMainLoop *loop = NULL;
>>>>>
>>>>>   GstElement *src1,
>>>>> *src2,*dec1,*dec2,*alfa1,*color,*smpte,*queue,*sink;
>>>>>   GstBus *bus;
>>>>>
>>>>>   guint duracion = 500.0;
>>>>>   guint transicion = 1;
>>>>>
>>>>>
>>>>>     /* init GStreamer */
>>>>>   gst_init (&argc, &argv);
>>>>>   bool iniciado = gst_controller_init (&argc, &argv);
>>>>>
>>>>>
>>>>>
>>>>>   loop = g_main_loop_new (NULL, FALSE);
>>>>>
>>>>>   /* make sure we have input */
>>>>>   if (argc != 3) {
>>>>>     g_print ("Usage: %s <filename1> <filename2>\n", argv[0]);
>>>>>     return -1;
>>>>>   }
>>>>>
>>>>>   src1 = gst_element_factory_make("filesrc", "src1");
>>>>>   g_object_set(G_OBJECT(src1),"location",argv[1], NULL);
>>>>>
>>>>>   src2 = gst_element_factory_make("filesrc", "src2");
>>>>>   g_object_set(G_OBJECT(src1),"location",argv[2], NULL);
>>>>>
>>>>>   GstElement *pipeline = gst_pipeline_new ("video-player");
>>>>>
>>>>>   dec1 = gst_element_factory_make("decodebin2","dec1");
>>>>>
>>>>>   dec2 = gst_element_factory_make("decodebin2","dec2");
>>>>>
>>>>>   cout << "Creando pipeline..." << endl;
>>>>>
>>>>>   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
>>>>>   gst_bus_add_watch (bus, bus_call, loop);
>>>>>   gst_object_unref (bus);
>>>>>
>>>>>   alfa1   = gst_element_factory_make ("alpha","alfa1");
>>>>>   smpte  = gst_element_factory_make ("smptealpha","smpte");
>>>>>   g_object_set(smpte,"type", transicion, NULL);
>>>>>   color  = gst_element_factory_make ("ffmpegcolorspace", "color");
>>>>>   GstElement * mixer  = gst_element_factory_make("videomixer",
>>>>> "mixer");
>>>>>
>>>>>   if ((!alfa1) || (!smpte) || (!color) || (!mixer))
>>>>>   {
>>>>>       g_printerr ("Alguno de los elementos del Bin no pudo ser creado.
>>>>> Saliendo\n");
>>>>>      return 0;
>>>>>   }
>>>>>
>>>>>
>>>>>   // Controller creation
>>>>>
>>>>>
>>>>>   GstController * ctrl = gst_object_control_properties(G_OBJECT(smpte),
>>>>> "position",NULL);
>>>>>
>>>>>   if (ctrl == NULL)
>>>>>   {
>>>>>         GST_WARNING ("No puede controlar el elemento fuente\n");
>>>>>         return 1;
>>>>>   }
>>>>>
>>>>>   // Todo valor GValue debe inicializarse en 0
>>>>>   GValue val_double = { 0, };
>>>>>   g_value_init (&val_double, G_TYPE_DOUBLE);
>>>>>
>>>>>    // Set interpolation mode
>>>>>
>>>>>
>>>>>   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(&val_double, 0.0);
>>>>>   gst_interpolation_control_source_set(csource,(0 *
>>>>> GST_MSECOND),&val_double);
>>>>>
>>>>>   // Seteo segundo valor
>>>>>   g_value_set_double (&val_double, 1.0);
>>>>>
>>>>> gst_interpolation_control_source_set(csource,(duracion*GST_MSECOND),&val_double);
>>>>>
>>>>>   gst_controller_set_control_source (ctrl, "position",
>>>>> GST_CONTROL_SOURCE (csource));
>>>>>
>>>>>   g_object_unref (csource);
>>>>>   g_value_unset (&val_double);
>>>>>
>>>>>    g_signal_connect (G_OBJECT (dec1), "pad-added", G_CALLBACK
>>>>> (on_pad_added),alfa1);
>>>>>   g_signal_connect (G_OBJECT (dec2), "pad-added", G_CALLBACK
>>>>> (on_pad_added),smpte);
>>>>>
>>>>>   queue = gst_element_factory_make("queue", "queue");
>>>>>   sink  = gst_element_factory_make("autovideosink", "sink");
>>>>>
>>>>>   gst_bin_add_many (GST_BIN (pipeline),src1, src2, dec1, dec2, alfa1,
>>>>> smpte, mixer, queue, color, sink, NULL);
>>>>>
>>>>>   gst_element_link (src1,dec1);
>>>>>   gst_element_link (src2,dec2);
>>>>>   gst_element_link (alfa1,mixer);
>>>>>   gst_element_link (smpte,mixer);
>>>>>   gst_element_link (mixer,queue);
>>>>>   gst_element_link (queue,sink);
>>>>>
>>>>>
>>>>>   /* now run */
>>>>>   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>>>>>   cout << "Playing..." << endl;
>>>>>   g_main_loop_run (loop);
>>>>>
>>>>>     /* also clean up */
>>>>>   gst_element_set_state (pipeline, GST_STATE_NULL);
>>>>>   gst_object_unref (GST_OBJECT (pipeline));
>>>>>
>>>>>   return 0;
>>>>>
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2011/10/26 Stefan Sauer <ensonic at hora-obscura.de>
>>>>>
>>>>>>  On 10/26/2011 03:12 AM, Rossana Guerra wrote:
>>>>>>
>>>>>> Hi I trying to control the position property of a smptealpha element. It
>>>>>> controls the opacity of the alpha channel,
>>>>>>
>>>>>>  no, position controls the transition of the fade. 0.0:input1,
>>>>>> 1.0:input2.
>>>>>>
>>>>>>   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't figure out
>>>>>> what it's wrong.
>>>>>>
>>>>>>
>>>>>>  What is not working? The code snippet looks more of less okay. Maybe
>>>>>> you can post a full standalone example.
>>>>>>
>>>>>> Stefan
>>>>>>
>>>>>>  Thanks and regards,
>>>>>>
>>>>>> Rossana
>>>>>>
>>>>>>
>>>>>> Here's the code;
>>>>>> _____________
>>>>>>
>>>>>>
>>>>>> gst_interpolation_control_source_set: assertion `G_VALUE_TYPE (value) ==
>>>>>> self->priv->type' failed
>>>>>>
>>>>>> // Agrego Controlador
>>>>>>
>>>>>>   gdouble duracion = 500;
>>>>>>
>>>>>>  guint64 duracion = 500;
>>>>>>
>>>>>>    GstController * ctrl = gst_object_control_properties(G_OBJECT(smpte),
>>>>>> "position",NULL);
>>>>>>
>>>>>>   if (ctrl == NULL)
>>>>>>   {
>>>>>>         GST_WARNING ("No puede controlar el elemento fuente\n");
>>>>>>         return 0;
>>>>>>   }
>>>>>>
>>>>>>
>>>>>>   // Todo valor GValue debe inicializarse en 0
>>>>>>   GValue val_double = { 0, };
>>>>>>   g_value_init (&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(&val_double, 0.0);
>>>>>>   gst_interpolation_control_source_set(csource,(0 *
>>>>>> GST_MSECOND),&val_double);
>>>>>>
>>>>>>   // Seteo segundo valor
>>>>>>   g_value_set_double (&val_double, 1.0);
>>>>>>
>>>>>> gst_interpolation_control_source_set(csource,(duracion*GST_MSECOND),&val_double);
>>>>>>
>>>>>>   gst_controller_set_control_source (ctrl, "position", GST_CONTROL_SOURCE
>>>>>> (csource));
>>>>>>
>>>>>>   g_object_unref (csource);
>>>>>>   g_value_unset (&val_double);
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> gstreamer-devel mailing listgstreamer-devel at lists.freedesktop.orghttp://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> gstreamer-devel mailing list
>>>>>> gstreamer-devel at lists.freedesktop.org
>>>>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>> _______________________________________________
>> gstreamer-devel mailing listgstreamer-devel at lists.freedesktop.orghttp://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>>
>>
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>>
>
> _______________________________________________
> gstreamer-devel mailing listgstreamer-devel at lists.freedesktop.orghttp://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20111028/191646ba/attachment.html>


More information about the gstreamer-devel mailing list