Confused about GST_PAD_SET_PROXY_CAPS and negotiation

Guillaume POIRIER poirierg at gmail.com
Fri Jan 23 08:46:41 PST 2015


Hello everyone,

First of all, thanks for this great piece of software!

I'm trying to implement a video filter in GStreamer that would take
RGB as input (sink) and would output ARGB64 (src).
I naively thought that since my src and sink only support a fixed
format, I didn't need to perform any negotiation... is that right?

Since my code didn't do what I wanted, I tried to add negotiation by
calling gst_event_new_caps() + gst_pad_send_event() on my sink and src
pads... but this didn't seem to work (gst_pad_send_event() returned
FALSE each time). How come? Who should have handled these events? Not
me I presume?

Then, just calling GST_PAD_SET_PROXY_CAPS() on each of my pads did
allow me to get a pipeline that seemed to have negotiated a format,
... but the verbose output of gst-launch-1.0 does not show that my src
pad has been seen as ARGB64. When I look at the documentation of
GST_PAD_SET_PROXY_CAPS() states 'Set this if the element always
outputs data in the exact same format as it receives as input."

My question is: what is the simplest way to have a filter take fixed
format in input, what do I need to do negotiation-wise (if any)?

Here is my pipeline:
gst-launch-1.0 --gst-debug=3 -vv
--gst-plugin-path=/local/poirierg/gst-template/gst-plugin/src/my_build/
filesrc location=/local/poirierg/mpc_spaceship.png ! pngdec !
videoconvert ! myfilter ! videoconvert ! imagefreeze ! autovideosink


I hope you guys can help me, be it by a simple RTFM with the right
page pointed to :-)

Regards,

Guillaume


More information about the gstreamer-devel mailing list