Invalid property's type for a controller at runtime: `G_VALUE_TYPE (value) == self->priv->type' failed
Rossana Guerra
guerra.rossana at gmail.com
Wed Oct 26 12:41:18 PDT 2011
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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20111026/83ef9f03/attachment.htm>
More information about the gstreamer-devel
mailing list