[SDL] Loading data as background process
stephane.marchesin at wanadoo.fr
Mon May 31 15:17:54 PDT 2004
David Olofson wrote:
>>probably have to implement a separate thread for Ogg music
>>streaming as well though.
>That won't be much of a problem, I think, as the decoding doesn't have
>anything to do with SDL directly. I'd suggest using a lock-free FIFO
>or buffer ring between the decoder thread and the audio callback.
Here's my 2 cents worth of music streaming with SDL :
I have done mp3 music streaming for a game. Contrary to all sane advice,
I do decoding directly inside the callback function :)
I use an optimized mmx mp3 decoder (mpglib, to which I backported mmx
optimizations from mpg123) and a 4096 samples buffer (this is with 44Khz
16 bit stereo sound, I found 4096 was the minimum on windows to avoid
sound skips with that quality, whatever I do). I know that's quite
unreasonable but it happens to works fine on windows and linux.
The trick in all this is that the mp3 decoding time is not that big if
you compare it to the time it takes to do a memory copy in the threaded
decoding approach. In fact, a big part of the computation time is spent
waiting for cache misses in both cases. It'll probably work with ogg
too, although I couldn't find any ogg decoder that I could drop in in my
code that was as easy to integrate as mpglib (I wanted to integrate it
in my code to be able to add in my optimizations).
More information about the SDL