diff libfaad2/output.c @ 10989:3185f64f6350

synced with current cvs
author alex
date Fri, 03 Oct 2003 22:23:26 +0000
parents e989150f8216
children 4a370c80fe5c
line wrap: on
line diff
--- a/libfaad2/output.c	Fri Oct 03 18:13:45 2003 +0000
+++ b/libfaad2/output.c	Fri Oct 03 22:23:26 2003 +0000
@@ -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 @@
         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 @@
         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 @@
         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 @@
         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 @@
         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 @@
         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 @@
         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);