diff options
author | Aoi Shinkai <shinkoi2005@gmail.com> | 2010-01-10 00:36:02 +0900 |
---|---|---|
committer | Aoi Shinkai <shinkoi2005@gmail.com> | 2010-01-10 00:36:02 +0900 |
commit | 1aa9a2e68b20f0f929f02bcae3a15e74c768079b (patch) | |
tree | ab7cd6ef7c96bf382380e37f8e4264aa02647bbd | |
parent | f4dbf0e8545c541966feabc366d231e985a9e59a (diff) | |
download | xine-lib-1aa9a2e68b20f0f929f02bcae3a15e74c768079b.tar.gz xine-lib-1aa9a2e68b20f0f929f02bcae3a15e74c768079b.tar.bz2 |
Fix LPCM 24bit byte stream
I have LCPM 24bit DVD.
When I played it on xine, sound was noisy noise. I found that LCPM 24bit
byte stream is _not_ the same as WAVE 24bit byte stream.
-rw-r--r-- | src/libxineadec/xine_lpcm_decoder.c | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/src/libxineadec/xine_lpcm_decoder.c b/src/libxineadec/xine_lpcm_decoder.c index 630d5a120..7438e26e6 100644 --- a/src/libxineadec/xine_lpcm_decoder.c +++ b/src/libxineadec/xine_lpcm_decoder.c @@ -269,29 +269,33 @@ 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 >= 3) { + while (n >= 12) { if ( stream_be ) { - if ( stream_be == this->cpu_be ) { - *d++ = s[0]; - *d++ = s[1]; - } else { - *d++ = s[1]; - *d++ = s[0]; - } + if ( stream_be == this->cpu_be ) { + *d++ = s[0]; + *d++ = s[1]; + *d++ = s[2]; + *d++ = s[3]; + *d++ = s[4]; + *d++ = s[5]; + *d++ = s[6]; + *d++ = s[7]; + } else { + *d++ = s[1]; + *d++ = s[0]; + *d++ = s[3]; + *d++ = s[2]; + *d++ = s[5]; + *d++ = s[4]; + *d++ = s[7]; + *d++ = s[6]; + } } else { - if ( stream_be == this->cpu_be ) { - *d++ = s[1]; - *d++ = s[2]; - } - else - { - *d++ = s[2]; - *d++ = s[1]; - } + xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, "lpcm_decoder: I don't know what should decode lpcm 24bit little endian byte stream"); } - s += 3; - n -= 3; + s += 12; + n -= 12; } if ( (d - (uint8_t*)audio_buffer->mem)/2*3 < buf_size ) |