Re: gstreamer-devel Digest, Vol 9, Issue 90

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: gstreamer-devel Digest, Vol 9, Issue 90

Marketing & Communication Fluendo
About the GStreamer Conference - Prague, 2011:
Time Shifting with GStreamer
released by Fluendo available at https://core.fluendo.com/gstreamer/trac/browser/trunk/gst-fluendo-timeshift

Cheers,
Fluendo Marcom Team
FLUENDO Influencing the Multimedia World

San Francisco, USA & Barcelona, SPAIN
Contact phone:
Spain:  +34 933 175 153
United States: +1 415 773 5353

www.fluendo.com

P
lease consider the environment before printing this e-mail.


On Mon, Oct 31, 2011 at 6:05 PM, <[hidden email]> wrote:
Send gstreamer-devel mailing list submissions to
       [hidden email]

To subscribe or unsubscribe via the World Wide Web, visit
       http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
or, via email, send a message with subject or body 'help' to
       [hidden email]

You can reach the person managing the list at
       [hidden email]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of gstreamer-devel digest..."


Today's Topics:

  1. Re: Changing source without stopping pipeline (Stefan Sauer)
  2. Second pre-release of GStreamer FFmpeg plugin (Edward Hervey)
  3. Conference notes, slides (Josh Doe)
  4. Re: Conference notes, slides (Victor Manuel J?quez Leal)
  5. Re: Conference notes, slides (Nicolas Dufresne)
  6. Re: Get v4l2src width and height before pipeline runs?
     (Kapil Agrawal)
  7. Re: Invalid property's type for a controller at runtime:
     `G_VALUE_TYPE (value) == self->priv->type' failed (Rossana Guerra)


----------------------------------------------------------------------

Message: 1
Date: Mon, 31 Oct 2011 11:24:59 +0100
From: Stefan Sauer <[hidden email]>
Subject: Re: Changing source without stopping pipeline
To: [hidden email]
Message-ID: <[hidden email]>
Content-Type: text/plain; charset=ISO-8859-1

On 10/30/2011 03:40 AM, superlou wrote:
> I have a simplified test pipeline consisting of:
> v4l2src -> ffmpegcolorspace --> videoscale --> ximagesink
>
> I would like to detect a loss of signal from the v4lsrc (currently doing by
> waiting for the EOS signal, though the v42lsrc provides better warnings on
> camera disconnection if I can figure out how to get them).  For now, I'm
> trying to achieve the simpler case of simply switching the source element to
> a videotestsrc while the pipeline is playing.
>
> I've read the information about pad blocking
> (http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-block.txt),
> but it doesn't provide any indication on what to do for changing the source
> element.  I read that it may be possible to simply unlink the v4l2src,
> remove it, add the videotestsrc, and link it.  This sort of works in that
> eventually you see the videotestsrc, but it updates the output every few
> seconds (like a very slow stuttering).  If I stop and play, the output is
> smooth.
You might want to use "videotestsrc ! capsfilter" and set the format
that you use on v4l2src to videotestsrc.

Stefan
> I was wondering if anyone could point me towards an example or help me find
> the search terms to find the proper way to change out the source element on
> a playing pipeline.
>
> Thanks,
> Louis
>
> --
> View this message in context: http://gstreamer-devel.966125.n4.nabble.com/Changing-source-without-stopping-pipeline-tp3952239p3952239.html
> Sent from the GStreamer-devel mailing list archive at Nabble.com.
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel



------------------------------

Message: 2
Date: Mon, 31 Oct 2011 12:03:54 +0100
From: Edward Hervey <[hidden email]>
Subject: Second pre-release of GStreamer FFmpeg plugin
To: "[hidden email]"
       <[hidden email]>
Message-ID: <1320059034.15507.3.camel@deumeu>
Content-Type: text/plain; charset="us-ascii"

Hi all,

 Mea culpa for saying the release would be done during the gst conf,
too much time was taken up on other items.

 More patches needed to go in, so here's a new pre-release. This time
the window will be much smaller. Unless something critical comes up,
expect release on Wednesday 2nd November.

http://gstreamer.freedesktop.org/src/gst-ffmpeg/pre/gst-ffmpeg-0.10.12.3.tar.bz2 http://gstreamer.freedesktop.org/src/gst-ffmpeg/pre/gst-ffmpeg-0.10.12.3.tar.gz

Bugs fixed:
 * 654037 - gst-ffmpeg enables GPL parts in ffmpeg/libav
 * 661417 - G722 encoder is broken

     Edward



------------------------------

Message: 3
Date: Mon, 31 Oct 2011 09:26:11 -0400
From: Josh Doe <[hidden email]>
Subject: Conference notes, slides
To: Discussion of the development of and with GStreamer
       <[hidden email]>
Message-ID:
       <CAJnipd7QXAbo4fANcPYKwVb4q6Pg=YRk96xCmD1ubn=[hidden email]>
Content-Type: text/plain; charset=ISO-8859-1

I'm kind of surprised there's been no mention of the conference on
this list; I was hoping to go, but was unable to in the end, however I
am very interested in the talks that were given.

I've found hardly anything online, and certainly no slides yet. I know
from Christian's post that Ubicast should have videos online within a
month:
http://blogs.gnome.org/uraeus/2011/10/29/back-from-gstreamer-conference-in-prague/

Aside from a few tweets that didn't contain much information, I found
some demo videos from Guillame Emont's stabilisation talk:
http://emont.org/stabilisation-demo/

And Fluendo's press release on the Time Shifting talk:
http://www.fluendo.com/press/fluendo-gstreamer-time-shifting-element/

Any more? Perhaps we can compile these links and others in a page like
http://gstreamer.freedesktop.org/wiki/GStreamerConference2010

-Josh


------------------------------

Message: 4
Date: Mon, 31 Oct 2011 15:19:57 +0100
From: Victor Manuel J?quez Leal <[hidden email]>
Subject: Re: Conference notes, slides
To: Discussion of the development of and with GStreamer
       <[hidden email]>
Message-ID:
       <CAG6h3__==[hidden email]>
Content-Type: text/plain; charset=ISO-8859-1

On Mon, Oct 31, 2011 at 2:26 PM, Josh Doe <[hidden email]> wrote:
> I'm kind of surprised there's been no mention of the conference on
> this list; I was hoping to go, but was unable to in the end, however I
> am very interested in the talks that were given.

Mine are here

https://gitorious.org/vjaquez-misc/syslink-talk/trees/master

But perhaps I should put the PDF in a simple HTTP server

vmjl

>
> I've found hardly anything online, and certainly no slides yet. I know
> from Christian's post that Ubicast should have videos online within a
> month:
> http://blogs.gnome.org/uraeus/2011/10/29/back-from-gstreamer-conference-in-prague/
>
> Aside from a few tweets that didn't contain much information, I found
> some demo videos from Guillame Emont's stabilisation talk:
> http://emont.org/stabilisation-demo/
>
> And Fluendo's press release on the Time Shifting talk:
> http://www.fluendo.com/press/fluendo-gstreamer-time-shifting-element/
>
> Any more? Perhaps we can compile these links and others in a page like
> http://gstreamer.freedesktop.org/wiki/GStreamerConference2010
>
> -Josh
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>


------------------------------

Message: 5
Date: Mon, 31 Oct 2011 10:46:29 -0400
From: Nicolas Dufresne <[hidden email]>
Subject: Re: Conference notes, slides
To: Discussion of the development of and with GStreamer
       <[hidden email]>
Message-ID: <1320072389.4543.6.camel@macbookpro>
Content-Type: text/plain; charset="utf-8"

There is couple of video here
http://gstconf.ubicast.tv/channels/#conferences2010

enjoy,
Nicolas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20111031/3ff188aa/attachment-0001.htm>

------------------------------

Message: 6
Date: Mon, 31 Oct 2011 22:30:38 +0530
From: Kapil Agrawal <[hidden email]>
Subject: Re: Get v4l2src width and height before pipeline runs?
To: Discussion of the development of and with GStreamer
       <[hidden email]>
Message-ID:
       <[hidden email]>
Content-Type: text/plain; charset="iso-8859-1"

Just a thought, may not be realted to this specific issue of yours
Writing your own gstreamer plugin to do image processing stuff would make
it more cleaner and better.

like v4l2src ! ffmpegcolorspace ! your_image_processing_plugin !
xvimagesink ?

Best
- Kapil

On Sat, Oct 29, 2011 at 2:23 AM, wally_bkg <[hidden email]> wrote:

>
> Edward Hervey wrote:
> >
> >   Why aren't you using the v4l2src/v4l2sink elements ? If you have
> > issues with them, please explain it in detail and/or file a bug report.
> >
>
> I have vrl2src elements at the start of my pipeline that ends with an
> appsink, this worked fine with fixed video frame sizes, but now that I've
> removed that restriction in the image processing algorithm the question is
> how do I get the frame size from v4l2 without setting the pipeline to
> playing?
>
> I've had lots of issues with the gstreamer v4l2src tuner interface and
> never
> could get it to reliably set the norm and select the input across the
> various v4l2 capture devices on hand.  As to bug reports, the answer was
> always to try a newer version, but when I tried the Ubuntu 10.04 gstreamer
> PPA it broke all things multimedia and wasted a fair amount of time
> recovering.  At that point it became easier to just use v4l2 calls to set
> the norm and select the input, then build the pipeline.
>
> Grossly simplified my code is
>
> V4l2src->ffmpegcolorspace->fixed caps filter->appsink
> duplicate the appsink buffer data
> do some image processing on the duplicated buffer data
> appsrc->xvimagesink (for realtime viewing, of the processed data)
> appsrc->mp4 encoding->filesink ( original data to allow non-realtime
> processing afterwards)
>
> Works quite well with fixed caps.  I'm stuck on how to get the frame height
> and width without fixed caps before the pipeline runs.   I have to build a
> bunch of tables that depend on the frame size and takes a couple of seconds
> to do (perhaps not the most efficient recursive code, but it only runs
> once).
>
> I could work around this by pre-building tables of the possibilities
> (640x480, 704x480, & 720x480 so far, depending on the capture device, fixed
> caps was just set to 640x480) but the real issue is I'd like the v4l2
> timestamps from the driver to use to synchronize A/D data from another
> process running on the same machine.  I asked about this earlier but got no
> response:
>
>
> http://gstreamer-devel.966125.n4.nabble.com/Getting-V4l2-timestamps-from-v4l2src-td3915764.html
>
> Dealing with various frame sizes is at this point only needed to test my
> changes (which I quickly did by changing the fixed caps  to match the
> different capture card possibilities) in anticipation of someday using HD
> video.  The timestamps to synchronize the A/D data with the video is an
> action item.
>
>
>
> --
> View this message in context:
> http://gstreamer-devel.966125.n4.nabble.com/Get-v4l2src-width-and-height-before-pipeline-runs-tp3942212p3949188.html
> Sent from the GStreamer-devel mailing list archive at Nabble.com.
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>



--
http://www.linkedin.com/in/kapilagrawal
www.mediamagictechnologies.com
(Consultancy - Multimedia, Gstreamer, ffmpeg, Streaming for platforms-
linux, windows, TI, android)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20111031/3e014580/attachment-0001.htm>

------------------------------

Message: 7
Date: Mon, 31 Oct 2011 15:05:29 -0200
From: Rossana Guerra <[hidden email]>
Subject: Re: Invalid property's type for a controller at runtime:
       `G_VALUE_TYPE (value) == self->priv->type' failed
