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

Stefan Sauer ensonic at hora-obscura.de
Fri Oct 28 04:36:36 PDT 2011


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?

Stefan

> Regards and thanks
>
>
> 2011/10/27 Stefan Sauer <ensonic at hora-obscura.de
> <mailto: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
>>     <mailto: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
>>         <mailto: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
>>             <mailto: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
>>                 <mailto: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 list
>>>                     gstreamer-devel at lists.freedesktop.org <mailto:gstreamer-devel at lists.freedesktop.org>
>>>                     http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>>
>>                     _______________________________________________
>>                     gstreamer-devel mailing list
>>                     gstreamer-devel at lists.freedesktop.org
>>                     <mailto:gstreamer-devel at lists.freedesktop.org>
>>                     http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>
>>
>>
>>
>>
>>
>>     _______________________________________________
>>     gstreamer-devel mailing list
>>     gstreamer-devel at lists.freedesktop.org <mailto:gstreamer-devel at lists.freedesktop.org>
>>     http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
>     _______________________________________________
>     gstreamer-devel mailing list
>     gstreamer-devel at lists.freedesktop.org
>     <mailto:gstreamer-devel at lists.freedesktop.org>
>     http://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/2c2c8208/attachment-0001.htm>


More information about the gstreamer-devel mailing list