GNOME Bugzilla – Bug 311004
ghostpad bugginess
Last modified: 2005-08-03 17:19:57 UTC
Run gst-launch-0.9 videotestsrc ! gconfvideosink with the two attached patches applied (they make gconfvideosink use autovideosink). W/o the patches (which makes it use xvimagesink), or with autovideosink instead of gconfvideosink in the pipeline, it works fine, so it's some ghostpad recursiveness bug, it seems.
Created attachment 49461 [details] [review] patch for gst-plugins-base
Created attachment 49462 [details] [review] patch for gst-plugins
Backtrace:
+ Trace 61883
Thread 1078440192 (LWP 20329)
[..] (gdb) print bsink $1 = (GstBaseSink *) 0x0 (gdb) The pad appears to be the pad of the old fakesink in the autovideosink... Somehow the relinking doesn't relinking the actual pad, but only the ghostpad, of the sink element's peer.
I applied those patches and built, and it works for me. Can you verify this one again?
You may have values in your gconf. If so, it'll use those, so make sure (using gconf-editor) that those keys either don't exist or that they contain auto*sink, also.
OK can reproduce. What's happening is like this: +-----------------+ +----------------------------------+ | +-----+ +----+ +-------------------------+ | | |src | |sin1| +----+ | | | +-----+ +----+ |sin2| +---------------+| | | | | +----+ +----+ || | | | | | |sin3| || | | | | | +----+ || | | | | | +---------------+| | | | | +-------------------------+ | +-----------------+ +----------------------------------+ sin1 is the gconfvideosink's ghost pad, targeting sin2, the autovideosink's ghost pad, and sin2 targets whatever's inside it (sin3). But because these elements have fakesinks in NULL and then real sinks in READY, and they remove their ghost pads whenever the inside element changes, sin1 is left pointing at an old sin2, which was removed when xvimagesink was added to the autovideosink. Trying to think up a solution, probably involves unsetting the target property when a ghost pad's internal pad is unlinked. Something like that.
Or more succinctly, that you did gst_ghost_pad_new("sin1", sin2old) when making sin1, but sin2 changed since then. Hm. In light of this interpretation, what would you expect to happen, Ronald?
gst_pad_unlink(src,sinany); should work, or it should be possible to re-assign a ghostpad to a new target so I do not need to relink. The second is probably nicer.
Works now with some new API.