[gst-devel] Jack plug-in.

Andy Wingo wingo at pobox.com
Wed Jun 30 02:23:09 CEST 2004


I wanted to answer questions about the current state of the jack
elements, hopefully for the last time ;)

Jack is a synchronous architecture. Writing a proper jack app means
putting your app under the control of the jack server. What that means
specifically is that jack should tell your pipeline to "iterate" (in gst
terminology), instead of the app telling the pipeline to iterate.

This is not the traditional way to write audio applications on unix.
Most apps expect to have some sort of blocking read/write architecture.
Gstreamer can be used either way, but most apps assume that the sink
will handle the timekeeping for the pipeline, instead of the pipeline
being handled by an external timekeeper.

The jack elements now implement this kind of synchronous framework. I
haven't used them for a while. I do plan on getting back to them
sometime, but don't wait for me -- hack it up yourself if you want it.

Back to your question. Most people want to magically choose something in
some gconf key and expect to get jack input/output working.
Unfortunately, this is not possible right now, because you'd have to put
the whole app under a jackbin. However, it's not an unreasonable thing
to ask, provided you're willing to cope with possibly higher latencies.
Either write gstreamer elements for libjackasyn, or create an element
like {jackbin queue ! audioconvert ! jacksink}. libjackasyn is probably
better, because it does the deinterleaving/intfloat conversion for you

Conclusion: somebody needs to write that code. It should be really damn
easy: libjackoss.h has an identical API as OSS. I ain't gonna do it,
Andy Wingo <wingo at pobox.com>

More information about the gstreamer-devel mailing list