fixed stereo IMA4 decoding

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@3764 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
melanson 2001-12-26 13:22:03 +00:00
parent 44256cf24a
commit de19e1eb66
1 changed files with 8 additions and 13 deletions

21
adpcm.c
View File

@ -77,11 +77,9 @@ int ima_adpcm_decode_block(unsigned short *output, unsigned char *input,
int initial_predictor_r = 0;
int initial_index_l = 0;
int initial_index_r = 0;
int stream_ptr = 0;
int i;
initial_predictor_l = BE_16(&input[stream_ptr]);
stream_ptr += 2;
initial_predictor_l = BE_16(&input[0]);
initial_index_l = initial_predictor_l;
// mask, sign-extend, and clamp the predictor portion
@ -96,8 +94,7 @@ int ima_adpcm_decode_block(unsigned short *output, unsigned char *input,
// handle stereo
if (channels > 1)
{
initial_predictor_r = BE_16(&input[stream_ptr]);
stream_ptr += 2;
initial_predictor_r = BE_16(&input[IMA_ADPCM_BLOCK_SIZE]);
initial_index_r = initial_predictor_r;
// mask, sign-extend, and clamp the predictor portion
@ -114,18 +111,16 @@ int ima_adpcm_decode_block(unsigned short *output, unsigned char *input,
if (channels == 1)
for (i = 0; i < IMA_ADPCM_SAMPLES_PER_BLOCK / 2; i++)
{
output[i * 2 + 0] = input[stream_ptr] & 0x0F;
output[i * 2 + 1] = input[stream_ptr] >> 4;
stream_ptr++;
output[i * 2 + 0] = input[2 + i] & 0x0F;
output[i * 2 + 1] = input[2 + i] >> 4;
}
else
for (i = 0; i < IMA_ADPCM_SAMPLES_PER_BLOCK / 2 * 2; i++)
{
output[i * 4 + 0] = input[stream_ptr] & 0x0F;
output[i * 4 + 1] = input[stream_ptr + 1] & 0x0F;
output[i * 4 + 2] = input[stream_ptr] >> 4;
output[i * 4 + 3] = input[stream_ptr + 1] >> 4;
stream_ptr++;
output[i * 4 + 0] = input[2 + i] & 0x0F;
output[i * 4 + 1] = input[2 + IMA_ADPCM_BLOCK_SIZE + i] & 0x0F;
output[i * 4 + 2] = input[2 + i] >> 4;
output[i * 4 + 3] = input[2 + IMA_ADPCM_BLOCK_SIZE + i] >> 4;
}
ima_dvi_decode_nibbles(output, channels,