[gst-devel] problem for replacing an element in a built pipeline

Matthieu LAURENT matthieu.laurent at purplelabs.com
Mon Feb 26 19:28:44 CET 2007

I have a problem for replacing an element in a built pipeline.

I have coded a program that build the following pipe:
filesrc | ffdemux | queue | fakesink
and once it is done I want to change fakesink by another sink that we
would call fakesink_2

the steps of my process are:

add filesrc to pipeline
add ffdemux to pipeline
link filesrc | ffdemux
set state READY
set state PAUSED

by making this, the callback that I have plugged is called on the
creation of source pad of ffdemux

The process of this callback is:
add queue to pipeline
link ffdemux | queue
add fakesink to pipeline
link queue | fakesink
set state PAUSED (in order that my 2 new elements (queue,fakesink) are
in the right state (PAUSED))

when my 4 elements filesrc | ffdemux | queue | fakesink  (+ the pipe
line) are in the state PAUSED,
I want to change element fakesink by fakesink_2

So I make a
set state READY (this will remove the pad of ffmpeg if I understand well)
set state PAUSED

this time in the callback for pad creation of ffdemux, the process is:
unlink fakesink
remove fakesink from pipe
get queue from pipeline (thanks to gst_bin_get_by_name)
link ffdemux | queue
add fakesink_2 to pipeline
link queue | fakesink_2
set state PAUSED

that is were an error occurs:
WARNING gst_base_sink_chain (gstbasesink.c l. 2012): Push on pad
videosink:sink, but it was not activated in push mode

Even if fakesink_2 is a sink that do something or is a real fakesink, I
have the same problem.

Could you tell me what I do not the good way?
How to replace an element?



More information about the gstreamer-devel mailing list