summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Belokurov <kirill.belokurov@gmail.com>2008-03-27 17:29:00 +0200
committerKirill Belokurov <kirill.belokurov@gmail.com>2008-03-27 17:29:00 +0200
commit8fd1e52ecdd12b6e8b6ad920e47702201aeafb4b (patch)
tree6e91c601b0b8c54ab1a0bb8f0a76760648e898ba
parentaba07be1265b56cc777c17e09cccebe1121ef697 (diff)
downloadxine-lib-8fd1e52ecdd12b6e8b6ad920e47702201aeafb4b.tar.gz
xine-lib-8fd1e52ecdd12b6e8b6ad920e47702201aeafb4b.tar.bz2
take into account CPU endianness when converting 24bit=>16bit samples
-rw-r--r--src/libxineadec/xine_lpcm_decoder.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/libxineadec/xine_lpcm_decoder.c b/src/libxineadec/xine_lpcm_decoder.c
index 8d8f23a05..9587da6e8 100644
--- a/src/libxineadec/xine_lpcm_decoder.c
+++ b/src/libxineadec/xine_lpcm_decoder.c
@@ -189,11 +189,23 @@ static void lpcm_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) {
while (n >= 0) {
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;