[FFmpeg-devel] [PATCH] libavdevice: JACK demuxer

Olivier Guilyardi list
Fri Feb 27 21:26:40 CET 2009

M?ns Rullg?rd wrote:
> Olivier Guilyardi <list at samalyse.com> writes:
>> The jack process callback, which runs in the JACK realtime thread,
>> reads audio from JACK. It then places this data into a ringbuffer,
>> for the audio_read_packet() callback to fetch it, and return it in a
>> AVPacket. It the ringbuffer is empty at this point,
>> audio_read_packet() sleeps a period, tries again, etc.... It times
>> out after 2 seconds.
> As I said, bad design.  The proper solution is to use a condition
> variable.

It is not just "bad design". In realtime there is a *lot* of traditional IPC
mechanisms, and other system calls (malloc, etc..) that you just can't use,
because they might block, and crash everything.

So, when I work in the process callback, I adopt a conservative
no-mutex-no-semaphore-no-pthread-things-etc approach. However, I've read that a
few of these are realtime safe.

I need to check whether pthread_cond_signal() is realtime safe or not. I'm gonna
ask on jack-devel.

Btw, what's wrong with sleeping? If Jack is still running, it is very likely to
sleep only once before some data gets available.


More information about the ffmpeg-devel mailing list