summaryrefslogtreecommitdiff
path: root/src/audio_dec/xine_lpcm_decoder.c
diff options
context:
space:
mode:
authorDarren Salt <linux@youmustbejoking.demon.co.uk>2008-03-29 14:04:36 +0000
committerDarren Salt <linux@youmustbejoking.demon.co.uk>2008-03-29 14:04:36 +0000
commit7b644dec0138210a5a21e0de086cff9d816439c9 (patch)
treeaca3bb5e465787b2163ffe73ca8cb109abba61c0 /src/audio_dec/xine_lpcm_decoder.c
parent427bd5660454820ab4de3c569b1f4727977c23ef (diff)
parentfce031eb887d7bb72acde81396f84b384aefd765 (diff)
downloadxine-lib-7b644dec0138210a5a21e0de086cff9d816439c9.tar.gz
xine-lib-7b644dec0138210a5a21e0de086cff9d816439c9.tar.bz2
Merge from 1.1.
--HG-- rename : src/libxineadec/xine_lpcm_decoder.c => src/audio_dec/xine_lpcm_decoder.c
Diffstat (limited to 'src/audio_dec/xine_lpcm_decoder.c')
-rw-r--r--src/audio_dec/xine_lpcm_decoder.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/audio_dec/xine_lpcm_decoder.c b/src/audio_dec/xine_lpcm_decoder.c
index e84b112f4..83043cec9 100644
--- a/src/audio_dec/xine_lpcm_decoder.c
+++ b/src/audio_dec/xine_lpcm_decoder.c
@@ -192,18 +192,34 @@ static void lpcm_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) {
uint8_t *d = (uint8_t *)audio_buffer->mem;
int n = buf->size;
- while (n >= 0) {
+ while (n >= 3) {
if ( stream_be ) {
- *d++ = s[0];
- *d++ = s[1];
+ if ( stream_be == this->cpu_be ) {
+ *d++ = s[0];
+ *d++ = s[1];
+ } else {
+ *d++ = s[1];
+ *d++ = s[0];
+ }
} else {
- *d++ = s[1];
- *d++ = s[2];
+ if ( stream_be == this->cpu_be ) {
+ *d++ = s[1];
+ *d++ = s[2];
+ }
+ else
+ {
+ *d++ = s[2];
+ *d++ = s[1];
+ }
}
s += 3;
n -= 3;
}
+
+ if ( (d - (uint8_t*)audio_buffer->mem)/2*3 < buf->size )
+ xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "lpcm_decoder: lost %i bytes\n", (int)(buf->size - (d - (uint8_t*)audio_buffer->mem))/2*3);
+
} else {
memcpy (audio_buffer->mem, sample_buffer, buf->size);
}