diff options
author | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-10-03 22:23:26 +0000 |
---|---|---|
committer | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-10-03 22:23:26 +0000 |
commit | e24087509a752d8f4dcc679b304fc1745ff768b0 (patch) | |
tree | 60bbaca1e13f268df83d5d88c1daa49debacc541 /libfaad2/output.c | |
parent | 22c9bcf82417c33258c74104704f196f6672f696 (diff) | |
download | mpv-e24087509a752d8f4dcc679b304fc1745ff768b0.tar.bz2 mpv-e24087509a752d8f4dcc679b304fc1745ff768b0.tar.xz |
synced with current cvs
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@10990 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libfaad2/output.c')
-rw-r--r-- | libfaad2/output.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/libfaad2/output.c b/libfaad2/output.c index c7841f91ab..9baf62bd6c 100644 --- a/libfaad2/output.c +++ b/libfaad2/output.c @@ -50,7 +50,7 @@ dither_t Dither; double doubletmp; -#define DM_MUL (1./(1.+sqrt(2.))) +#define DM_MUL ((real_t)1.0/((real_t)1.0+(real_t)sqrt(2.0))) static INLINE real_t get_sample(real_t **input, uint8_t channel, uint16_t sample, uint8_t downMatrix, uint8_t *internal_channel) @@ -60,12 +60,12 @@ static INLINE real_t get_sample(real_t **input, uint8_t channel, uint16_t sample if (channel == 0) { return DM_MUL * (input[internal_channel[1]][sample] + - input[internal_channel[0]][sample]/sqrt(2.) + - input[internal_channel[3]][sample]/sqrt(2.)); + input[internal_channel[0]][sample]/(real_t)sqrt(2.) + + input[internal_channel[3]][sample]/(real_t)sqrt(2.)); } else { return DM_MUL * (input[internal_channel[2]][sample] + - input[internal_channel[0]][sample]/sqrt(2.) + - input[internal_channel[4]][sample]/sqrt(2.)); + input[internal_channel[0]][sample]/(real_t)sqrt(2.) + + input[internal_channel[4]][sample]/(real_t)sqrt(2.)); } } else { return input[internal_channel[channel]][sample]; @@ -107,7 +107,8 @@ void* output_to_PCM(faacDecHandle hDecoder, case FAAD_FMT_16BIT_DITHER: for(i = 0; i < frame_len; i++, j++) { - real_t inp = input[internal_channel][i]; + //real_t inp = input[internal_channel][i]; + real_t inp = get_sample(input, ch, i, hDecoder->downMatrix, hDecoder->internal_channel); double Sum = inp * 65535.f; int64_t val; if(j > 31) @@ -125,7 +126,8 @@ void* output_to_PCM(faacDecHandle hDecoder, case FAAD_FMT_16BIT_H_SHAPE: for(i = 0; i < frame_len; i++, j++) { - real_t inp = input[internal_channel][i]; + //real_t inp = input[internal_channel][i]; + real_t inp = get_sample(input, ch, i, hDecoder->downMatrix, hDecoder->internal_channel); double Sum = inp * 65535.f; int64_t val; if(j > 31) @@ -141,7 +143,8 @@ void* output_to_PCM(faacDecHandle hDecoder, case FAAD_FMT_24BIT: for(i = 0; i < frame_len; i++) { - real_t inp = input[internal_channel][i]; + //real_t inp = input[internal_channel][i]; + real_t inp = get_sample(input, ch, i, hDecoder->downMatrix, hDecoder->internal_channel); if (inp > (1<<15)-1) inp = (1<<15)-1; else if (inp < -(1<<15)) @@ -152,7 +155,8 @@ void* output_to_PCM(faacDecHandle hDecoder, case FAAD_FMT_32BIT: for(i = 0; i < frame_len; i++) { - real_t inp = input[internal_channel][i]; + //real_t inp = input[internal_channel][i]; + real_t inp = get_sample(input, ch, i, hDecoder->downMatrix, hDecoder->internal_channel); if (inp > (1<<15)-1) inp = (1<<15)-1; else if (inp < -(1<<15)) @@ -163,14 +167,16 @@ void* output_to_PCM(faacDecHandle hDecoder, case FAAD_FMT_FLOAT: for(i = 0; i < frame_len; i++) { - real_t inp = input[internal_channel][i]; + //real_t inp = input[internal_channel][i]; + real_t inp = get_sample(input, ch, i, hDecoder->downMatrix, hDecoder->internal_channel); float_sample_buffer[(i*channels)+ch] = inp*FLOAT_SCALE; } break; case FAAD_FMT_DOUBLE: for(i = 0; i < frame_len; i++) { - real_t inp = input[internal_channel][i]; + //real_t inp = input[internal_channel][i]; + real_t inp = get_sample(input, ch, i, hDecoder->downMatrix, hDecoder->internal_channel); double_sample_buffer[(i*channels)+ch] = (double)inp*FLOAT_SCALE; } break; @@ -191,13 +197,13 @@ static int64_t dither_output(uint8_t dithering, uint8_t shapingtype, uint16_t i, if(!shapingtype) { double tmp = Random_Equi(Dither.Dither); - Sum2 = tmp - Dither.LastRandomNumber[k]; - Dither.LastRandomNumber[k] = tmp; + Sum2 = tmp - (double)Dither.LastRandomNumber[k]; + Dither.LastRandomNumber[k] = (int32_t)tmp; Sum2 = Sum += Sum2; val = ROUND64(Sum2)&Dither.Mask; } else { Sum2 = Random_Triangular(Dither.Dither) - scalar16(Dither.DitherHistory[k], Dither.FilterCoeff + i); - Sum += Dither.DitherHistory[k][(-1-i)&15] = Sum2; + Sum += Dither.DitherHistory[k][(-1-i)&15] = (float32_t)Sum2; Sum2 = Sum + scalar16(Dither.ErrorHistory[k], Dither.FilterCoeff + i ); val = ROUND64(Sum2)&Dither.Mask; Dither.ErrorHistory[k][(-1-i)&15] = (float)(Sum - val); |