summaryrefslogtreecommitdiff
path: root/psdl.c
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2009-07-07 00:44:09 +0200
committerGravatar waker <wakeroid@gmail.com>2009-07-07 00:44:09 +0200
commit70679eb6465814b368eb1ec91c6b450f324512b5 (patch)
treeb5e18a2c1d850a4886dc91241f2fc2d728a548d8 /psdl.c
parenta6aabe9020889e508fff49666cfc1c8506fcfe45 (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.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/psdl.c b/psdl.c
index 9e4388f5..127b981a 100644
--- a/psdl.c
+++ b/psdl.c
@@ -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;