To: Discussion of the development of and with GStreamer
       <[hidden email]>
Message-ID:
       <[hidden email]>
Content-Type: text/plain; charset="utf-8"

thanks for response, it helps me a lot. In fact I need audio as well, I'll
work around it, at least with one file.
Regards,

Rossana


2011/10/31 Stefan Sauer <[hidden email]>

> **
> On 10/30/2011 02:15 AM, Rossana Guerra wrote:
>
> Hi Stefan, I saw and run the code. I noticed the differences, mostly in
> the "on-pad-added" function.
> You create a fakesink where the "flow" doesn't come from video, then you
> create a bin from the parent element and got the static pad from it for
> linking. I didn't get the meaning of this technique.
>
>
> There where two distinct bugs. The first was to use src1 twice for the
> pad-aaded callback if I recall right. The 2nd is that in the pad-addded
> callback you get pads for audio and video. You want to terminate the
> audio-pads with a fakesink and only connect the video-pads to videomixer.
> If you want the adio too, you'll need to use a similar setup like
> videomixer, but using adder.
>
> You will still need to ensure that both video-outputs are in a compatible
> format for videomxer. I did not had time to analyze further. Use the
> GST_DEBUG_BIN_TO_DOT_FILE to understand whats in the resulting pipeline and
> where it goes wrong.
>
> Stefan
>
>
> I have an "internal data flow error" message. Here's the output when I run
> with debug option as you pointed out.
>
> Debug information:
>
> rossana@Studio:~/CodeBlocks/ctrl/bin/Debug$ GST_DEBUG="*:2" ./ctrl
> "/home/rossana/video1.avi" "/home/rossana/video2.avi"
> Inicio...
> Creando...
> Creando pipeline...
> Creando 1...
> Playing...
> Dynamic pad created: video/x-raw-rgb
> ... linking video
> Dynamic pad created: audio/x-raw-int
> ... dropping audio
> 0:00:00.064628890  4083      0x157f070
> WARN  basetransform
> gstbasetransform.c:1211:gst_base_transform_setcaps:<alfa1> transform could
> not transform video/x-raw-yuv, width=(int)720,
> height=(int)528, framerate=(fraction)25/1, format=(fourcc)I420,
> interlaced=(boolean)false, pixel-aspect-ratio=(fraction)1/1 in anything we
> support
> Dynamic pad created: video/x-raw-rgb
> ... linking video
> Dynamic pad created: audio/x-raw-int
> ... dropping audio
> 0:00:00.076359290  4083      0x1545b80
> WARN  ffmpeg gstffmpegdec.c:2241:gst_ffmpegdec_frame:<ffdec_mpeg40>
> ffdec_mpeg4: decoding error (len: -1, have_data: 0)
>
>
> I am trying to play 2 .avi files, I have no problem to visualize them with
> Banshee or any other player, so I think I got the right codecs in my
> computer.
> Both videos have the same properties values:
>
> *Video:
>
> Dimension 720x528
> Codec DivX MPEG-4 Version 5
> 25 fps
> bit rate: N/A
>
> * Sound:
> Codec MPEG1 Audio, layer
> Channels Stereo
> Frec 44100Hz
> bit rate 127 kpbs
>
> I'll keep trying, and thanks for your suggestions. Nice weekend.
>
> Rossana
>
>
>
> 2011/10/28 Rossana Guerra <[hidden email]>
>
>> Hi Stefan, I didn't receive the email, I even looked into the spam
>> folder, just in case....
>>
>>  2011/10/28 Stefan Sauer <[hidden email]>
>>
>>>  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 <[hidden email]>
>>>
>>>>  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 <[hidden email]>
>>>>
>>>>> 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 <[hidden email]>
>>>>>
>>>>>> Where it says guint duration = 500.0 it should say guint duration =
>>>>>> 500. Nonetheless, the error persists.
>>>>>>
>>>>>>
>>>>>> 2011/10/26 Rossana Guerra <[hidden email]>
>>>>>>
>>>>>>> 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 <[hidden email]>
>>>>>>>
>>>>>>>>  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 [hidden email]://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> gstreamer-devel mailing list
>>>>>>>> [hidden email]
>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> gstreamer-devel mailing [hidden email]://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> gstreamer-devel mailing list
>>>> [hidden email]
>>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>>
>>>>
>>>
>>> _______________________________________________
>>> gstreamer-devel mailing [hidden email]://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>
>>>
>>>
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> [hidden email]
>>> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>>>
>>>
>>
>
> _______________________________________________
> gstreamer-devel mailing [hidden email]://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
>
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20111031/350c2653/attachment.htm>

------------------------------

_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


End of gstreamer-devel Digest, Vol 9, Issue 90
**********************************************


_______________________________________________
gstreamer-devel mailing list
[hidden email]
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel