diff options
author | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2008-03-29 14:04:36 +0000 |
---|---|---|
committer | Darren Salt <linux@youmustbejoking.demon.co.uk> | 2008-03-29 14:04:36 +0000 |
commit | 7b644dec0138210a5a21e0de086cff9d816439c9 (patch) | |
tree | aca3bb5e465787b2163ffe73ca8cb109abba61c0 /src/audio_dec/xine_lpcm_decoder.c | |
parent | 427bd5660454820ab4de3c569b1f4727977c23ef (diff) | |
parent | fce031eb887d7bb72acde81396f84b384aefd765 (diff) | |
download | xine-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.c | 26 |
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); } |