Mercurial > sdl-ios-xcode
comparison src/audio/SDL_audio.c @ 2664:344c8da164f4 gsoc2008_audio_resampling
Added streamer code. I haven't yet incorporated it into SDL_RunAudio() though.
author | Aaron Wishnick <schnarf@gmail.com> |
---|---|
date | Tue, 12 Aug 2008 00:50:58 +0000 |
parents | aedfcdeb69b6 |
children | f39a056aec8b |
comparison
equal
deleted
inserted
replaced
2663:0caed045d01b | 2664:344c8da164f4 |
---|---|
254 FILL_STUB(UnlockDevice); | 254 FILL_STUB(UnlockDevice); |
255 FILL_STUB(Deinitialize); | 255 FILL_STUB(Deinitialize); |
256 #undef FILL_STUB | 256 #undef FILL_STUB |
257 } | 257 } |
258 | 258 |
259 /* Streaming functions (for when the input and output buffer sizes are different) */ | |
260 /* Write [length] bytes from buf into the streamer */ | |
261 void SDL_StreamWrite(SDL_AudioStreamer * stream, Uint8 * buf, int length) { | |
262 int i; | |
263 | |
264 for(i = 0; i < length; ++i) { | |
265 stream->buffer[stream->write_pos] = buf[i]; | |
266 ++stream->write_pos; | |
267 } | |
268 } | |
269 | |
270 /* Read [length] bytes out of the streamer into buf */ | |
271 void SDL_StreamRead(SDL_AudioStreamer * stream, Uint8 * buf, int length) { | |
272 int i; | |
273 | |
274 for(i = 0; i < length; ++i) { | |
275 buf[i] = stream->buffer[stream->read_pos]; | |
276 ++stream->read_pos; | |
277 } | |
278 } | |
279 | |
280 int SDL_StreamLength(SDL_AudioStreamer * stream) { | |
281 return (stream->write_pos - stream->read_pos) % stream->max_len; | |
282 } | |
283 | |
284 /* Initialize the stream by allocating the buffer and setting the read/write heads to the beginning */ | |
285 int SDL_StreamInit(SDL_AudioStreamer * stream, int max_len) { | |
286 int i; | |
287 | |
288 /* First try to allocate the buffer */ | |
289 stream->buffer = (Uint8 *)malloc(max_len); | |
290 if(stream->buffer == NULL) { | |
291 return -1; | |
292 } | |
293 | |
294 stream->max_len = max_len; | |
295 stream->read_pos = 0; | |
296 stream->write_pos = 0; | |
297 | |
298 /* Zero out the buffer */ | |
299 for(i = 0; i < max_len; ++i) { | |
300 stream->buffer[i] = 0; | |
301 } | |
302 } | |
303 | |
304 /* Deinitialize the stream simply by freeing the buffer */ | |
305 void SDL_StreamDeinit(SDL_AudioStreamer * stream) { | |
306 if(stream->buffer != NULL) { | |
307 free(stream->buffer); | |
308 } | |
309 } | |
310 | |
259 | 311 |
260 /* The general mixing thread function */ | 312 /* The general mixing thread function */ |
261 int SDLCALL | 313 int SDLCALL |
262 SDL_RunAudio(void *devicep) | 314 SDL_RunAudio(void *devicep) |
263 { | 315 { |