From 0e8f2339d8361bb82085e0cfcecb80911505ac58 Mon Sep 17 00:00:00 2001 From: Themaister Date: Wed, 14 Dec 2011 00:25:04 +0100 Subject: [PATCH] Might work better ... --- xenon/xenon360_audio.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/xenon/xenon360_audio.c b/xenon/xenon360_audio.c index 7ebb7bdbc9..19f72b2676 100644 --- a/xenon/xenon360_audio.c +++ b/xenon/xenon360_audio.c @@ -23,6 +23,7 @@ #include #define SOUND_FREQUENCY 48000 +#define MAX_BUFFER 2048 typedef struct { @@ -55,12 +56,12 @@ static ssize_t xenon360_write(void *data, const void *buf, size_t size) size_t written = 0; const uint32_t *in_buf = buf; - for (unsigned i = 0; i < (size >> 2); i++) + for (size_t i = 0; i < (size >> 2); i++) xa->buffer[i] = bswap_32(in_buf[i]); if (!xa->nonblock) { - while (xenon_sound_get_free() < size) + while (xenon_sound_get_unplayed() >= MAX_BUFFER) { // libxenon doesn't have proper synchronization primitives for this :( udelay(50); @@ -71,8 +72,11 @@ static ssize_t xenon360_write(void *data, const void *buf, size_t size) } else { - if (xenon_sound_get_free() >= size) + if (xenon_sound_get_unplayed() < MAX_BUFFER) + { xenon_sound_submit(xa->buffer, size); + written = size; + } } return written;