diff options
author | waker <wakeroid@gmail.com> | 2009-07-06 03:01:41 +0200 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2009-07-06 03:01:41 +0200 |
commit | d05d431ebad5767f3afa9b6c76639e83233e2d9c (patch) | |
tree | 0ab32f81a39f5ce3fab292892aee97ee1f85e6c5 /psdl.c | |
parent | b7a872069ad3990b65d8ebe6d53de8768841980f (diff) |
fixed inter-thread conflict for codec access
Diffstat (limited to 'psdl.c')
-rw-r--r-- | psdl.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -139,7 +139,9 @@ psdl_callback (void* userdata, Uint8 *stream, int len) { memset (stream, 0, len); } else if (codec->info.samplesPerSecond == sdl_player_freq) { + codec_lock (); codecret = codec->read (stream, len); + codec_unlock (); } else { int nsamples = len/4; @@ -147,6 +149,7 @@ psdl_callback (void* userdata, Uint8 *stream, int len) { // add 5 extra samples for SRC nsamples = nsamples * codec->info.samplesPerSecond / sdl_player_freq + 5; // read data at source samplerate (with some room for SRC) + codec_lock (); codecret = codec->read (sdl_buffer, (nsamples - codecleft) * 2 * codec->info.channels); // convert to float, and apply soft volume int i; @@ -178,6 +181,7 @@ psdl_callback (void* userdata, Uint8 *stream, int len) { codecleft = nsamples - srcdata.input_frames_used; // copy spare samples for next update memmove (sdl_fbuffer, &sdl_fbuffer[srcdata.input_frames_used*2], codecleft * 8); + codec_unlock (); } sdl_eof = codecret == -1 ? 1 : 0; } |