diff options
author | waker <wakeroid@gmail.com> | 2009-07-07 00:44:09 +0200 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2009-07-07 00:44:09 +0200 |
commit | 70679eb6465814b368eb1ec91c6b450f324512b5 (patch) | |
tree | b5e18a2c1d850a4886dc91241f2fc2d728a548d8 /psdl.c | |
parent | a6aabe9020889e508fff49666cfc1c8506fcfe45 (diff) |
added vorbis seeking
fixed 44100 mono playback
fix volume control for streams that don't use SRC
Diffstat (limited to 'psdl.c')
-rw-r--r-- | psdl.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -139,9 +139,27 @@ 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 (); + int ivolume = sdl_volume * 1000; + int i; + if (codec->info.channels == 2) { + codec_lock (); + codecret = codec->read (stream, len); + for (i = 0; i < len/2; i++) { + int16_t sample = (int16_t)(((int32_t)(((int16_t*)stream)[i])) * ivolume / 1000); + ((int16_t*)stream)[i] = sample; + } + codec_unlock (); + } + else { + codec_lock (); + codecret = codec->read (sdl_buffer, len/2); + for (i = 0; i < len/4; i++) { + int16_t sample = (int16_t)(((int32_t)(((int16_t*)sdl_buffer)[i])) * ivolume / 1000); + ((int16_t*)stream)[i*2+0] = sample; + ((int16_t*)stream)[i*2+1] = sample; + } + codec_unlock (); + } } else { int nsamples = len/4; |