Index: mppenc/branches/r2d/libmpcpsy/ans.c
===================================================================
--- mppenc/branches/r2d/libmpcpsy/ans.c	(revision 59)
+++ mppenc/branches/r2d/libmpcpsy/ans.c	(revision 60)
@@ -28,5 +28,8 @@
  */
 
-#include "mppenc.h"
+#include "libmpcpsy.h"
+
+#include <math.h>
+#include <string.h>
 
 
@@ -34,13 +37,4 @@
 static float  Cos_Tab    [16] [MAX_NS_ORDER + 1];
 static float  Sin_Tab    [16] [MAX_NS_ORDER + 1];
-unsigned int  NS_Order;                         // Maximum order for ANS
-unsigned int  NS_Order_L [32];
-unsigned int  NS_Order_R [32];                  // frame-wise order of the Noiseshaping (0: off, 1...5: on)
-float         FIR_L      [32] [MAX_NS_ORDER];
-float         FIR_R      [32] [MAX_NS_ORDER];   // contains FIR-Filter for NoiseShaping
-float         ANSspec_L  [MAX_ANS_LINES];
-float         ANSspec_R  [MAX_ANS_LINES];       // L/R-masking thresholds for ANS
-float         ANSspec_M  [MAX_ANS_LINES];
-float         ANSspec_S  [MAX_ANS_LINES];       // M/S-masking thresholds for ANS
 
 
@@ -184,5 +178,4 @@
     const float*  tmp;
 
-    ENTER(235);
     for ( Band = 0; Band <= MaxBand  &&  maxANSOrder[Band]; Band++ ) {
 
@@ -275,5 +268,4 @@
     }
 
-    LEAVE(235);
     return;
 }
@@ -282,22 +274,21 @@
 // perform ANS-analysis (calculation of FIR-filter and gain)
 void
-NS_Analyse ( const int             MaxBand,
+NS_Analyse ( PsyModel* m,
+			 const int             MaxBand,
              const unsigned char*  MSflag,
              const SMRTyp          smr,
              const int*            Transient )
 {
-    ENTER(10);
 
     // for L or M, respectively
-    memset ( FIR_L,      0, sizeof FIR_L      );         // reset FIR
-    memset ( NS_Order_L, 0, sizeof NS_Order_L );         // reset Flags
-    FindOptimalANS ( MaxBand, MSflag, ANSspec_L, ANSspec_M, NS_Order_L, SNR_comp_L, FIR_L, smr.L, smr.M, SCF_Index_L, Transient );
+    memset ( m->FIR_L,      0, sizeof m->FIR_L      );         // reset FIR
+    memset ( m->NS_Order_L, 0, sizeof m->NS_Order_L );         // reset Flags
+	FindOptimalANS ( MaxBand, MSflag, m->ANSspec_L, m->ANSspec_M, m->NS_Order_L, m->SNR_comp_L, m->FIR_L, smr.L, smr.M, m->SCF_Index_L, Transient );
 
     // for R or S, respectively
-    memset ( FIR_R,      0, sizeof FIR_R      );         // reset FIR
-    memset ( NS_Order_R, 0, sizeof NS_Order_R );         // reset Flags
-    FindOptimalANS ( MaxBand, MSflag, ANSspec_R, ANSspec_S, NS_Order_R, SNR_comp_R, FIR_R, smr.R, smr.S, SCF_Index_R, Transient );
-
-    LEAVE(10);
+	memset ( m->FIR_R,      0, sizeof m->FIR_R      );         // reset FIR
+	memset ( m->NS_Order_R, 0, sizeof m->NS_Order_R );         // reset Flags
+	FindOptimalANS ( MaxBand, MSflag, m->ANSspec_R, m->ANSspec_S, m->NS_Order_R, m->SNR_comp_R, m->FIR_R, smr.R, smr.S, m->SCF_Index_R, Transient );
+
     return;
 }
Index: mppenc/branches/r2d/libmpcpsy/cvd.c
===================================================================
--- mppenc/branches/r2d/libmpcpsy/cvd.c	(revision 59)
+++ mppenc/branches/r2d/libmpcpsy/cvd.c	(revision 60)
@@ -18,5 +18,9 @@
  */
 
-#include "mppenc.h"
+#include "libmpcpsy.h"
+
+#include <math.h>
+#include <string.h>
+
 
 /* C O N S T A N T S */
@@ -72,5 +76,6 @@
 // Analyze the Cepstrum, search for the basic harmonic
 static void
-CEP_Analyse2048 ( float* res1,
+CEP_Analyse2048 ( PsyModel* m,
+				  float* res1,
                   float* res2,
                   float* qual1,
@@ -163,5 +168,5 @@
         *res1 = line_sum / sum;
 
-    if ( CVD_used < 2 )
+    if ( m->CVD_used < 2 )
         return;
 
@@ -231,5 +236,5 @@
 // output: Array *vocal contains information if the FFT-Line is a harmonic component
 int
-CVD2048 ( const float* spec, int* vocal )
+CVD2048 ( PsyModel* m, const float* spec, int* vocal )
 {
     static float  cep [4096];     // cep[4096] -- array, which is also used for the 2048 FFT
@@ -241,5 +246,4 @@
     int           n;
 
-    ENTER(20);
     // Calculating logarithmated, windowed spectrum cep[]
     // cep[512...1024] = 0 -- cep[1025...2047] doesn't matter, because the first have to be filled by fft
@@ -255,13 +259,11 @@
 
     // search the harmonic
-    CEP_Analyse2048 ( &res1, &res2, &qual1, &qual2, cep );
+	CEP_Analyse2048 ( m, &res1, &res2, &qual1, &qual2, cep );
 //#include "cvd.h"
     if ( res1 > 0.f  ||  res2 > 0.f ) {
         if ( res1 > 0. ) SetVoiceLines ( vocal, res1, 100 );
         if ( res2 > 0. ) SetVoiceLines ( vocal, res2,  20 );
-        LEAVE(20);
         return 1;
     }
-    LEAVE(20);
     return 0;
 }
Index: mppenc/branches/r2d/libmpcpsy/fastmath.c
===================================================================
--- mppenc/branches/r2d/libmpcpsy/fastmath.c	(revision 59)
+++ mppenc/branches/r2d/libmpcpsy/fastmath.c	(revision 60)
@@ -17,6 +17,4 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
-
-#include "mppenc.h"
 
 #ifdef FAST_MATH
Index: mppenc/branches/r2d/libmpcpsy/fastmath.h
===================================================================
--- mppenc/branches/r2d/libmpcpsy/fastmath.h	(revision 59)
+++ mppenc/branches/r2d/libmpcpsy/fastmath.h	(revision 60)
@@ -17,4 +17,45 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+
+
+// fast but maybe more inaccurate, use if you need speed
+#if defined(__GNUC__) && !defined(__APPLE__)
+#  define SIN(x)      sinf ((float)(x))
+#  define COS(x)      cosf ((float)(x))
+#  define ATAN2(x,y)  atan2f ((float)(x), (float)(y))
+#  define SQRT(x)     sqrtf ((float)(x))
+#  define LOG(x)      logf ((float)(x))
+#  define LOG10(x)    log10f ((float)(x))
+#  define POW(x,y)    expf (logf(x) * (y))
+#  define POW10(x)    expf (M_LN10 * (x))
+#  define FLOOR(x)    floorf ((float)(x))
+#  define IFLOOR(x)   (int) floorf ((float)(x))
+#  define FABS(x)     fabsf ((float)(x))
+#else
+# define SIN(x)      (float) sin (x)
+# define COS(x)      (float) cos (x)
+# define ATAN2(x,y)  (float) atan2 (x, y)
+# define SQRT(x)     (float) sqrt (x)
+# define LOG(x)      (float) log (x)
+# define LOG10(x)    (float) log10 (x)
+# define POW(x,y)    (float) pow (x,y)
+# define POW10(x)    (float) pow (10., (x))
+# define FLOOR(x)    (float) floor (x)
+# define IFLOOR(x)   (int)   floor (x)
+# define FABS(x)     (float) fabs (x)
+#endif
+
+#define SQRTF(x)      SQRT (x)
+#ifdef FAST_MATH
+# define TABSTEP      64
+# define COSF(x)      my_cos ((float)(x))
+# define ATAN2F(x,y)  my_atan2 ((float)(x), (float)(y))
+# define IFLOORF(x)   my_ifloor ((float)(x))
+#else
+# undef  TABSTEP
+# define COSF(x)      COS (x)
+# define ATAN2F(x,y)  ATAN2 (x,y)
+# define IFLOORF(x)   IFLOOR (x)
+#endif
 
 #if 1
Index: mppenc/branches/r2d/libmpcpsy/fft4g.c
===================================================================
--- mppenc/branches/r2d/libmpcpsy/fft4g.c	(revision 59)
+++ mppenc/branches/r2d/libmpcpsy/fft4g.c	(revision 60)
@@ -18,5 +18,5 @@
  */
 
-#include "mppenc.h"
+#include "libmpcpsy.h"
 
 /* F U N C T I O N S */
@@ -57,5 +57,4 @@
     float  xi;
 
-    ENTER(30);
     if ( n > 4) {
         bitrv2  ( n, ip + 2, a );
@@ -69,5 +68,4 @@
     a[0] += a[1];
     a[1]  = xi;
-    LEAVE(30);
     return;
 }
@@ -84,5 +82,4 @@
     double  delta;
 
-    ENTER(31);
     ip[0] = nw;
     ip[1] = 1;
@@ -106,5 +103,4 @@
         }
     }
-    LEAVE(31);
     return;
 }
@@ -118,5 +114,4 @@
     double  delta;
 
-    ENTER(32);
     ip[1] = nc;
     if ( nc > 1 ) {
@@ -130,5 +125,4 @@
         }
     }
-    LEAVE(32);
     return;
 }
@@ -142,5 +136,4 @@
     float  xr, xi, yr, yi;
 
-    ENTER(33);
     ip[0] = 0;
     l     = n;
@@ -235,5 +228,4 @@
         }
     }
-    LEAVE(33);
     return;
 }
@@ -246,5 +238,4 @@
     float  x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
 
-    ENTER(34);
     l = 2;
     if ( n > 8 ) {
@@ -291,5 +282,4 @@
         } while ( j += 2, j < l );
     }
-    LEAVE(34);
     return;
 }
@@ -303,5 +293,4 @@
     float  x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
 
-    ENTER(35);
     x0r   = a[ 0] + a[ 2];
     x0i   = a[ 1] + a[ 3];
@@ -401,10 +390,9 @@
         a[j + 15] = wk3r * x0i + wk3i * x0r;
     } while ( j += 16, j < n );
-    LEAVE(35);
-    return;
-}
-
-extern void Cdecl cftmdl_3DNow_1 ( const int n, const int l, float* a, float* w );
-extern void Cdecl cftmdl_3DNow_2 ( const int n, const int l, float* a, float* w );
+    return;
+}
+
+// extern void Cdecl cftmdl_3DNow_1 ( const int n, const int l, float* a, float* w );
+// extern void Cdecl cftmdl_3DNow_2 ( const int n, const int l, float* a, float* w );
 
 
@@ -416,5 +404,4 @@
     float  x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
 
-    ENTER(36);
     m = l << 2;
 
@@ -467,7 +454,5 @@
         a[j3 + 1] = wk1r * (x0i + x0r);
     }
-    LEAVE(36);
-
-    ENTER(39);
+
     k1 = 0;
     m2 = 2 * m;
@@ -542,97 +527,92 @@
         } while ( j += 2, j < l+k+m );
     }
-    LEAVE(39);
-    return;
-}
-
-
-static void
-cftmdl_3DNow ( const int n, const int l, float* a, float* w )
-{
-    int    j, j1, j2, j3, k, k1, m, m2;
-    float  wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;
-    float  x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
-
-    ENTER(36);
-    cftmdl_3DNow_1 (n,l,a,w);
-    LEAVE(36);
-
-    ENTER(39);
-    m  = l << 2;
-    k1 = 0;
-    m2 = 2 * m;
-    for ( k = m2; k < n; k += m2 ) {
-        k1  += 2;
-        wk2r = w[k1];
-        wk2i = w[k1 + 1];
-        wk1r = w[2*k1];
-        wk1i = w[2*k1 + 1];
-        wk3r = wk1r - 2 * wk2i * wk1i;
-        wk3i = 2 * wk2i * wk1r - wk1i;
-        j    = k;
-        do {
-            j1        = j  + l;
-            j2        = j1 + l;
-            j3        = j2 + l;
-            x0r       = a[j]      + a[j1];
-            x0i       = a[j + 1]  + a[j1 + 1];
-            x1r       = a[j]      - a[j1];
-            x1i       = a[j + 1]  - a[j1 + 1];
-            x2r       = a[j2]     + a[j3];
-            x2i       = a[j2 + 1] + a[j3 + 1];
-            x3r       = a[j2]     - a[j3];
-            x3i       = a[j2 + 1] - a[j3 + 1];
-            a[j]      = x0r + x2r;
-            a[j + 1]  = x0i + x2i;
-            x0r      -= x2r;
-            x0i      -= x2i;
-            a[j2]     = wk2r * x0r - wk2i * x0i;
-            a[j2 + 1] = wk2r * x0i + wk2i * x0r;
-            x0r       = x1r - x3i;
-            x0i       = x1i + x3r;
-            a[j1]     = wk1r * x0r - wk1i * x0i;
-            a[j1 + 1] = wk1r * x0i + wk1i * x0r;
-            x0r       = x1r + x3i;
-            x0i       = x1i - x3r;
-            a[j3]     = wk3r * x0r - wk3i * x0i;
-            a[j3 + 1] = wk3r * x0i + wk3i * x0r;
-        } while ( j += 2, j < l + k );
-
-        wk1r = w[2*k1 + 2];
-        wk1i = w[2*k1 + 3];
-        wk3r = wk1r - 2 * wk2r * wk1i;
-        wk3i = 2 * wk2r * wk1r - wk1i;
-        j    = k + m;
-        do {
-            j1        = j + l;
-            j2        = j1 + l;
-            j3        = j2 + l;
-            x0r       = a[j]      + a[j1];
-            x0i       = a[j + 1]  + a[j1 + 1];
-            x1r       = a[j]      - a[j1];
-            x1i       = a[j + 1]  - a[j1 + 1];
-            x2r       = a[j2]     + a[j3];
-            x2i       = a[j2 + 1] + a[j3 + 1];
-            x3r       = a[j2]     - a[j3];
-            x3i       = a[j2 + 1] - a[j3 + 1];
-            a[j]      = x0r + x2r;
-            a[j + 1]  = x0i + x2i;
-            x0r      -= x2r;
-            x0i      -= x2i;
-            a[j2]     = -wk2i * x0r - wk2r * x0i;
-            a[j2 + 1] = -wk2i * x0i + wk2r * x0r;
-            x0r       = x1r - x3i;
-            x0i       = x1i + x3r;
-            a[j1]     = wk1r * x0r - wk1i * x0i;
-            a[j1 + 1] = wk1r * x0i + wk1i * x0r;
-            x0r       = x1r + x3i;
-            x0i       = x1i - x3r;
-            a[j3]     = wk3r * x0r - wk3i * x0i;
-            a[j3 + 1] = wk3r * x0i + wk3i * x0r;
-        } while ( j += 2, j < l+k+m );
-    }
-    LEAVE(39);
-    return;
-}
+    return;
+}
+
+
+// static void
+// cftmdl_3DNow ( const int n, const int l, float* a, float* w )
+// {
+//     int    j, j1, j2, j3, k, k1, m, m2;
+//     float  wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;
+//     float  x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
+//
+//     cftmdl_3DNow_1 (n,l,a,w);
+//
+//     m  = l << 2;
+//     k1 = 0;
+//     m2 = 2 * m;
+//     for ( k = m2; k < n; k += m2 ) {
+//         k1  += 2;
+//         wk2r = w[k1];
+//         wk2i = w[k1 + 1];
+//         wk1r = w[2*k1];
+//         wk1i = w[2*k1 + 1];
+//         wk3r = wk1r - 2 * wk2i * wk1i;
+//         wk3i = 2 * wk2i * wk1r - wk1i;
+//         j    = k;
+//         do {
+//             j1        = j  + l;
+//             j2        = j1 + l;
+//             j3        = j2 + l;
+//             x0r       = a[j]      + a[j1];
+//             x0i       = a[j + 1]  + a[j1 + 1];
+//             x1r       = a[j]      - a[j1];
+//             x1i       = a[j + 1]  - a[j1 + 1];
+//             x2r       = a[j2]     + a[j3];
+//             x2i       = a[j2 + 1] + a[j3 + 1];
+//             x3r       = a[j2]     - a[j3];
+//             x3i       = a[j2 + 1] - a[j3 + 1];
+//             a[j]      = x0r + x2r;
+//             a[j + 1]  = x0i + x2i;
+//             x0r      -= x2r;
+//             x0i      -= x2i;
+//             a[j2]     = wk2r * x0r - wk2i * x0i;
+//             a[j2 + 1] = wk2r * x0i + wk2i * x0r;
+//             x0r       = x1r - x3i;
+//             x0i       = x1i + x3r;
+//             a[j1]     = wk1r * x0r - wk1i * x0i;
+//             a[j1 + 1] = wk1r * x0i + wk1i * x0r;
+//             x0r       = x1r + x3i;
+//             x0i       = x1i - x3r;
+//             a[j3]     = wk3r * x0r - wk3i * x0i;
+//             a[j3 + 1] = wk3r * x0i + wk3i * x0r;
+//         } while ( j += 2, j < l + k );
+//
+//         wk1r = w[2*k1 + 2];
+//         wk1i = w[2*k1 + 3];
+//         wk3r = wk1r - 2 * wk2r * wk1i;
+//         wk3i = 2 * wk2r * wk1r - wk1i;
+//         j    = k + m;
+//         do {
+//             j1        = j + l;
+//             j2        = j1 + l;
+//             j3        = j2 + l;
+//             x0r       = a[j]      + a[j1];
+//             x0i       = a[j + 1]  + a[j1 + 1];
+//             x1r       = a[j]      - a[j1];
+//             x1i       = a[j + 1]  - a[j1 + 1];
+//             x2r       = a[j2]     + a[j3];
+//             x2i       = a[j2 + 1] + a[j3 + 1];
+//             x3r       = a[j2]     - a[j3];
+//             x3i       = a[j2 + 1] - a[j3 + 1];
+//             a[j]      = x0r + x2r;
+//             a[j + 1]  = x0i + x2i;
+//             x0r      -= x2r;
+//             x0i      -= x2i;
+//             a[j2]     = -wk2i * x0r - wk2r * x0i;
+//             a[j2 + 1] = -wk2i * x0i + wk2r * x0r;
+//             x0r       = x1r - x3i;
+//             x0i       = x1i + x3r;
+//             a[j1]     = wk1r * x0r - wk1i * x0i;
+//             a[j1 + 1] = wk1r * x0i + wk1i * x0r;
+//             x0r       = x1r + x3i;
+//             x0i       = x1i - x3r;
+//             a[j3]     = wk3r * x0r - wk3i * x0i;
+//             a[j3 + 1] = wk3r * x0i + wk3i * x0r;
+//         } while ( j += 2, j < l+k+m );
+//     }
+//     return;
+// }
 
 
@@ -643,5 +623,4 @@
     float  wkr, wki, xr, xi, yr, yi;
 
-    ENTER(37);
     m  = n >> 1;
     ks = 2 * nc / m;
@@ -664,5 +643,4 @@
         kk       += ks;
     } while ( j += 2, j < m );
-    LEAVE(37);
     return;
 }
Index: mppenc/branches/r2d/libmpcpsy/fft_routines.c
===================================================================
--- mppenc/branches/r2d/libmpcpsy/fft_routines.c	(revision 59)
+++ mppenc/branches/r2d/libmpcpsy/fft_routines.c	(revision 60)
@@ -18,5 +18,8 @@
  */
 
-#include "mppenc.h"
+#include "libmpcpsy.h"
+
+#include <math.h>
+#include <string.h>
 
 #define CX0     -1.
@@ -196,5 +199,4 @@
     int           i;
 
-    ENTER(40);
     // windowing
     i = 256;
@@ -212,5 +214,4 @@
         aix += 2;
     }
-    LEAVE(40);
 }
 
@@ -224,5 +225,4 @@
     int           i;
 
-    ENTER(41);
     i = 1024;                   // windowing
     while (i--)
@@ -246,5 +246,4 @@
         aix += 2;
     }
-    LEAVE(41);
 }
 
@@ -258,5 +257,4 @@
     int           i;
 
-    ENTER(42);
     // windowing (only 1600 samples available -> centered in 2048!)
     memset ( a     , 0, 224*sizeof(*a) );
@@ -275,5 +273,4 @@
         aix += 2;
     }
-    LEAVE(42);
 }
 
@@ -289,5 +286,4 @@
     int           i;
 
-    ENTER(43);
     i = 1024;                   // windowing
     while (i--)
@@ -304,5 +300,4 @@
         aix += 2;
     }
-    LEAVE(43);
 }
 
@@ -316,5 +311,4 @@
     int     i;
 
-    ENTER(44);
     // generate real, even spectrum (symmetric around 1024, cep[2048-i] = cep[i])
     for ( i = 0; i < 1024; i++ )
@@ -334,4 +328,3 @@
         bix += 2;
     }
-    LEAVE(44);
-}
+}
Index: mppenc/branches/r2d/libmpcpsy/libmpcpsy.h
===================================================================
--- mppenc/branches/r2d/libmpcpsy/libmpcpsy.h	(revision 60)
+++ mppenc/branches/r2d/libmpcpsy/libmpcpsy.h	(revision 60)
@@ -0,0 +1,164 @@
+/*
+ * Musepack audio compression
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+// psy_tab.h
+#define PART_LONG          57                   // number of partitions for long
+#define PART_SHORT     (PART_LONG / 3)          // number of partitions for short
+#define MAX_SPL            20                   // maximum assumed Sound Pressure Level
+
+// psy.c
+#define SHORTFFT_OFFSET   168                   // fft-offset for short FFT's
+#define PREFAC_LONG        10                   // preecho-factor for long partitions
+
+
+#define MAX_CVD_LINE      300                   // maximum FFT-Index for CVD
+#define CVD_UNPRED          0.040f              // unpredictability (cw) for CVD-detected bins, e33 (04)
+#define MIN_ANALYZED_IDX   12                   // maximum base-frequency = 44100/MIN_ANALYZED_IDX ^^^^^^
+#define MED_ANALYZED_IDX   50                   // maximum base-frequency = 44100/MED_ANALYZED_IDX ^^^^^^
+#define MAX_ANALYZED_IDX  900                   // minimum base-frequency = 44100/MAX_ANALYZED_IDX  (816 for Amnesia)
+
+
+#define MAX_NS_ORDER        6                   // maximum order of the Adaptive Noise Shaping Filter (IIR)
+#define MAX_ANS_BANDS      16
+#define MAX_ANS_LINES    (32 * MAX_ANS_BANDS)   // maximum number of noiseshaped FFT-lines
+///////// 16 * MAX_ANS_BANDS not sufficient? //////////////////
+#define MS2SPAT1             0.5f
+#define MS2SPAT2             0.25f
+#define MS2SPAT3             0.125f
+#define MS2SPAT4             0.0625f
+
+// common ?
+#ifndef M_PI
+# define M_PI            3.1415926535897932384626433832795029     // 4*atan(1)
+# define M_PIl           3.1415926535897932384626433832795029L
+# define M_LN2           0.6931471805599453094172321214581766     // ln(2)
+# define M_LN2l          0.6931471805599453094172321214581766L
+# define M_LN10          2.3025850929940456840179914546843642     // ln 10 */
+# define M_LN10l         2.3025850929940456840179914546843642L
+#endif
+
+// mppenc.h
+#define CENTER            448                   // offset for centering current data in Main-array
+#define BLOCK            1152                   // blocksize
+#define ANABUFFER    (BLOCK + CENTER)           // size of PCM-data array for analysis
+
+
+#define KBD1	2.
+#define KBD2	-1.
+
+typedef struct {
+    float  L [32];
+	float  R [32];
+	float  M [32];
+	float  S [32];
+} SMRTyp;
+
+typedef struct {
+	float  L [36];
+	float  R [36];
+} SubbandFloatTyp;
+
+typedef struct {
+	float  L [ANABUFFER];
+	float  R [ANABUFFER];
+	float  M [ANABUFFER];
+	float  S [ANABUFFER];
+} PCMDataTyp;
+
+typedef struct {
+	int           Max_Band;                    // maximum bandwidth
+	float         SampleFreq;
+	float         Bandwidth;
+
+	/* further switches for the psymodel */
+	unsigned int  CVD_used;         // global flag for ClearVoiceDetection
+	float         varLtq;           // variable threshold in quiet
+	unsigned int  tmpMask_used;     // global flag for temporal masking
+	float         ShortThr;         // Factor to calculate the masking threshold with transients
+	float         minSMR;           // minimum SMR for all subbands
+
+	unsigned int  MS_Channelmode;
+
+	float         a          [PART_LONG];
+	float         b          [PART_LONG];
+	float         c          [PART_LONG];
+	float         d          [PART_LONG];           // Integrations for tmpMask
+	float         T_L        [PART_LONG];
+	float         T_R        [PART_LONG];           // time-constants for tmpMask
+	float         pre_erg_L[2][PART_SHORT];
+	float         pre_erg_R[2][PART_SHORT];          // Preecho-control short
+	float         PreThr_L   [PART_LONG];
+	float         PreThr_R   [PART_LONG];           // for Pre-Echo-control L/R
+	float         tmp_Mask_L [PART_LONG];
+	float         tmp_Mask_R [PART_LONG];           // for Post-Masking L/R
+	int           Vocal_L    [MAX_CVD_LINE + 4];
+	int           Vocal_R    [MAX_CVD_LINE + 4];    // FFT-Line belongs to harmonic?
+
+	/* V A R I A B L E S */
+	float  MinVal   [PART_LONG];               // contains minimum tonality soffsets
+	float  Loudness [PART_LONG];               // weighting factors for loudness calculation
+	float  SPRD     [PART_LONG] [PART_LONG];   // tabulated spreading function
+	float  O_MAX;
+	float  O_MIN;
+	float  FAC1;
+	float  FAC2;                               // constants for offset calculation
+	float  partLtq  [PART_LONG];               // threshold in quiet (partitions)
+	float  invLtq   [PART_LONG];               // inverse threshold in quiet (partitions, long)
+	float  fftLtq   [512];                     // threshold in quiet (FFT)
+	float  Ltq_offset;                         // Offset for threshold in quiet
+	float  Ltq_max;                            // maximum level for threshold in quiet
+	float  TMN;
+	float  NMT;
+	float  TransDetect;
+	unsigned int    EarModelFlag;
+	int    MinValChoice;
+
+	// ans.h
+	unsigned int  NS_Order;                         // Maximum order for ANS
+	unsigned int  NS_Order_L [32];
+	unsigned int  NS_Order_R [32];                  // frame-wise order of the Noiseshaping (0: off, 1...5: on)
+	float         FIR_L      [32] [MAX_NS_ORDER];
+	float         FIR_R      [32] [MAX_NS_ORDER];   // contains FIR-Filter for NoiseShaping
+	float         ANSspec_L  [MAX_ANS_LINES];
+	float         ANSspec_R  [MAX_ANS_LINES];       // L/R-masking thresholds for ANS
+	float         ANSspec_M  [MAX_ANS_LINES];
+	float         ANSspec_S  [MAX_ANS_LINES];       // M/S-masking thresholds for ANS
+	float         SNR_comp_L [32];
+	float         SNR_comp_R [32];             // SNR-compensation after SCF-combination and ANS-gain
+
+	// FIXME : remove this :
+	int            SCF_Index_L [32] [3];
+	int            SCF_Index_R [32] [3];              // Scalefactor-index for Bitstream
+
+} PsyModel;
+
+
+// w_low for long               0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48   49   50   51   52   53   54   55   56
+const int   wl [PART_LONG] = {  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  13,  15,  17,  19,  21,  23,  25,  27,  29,  31,  33,  35,  38,  41,  44,  47,  50,  54,  58,  62,  67,  72,  78,  84,  91,  98, 106, 115, 124, 134, 145, 157, 170, 184, 199, 216, 234, 254, 276, 301, 329, 360, 396, 437, 485 };
+const int   wh [PART_LONG] = {  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  12,  14,  16,  18,  20,  22,  24,  26,  28,  30,  32,  34,  37,  40,  43,  46,  49,  53,  57,  61,  66,  71,  77,  83,  90,  97, 105, 114, 123, 133, 144, 156, 169, 183, 198, 215, 233, 253, 275, 300, 328, 359, 395, 436, 484, 511 };
+// Width:                       1    1    1    1    1    1    1    1    1    1    1    2    2    2    2    2    2    2    2    2    2    2    2    3    3    3    3    3    4    4    4    5    5    6    6    7    7    8    9    9   10   11   12   13   14   15   17   18   20   22   25   28   31   36   41   48   27
+
+// inverse partition-width for long
+const float iw [PART_LONG] = { 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/3, 1.f/3, 1.f/3, 1.f/3, 1.f/3, 1.f/4, 1.f/4, 1.f/4, 1.f/5, 1.f/5, 1.f/6, 1.f/6, 1.f/7, 1.f/7, 1.f/8, 1.f/9, 1.f/9, 1.f/10, 1.f/11, 1.f/12, 1.f/13, 1.f/14, 1.f/15, 1.f/17, 1.f/18, 1.f/20, 1.f/22, 1.f/25, 1.f/28, 1.f/31, 1.f/36, 1.f/41, 1.f/48, 1.f/27 };
+
+// w_low for short                    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17   18
+const int   wl_short [PART_SHORT] = { 0,  1,  2,  3,  4,  5,  6,  8, 10, 12, 15, 18, 23, 29, 36, 46, 59, 75,  99 };
+const int   wh_short [PART_SHORT] = { 0,  1,  2,  3,  5,  6,  7,  9, 12, 14, 18, 23, 29, 36, 46, 58, 75, 99, 127 };
+
+// inverse partition-width for short
+const float iw_short [PART_SHORT] = { 1.f, 1.f, 1.f, 1.f, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/3, 1.f/3, 1.f/4, 1.f/6, 1.f/7, 1.f/8, 1.f/11, 1.f/13, 1.f/17, 1.f/25, 1.f/29 };
Index: mppenc/branches/r2d/libmpcpsy/psy.c
===================================================================
--- mppenc/branches/r2d/libmpcpsy/psy.c	(revision 59)
+++ mppenc/branches/r2d/libmpcpsy/psy.c	(revision 60)
@@ -51,41 +51,40 @@
  */
 
-#include "mppenc.h"
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+
+#include "libmpcpsy.h"
+#include "fastmath.h"
+
+
+// Antialiasing for calculation of the subband power
+const float  Butfly    [7] = { 0.5f, 0.2776f, 0.1176f, 0.0361f, 0.0075f, 0.000948f, 0.0000598f };
+
+// Antialiasing for calculation of the masking thresholds
+const float  InvButfly [7] = { 2.f, 3.6023f, 8.5034f, 27.701f, 133.33f, 1054.852f, 16722.408f };
 
 /* V A R I A B L E S */
-/* further switches for the psymodel */
-unsigned int  CVD_used;         // global flag for ClearVoiceDetection
-float         varLtq;           // variable threshold in quiet
-unsigned int  tmpMask_used;     // global flag for temporal masking
-float         ShortThr;         // Factor to calculate the masking threshold with transients
-float         minSMR;           // minimum SMR for all subbands
-
-float         a          [PART_LONG];
-float         b          [PART_LONG];
-float         c          [PART_LONG];
-float         d          [PART_LONG];           // Integrations for tmpMask
+
 static float  Xsave_L    [3 * 512];
 static float  Xsave_R    [3 * 512];             // FFT-Amplitudes L/R
 static float  Ysave_L    [3 * 512];
 static float  Ysave_R    [3 * 512];             // FFT-Phases L/R
-float         T_L        [PART_LONG];
-float         T_R        [PART_LONG];           // time-constants for tmpMask
-float         pre_erg_L[2][PART_SHORT];
-float         pre_erg_R[2][PART_SHORT];          // Preecho-control short
-float         PreThr_L   [PART_LONG];
-float         PreThr_R   [PART_LONG];           // for Pre-Echo-control L/R
-float         tmp_Mask_L [PART_LONG];
-float         tmp_Mask_R [PART_LONG];           // for Post-Masking L/R
-int           Vocal_L    [MAX_CVD_LINE + 4];
-int           Vocal_R    [MAX_CVD_LINE + 4];    // FFT-Line belongs to harmonic?
 
 /* F U N C T I O N S */
+
+// fft_routines.c
+void   Init_FFT      ( void );
+void   PowSpec256    ( const float*, float* );
+void   PowSpec1024   ( const float*, float* );
+void   PowSpec2048   ( const float*, float* );
+void   PolarSpec1024 ( const float*, float*, float* );
+void   Cepstrum2048  ( float* cep, const int );
+
 // Resets Arrays
-void
-Init_Psychoakustik ( void )
+void Init_Psychoakustik ( PsyModel* m)
 {
     int  i;
 
-    ENTER(200);
     // generate FFT lookup-tables with largest FFT-size of 1024
     Init_FFT ();
@@ -93,25 +92,27 @@
     // setting pre-echo variables to Ltq
     for ( i = 0; i < PART_LONG; i++ ) {
-        pre_erg_L  [0][i/3] = pre_erg_R  [0][i/3] =
-        pre_erg_L  [1][i/3] = pre_erg_R  [1][i/3] =
-        tmp_Mask_L [i]   = tmp_Mask_R [i]   =
-        PreThr_L   [i]   = PreThr_R   [i]   = partLtq [i];
+		m->pre_erg_L  [0][i/3] = m->pre_erg_R  [0][i/3] =
+				m->pre_erg_L  [1][i/3] = m->pre_erg_R  [1][i/3] =
+				m->tmp_Mask_L [i]   = m->tmp_Mask_R [i]   =
+				m->PreThr_L   [i]   = m->PreThr_R   [i]   = m->partLtq [i];
     }
 
     // initializing arrays with zero
-    memset ( Xsave_L,   0, sizeof Xsave_L );
-    memset ( Xsave_R,   0, sizeof Xsave_R );
-    memset ( Ysave_L,   0, sizeof Ysave_L );
-    memset ( Ysave_R,   0, sizeof Ysave_R );
-    memset ( a,         0, sizeof a       );
-    memset ( b,         0, sizeof b       );
-    memset ( c,         0, sizeof c       );
-    memset ( d,         0, sizeof d       );
-    memset ( T_L,       0, sizeof T_L     );
-    memset ( T_R,       0, sizeof T_R     );
-    memset ( Vocal_L,   0, sizeof Vocal_L );
-    memset ( Vocal_R,   0, sizeof Vocal_R );
-
-    LEAVE(200);
+	memset ( Xsave_L,   0, sizeof Xsave_L );
+	memset ( Xsave_R,   0, sizeof Xsave_R );
+	memset ( Ysave_L,   0, sizeof Ysave_L );
+	memset ( Ysave_R,   0, sizeof Ysave_R );
+	memset ( m->a,         0, sizeof m->a       );
+	memset ( m->b,         0, sizeof m->b       );
+	memset ( m->c,         0, sizeof m->c       );
+	memset ( m->d,         0, sizeof m->d       );
+	memset ( m->T_L,       0, sizeof m->T_L     );
+	memset ( m->T_R,       0, sizeof m->T_R     );
+	memset ( m->Vocal_L,   0, sizeof m->Vocal_L );
+	memset ( m->Vocal_R,   0, sizeof m->Vocal_R );
+
+	m->SampleFreq = 0.;
+	m->Bandwidth = 0.;
+
     return;
 }
@@ -134,10 +135,8 @@
 
 
-void
-RaiseSMR ( const int MaxBand, SMRTyp* smr )
-{
-    float  tmp = POW10 ( 0.1 * minSMR );
-
-    ENTER(201);
+void RaiseSMR (PsyModel* m, const int MaxBand, SMRTyp* smr )
+{
+    float  tmp = POW10 ( 0.1 * m->minSMR );
+
     RaiseSMR_Signal ( MaxBand, smr->L, tmp );
     RaiseSMR_Signal ( MaxBand, smr->R, tmp );
@@ -145,5 +144,4 @@
     RaiseSMR_Signal ( MaxBand, smr->S, 0.5 * tmp );
 
-    LEAVE(201);
     return;
 }
@@ -166,5 +164,4 @@
     float*  r;
 
-    ENTER(202);
 
     for ( Band = 0; Band <= MaxBand; Band++ ) {        // calculate perceptual entropy
@@ -197,5 +194,4 @@
     }
 
-    LEAVE(202);
     return;
 }
@@ -203,5 +199,5 @@
 // input : FFT-spectrums *spec0 und *spec1
 // output: energy in the individual subbands *erg0 and *erg1
-// With Butfly[], you can calculate the results of aliasing during calculation 
+// With Butfly[], you can calculate the results of aliasing during calculation
 // of subband energy from the FFT-spectrums.
 static void
@@ -218,5 +214,4 @@
     float  tmp1;
 
-    ENTER(203);
 
     // Is this here correct for FFT-based data or is this calculation rule only for MDCTs???
@@ -244,5 +239,4 @@
     }
 
-    LEAVE(203);
     return;
 }
@@ -261,5 +255,4 @@
     float         e1;
 
-    ENTER(204);
 
 #if 000000
@@ -314,8 +307,6 @@
     }
 
-
 #endif
 
-    LEAVE(204);
     return;
 }
@@ -337,5 +328,4 @@
     float         e1;
 
-    ENTER(205);
 
 #if 000000
@@ -391,5 +381,4 @@
 #endif
 
-    LEAVE(205);
     return;
 }
@@ -413,5 +402,4 @@
     float         tmp1;
 
-    ENTER(206);
 
     // should be able to optimize it with coasting.  [ 9 ] + n * [ 7 + 7 + 2 ] + [ 7 ]
@@ -440,9 +428,7 @@
     }
 
-    LEAVE(206);
-    return;
-}
-
-#include "fastmath.h"
+    return;
+}
+
 
 // input : current spectrum in the form of power *spec and phase *phase,
@@ -452,11 +438,12 @@
 // output: current amplitude *amp and unpredictability *cw
 static void
-CalcUnpred ( const int     MaxLine,
-             const float*  spec,
-             const float*  phase,
-             const int*    vocal,
-             float*        amp0,
-             float*        phs0,
-             float*        cw )
+CalcUnpred (PsyModel* m,
+			const int     MaxLine,
+			const float*  spec,
+			const float*  phase,
+			const int*    vocal,
+			float*        amp0,
+			float*        phs0,
+			float*        cw )
 {
     int     n;
@@ -468,5 +455,4 @@
 #define phs2  ((phs0) + 1024)           // phs[1024...1535] contains data of frame-2
 
-    ENTER(207);
 
     for ( n = 0; n < MaxLine; n++ ) {
@@ -480,5 +466,5 @@
 
     // postprocessing of harmonic FFT-lines (*cw is set to CVD_UNPRED)
-    if ( CVD_used  &&  vocal != NULL ) {
+	if ( m->CVD_used  &&  vocal != NULL ) {
         for ( n = 0; n < MAX_CVD_LINE; n++, cw++, vocal++ )
             if ( *vocal != 0  &&  *cw > CVD_UNPRED * 0.01 * *vocal )
@@ -486,5 +472,4 @@
     }
 
-    LEAVE(207);
     return;
 }
@@ -499,5 +484,6 @@
 // SPRD describes the spreading function as calculated in psy_tab.c
 static void
-SpreadingSignal ( const float* erg, const float* werg, float* res, float* wres )
+SpreadingSignal ( PsyModel* m, const float* erg, const float* werg, float* res,
+				  float* wres )
 {
     int           n;
@@ -509,10 +495,9 @@
     float         ew;
 
-    ENTER(208);
 
     for (k=0; k<PART_LONG; ++k, ++erg, ++werg) { // Source (masking partition)
         start = maxi(k-5, 0);           // minimum affected partition
         stop  = mini(k+7, PART_LONG-1); // maximum affected partition
-        sprd  = SPRD[k] + start;         // load vector
+        sprd  = m->SPRD[k] + start;         // load vector
         e     = *erg;
         ew    = *werg;
@@ -524,5 +509,4 @@
     }
 
-    LEAVE(208);
     return;
 }
@@ -531,5 +515,5 @@
 // output: masking threshold *erg after applying the tonality-offset
 static void
-ApplyTonalityOffset ( float* erg0, float* erg1, const float* werg0, const float* werg1 )
+ApplyTonalityOffset ( PsyModel* m, float* erg0, float* erg1, const float* werg0, const float* werg1 )
 {
     int    n;
@@ -537,22 +521,20 @@
     float  quot;
 
-    ENTER(230);
 
     // calculation of the masked threshold in the partition range
     for ( n = 0; n < PART_LONG; n++ ) {
         quot = *werg0++ / *erg0;
-        if      (quot <= 0.05737540597f) Offset = O_MAX;
-        else if (quot <  0.5871011603f ) Offset = FAC1 * POW (quot, FAC2);
-        else                             Offset = O_MIN;
-        *erg0++ *= iw[n] * minf(MinVal[n], Offset);
+        if      (quot <= 0.05737540597f) Offset = m->O_MAX;
+        else if (quot <  0.5871011603f ) Offset = m->FAC1 * POW (quot, m->FAC2);
+        else                             Offset = m->O_MIN;
+        *erg0++ *= iw[n] * minf(m->MinVal[n], Offset);
 
         quot = *werg1++ / *erg1;
-        if      (quot <= 0.05737540597f) Offset = O_MAX;
-        else if (quot <  0.5871011603f ) Offset = FAC1 * POW (quot, FAC2);
-        else                             Offset = O_MIN;
-        *erg1++ *= iw[n] * minf(MinVal[n], Offset);
-    }
-
-    LEAVE(230);
+        if      (quot <= 0.05737540597f) Offset = m->O_MAX;
+        else if (quot <  0.5871011603f ) Offset = m->FAC1 * POW (quot, m->FAC2);
+        else                             Offset = m->O_MIN;
+		*erg1++ *= iw[n] * minf(m->MinVal[n], Offset);
+    }
+
     return;
 }
@@ -561,8 +543,8 @@
 // output: tracked loudness *loud, adapted threshold in quiet <Return value>
 static float
-AdaptLtq ( const float* erg0, const float* erg1 )
+AdaptLtq ( PsyModel* m, const float* erg0, const float* erg1 )
 {
     static float  loud   = 0.f;
-    float*        weight = Loudness;
+	float*        weight = m->Loudness;
     float         sum    = 0.f;
     int           n;
@@ -577,5 +559,5 @@
 
     // calculate dynamic offset for threshold in quiet, 0...+20 dB, at 96 dB loudness, an offset of 20 dB is assumed
-    return 1.f + varLtq * loud * 5.023772e-08f;
+    return 1.f + m->varLtq * loud * 5.023772e-08f;
 }
 
@@ -585,15 +567,14 @@
 // output: tracked Integrations *a and *b, time constant *tau
 static void
-CalcTemporalThreshold ( float* a, float* b, float* tau, float* frqthr, float* tmpthr )
+CalcTemporalThreshold ( PsyModel* m, float* a, float* b, float* tau, float* frqthr, float* tmpthr )
 {
     int    n;
     float  tmp;
 
-    ENTER(220);
 
     for ( n = 0; n < PART_LONG; n++ ) {
         // following calculations relative to threshold in quiet
-        frqthr[n] *= invLtq[n];
-        tmpthr[n] *= invLtq[n];
+        frqthr[n] *= m->invLtq[n];
+		tmpthr[n] *= m->invLtq[n];
 
         // new post-masking 'tmp' via time constant tau, if old post-masking  > Ltq (=1)
@@ -608,8 +589,7 @@
 
         // use post-masking of (Re-Normalization)
-        tmpthr[n] = maxf (frqthr[n], tmp) * partLtq[n];
-    }
-
-    LEAVE(220);
+		tmpthr[n] = maxf (frqthr[n], tmp) * m->partLtq[n];
+    }
+
     return;
 }
@@ -620,5 +600,6 @@
 // output: M/S-Masking thresholds in Partitions *thrM, *thrS
 static void
-CalcMSThreshold ( const float*  const ergL,
+CalcMSThreshold ( PsyModel* m,
+				  const float*  const ergL,
                   const float*  const ergR,
                   const float*  const ergM,
@@ -640,5 +621,5 @@
         thrS[n] = thrM[n] = maxf (ergM[n], ergS[n]) / maxf (ergL[n], ergR[n]) * minf (thrL[n], thrR[n]);
 
-        switch ( MS_Channelmode ) { // preserve 'near-mid' signal components
+        switch ( m->MS_Channelmode ) { // preserve 'near-mid' signal components
         case 3:
             if ( n > 0 ) {
@@ -760,9 +741,9 @@
                     tmp = ergS[n] * norm;
                     if ( thrS[n] > tmp )
-                        thrS[n] = maxf (tmp, ergM[n]*iw[n]*0.025);              // +/- 1.414°
+                        thrS[n] = maxf (tmp, ergM[n]*iw[n]*0.025);              // +/- 1.414
                 } else if ( ergS[n] > ergM[n] ) {
                     tmp = ergM[n] * norm;
                     if ( thrM[n] > tmp )
-                        thrM[n] = maxf (tmp, ergS[n]*iw[n]*0.025);              // +/- 1.414°
+                        thrM[n] = maxf (tmp, ergS[n]*iw[n]*0.025);              // +/- 1.414
                 }
             }
@@ -779,5 +760,6 @@
 // inline, because it's called 4x
 static void
-ApplyLtq ( float*        thr0,
+ApplyLtq ( PsyModel* m,
+		   float*        thr0,
            float*        thr1,
            const float*  partThr0,
@@ -800,5 +782,5 @@
 #else
             // Applies a much more gentle ATH rolloff + 6 dB more dynamic
-            ltq   = sqrt (ms * fftLtq [k]);
+            ltq   = sqrt (ms * m->fftLtq [k]);
             tmp   = sqrt (partThr0 [n]) + ltq;
             *thr0 = tmp * tmp;
@@ -896,5 +878,6 @@
 #else
 static void
-CalcShortThreshold ( const float  erg [4] [128],
+CalcShortThreshold ( PsyModel* m,
+					 const float  erg [4] [128],
                      const float  ShortThr,
                      float*       thr,
@@ -907,5 +890,5 @@
     int           k;
     int           n;
-    int           m;
+    int           l;
     float         new_erg;
     float         th;
@@ -917,14 +900,14 @@
         for ( n = 0; n < 4; n++ ) {
             ep   = erg[n] + index_lo [k];
-            m    = index_hi [k] - index_lo [k];
+            l    = index_hi [k] - index_lo [k];
 
             new_erg = *ep++;
-            while (m--)
+            while (l--)
                 new_erg += *ep++;               // e = Short_Partition-energy in piece n
 
             if ( new_erg > old_erg [0][k] ) {           // bigger than the old?
 
-                if ( new_erg > old_erg [0][k] * TransDetect  ||
-                     new_erg > old_erg [1][k] * TransDetect*2 )  // is signal transient?
+                if ( new_erg > old_erg [0][k] * m->TransDetect  ||
+					 new_erg > old_erg [1][k] * m->TransDetect*2 )  // is signal transient?
                     transient [k] = 1;
             }
@@ -992,5 +975,9 @@
 // output: SMRs for the input data
 SMRTyp
-Psychoakustisches_Modell ( const int MaxBand, const PCMDataTyp* data, int* TransientL, int* TransientR )
+Psychoakustisches_Modell ( PsyModel* m,
+						   const int MaxBand,
+						   const PCMDataTyp* data,
+						   int* TransientL,
+						   int* TransientR )
 {
     float      Xi_L[32],     Xi_R[32];                          // acoustic pressure per Subband L/R
@@ -1019,16 +1006,15 @@
     float    factorLTQ  = 1.f;                                  // Offset after variable LTQ
 
-    ENTER(50);
     // 'ClearVocalDetection'-Process
-    if ( CVD_used ) {
-        memset ( Vocal_L, 0, sizeof Vocal_L );
-        memset ( Vocal_R, 0, sizeof Vocal_R );
+    if ( m->CVD_used ) {
+        memset ( m->Vocal_L, 0, sizeof m->Vocal_L );
+        memset ( m->Vocal_R, 0, sizeof m->Vocal_R );
 
         // left channel
         PowSpec2048 ( &data->L[0], Xerg );
-        isvoc_L = CVD2048 ( Xerg, Vocal_L );
+        isvoc_L = CVD2048 ( Xerg, m->Vocal_L );
         // right channel
         PowSpec2048 ( &data->R[0], Xerg );
-        isvoc_R = CVD2048 ( Xerg, Vocal_R );
+        isvoc_R = CVD2048 ( Xerg, m->Vocal_R );
     }
 
@@ -1047,9 +1033,9 @@
     memmove ( Xsave_L+512, Xsave_L, 1024*sizeof(float) );
     memmove ( Ysave_L+512, Ysave_L, 1024*sizeof(float) );
-    CalcUnpred ( MaxLine, erg0, phs0, isvoc_L ? Vocal_L : NULL, Xsave_L, Ysave_L, cw_L );
+    CalcUnpred ( m, MaxLine, erg0, phs0, isvoc_L ? m->Vocal_L : NULL, Xsave_L, Ysave_L, cw_L );
     // right
     memmove ( Xsave_R+512, Xsave_R, 1024*sizeof(float) );
     memmove ( Ysave_R+512, Ysave_R, 1024*sizeof(float) );
-    CalcUnpred ( MaxLine, erg1, phs1, isvoc_R ? Vocal_R : NULL, Xsave_R, Ysave_R, cw_R );
+    CalcUnpred ( m, MaxLine, erg1, phs1, isvoc_R ? m->Vocal_R : NULL, Xsave_R, Ysave_R, cw_R );
 
     // calculation of the weighted acoustic pressures per each partition
@@ -1060,12 +1046,12 @@
     memset ( clow_L    , 0, sizeof clow_L );
     memset ( sim_Mask_L, 0, sizeof sim_Mask_L );
-    SpreadingSignal ( Ls_L, cLs_L, sim_Mask_L, clow_L );
+    SpreadingSignal ( m, Ls_L, cLs_L, sim_Mask_L, clow_L );
     // right
     memset ( clow_R    , 0, sizeof clow_R );
     memset ( sim_Mask_R, 0, sizeof sim_Mask_R );
-    SpreadingSignal ( Ls_R, cLs_R, sim_Mask_R, clow_R );
+    SpreadingSignal ( m, Ls_R, cLs_R, sim_Mask_R, clow_R );
 
     // Offset depending on tonality
-    ApplyTonalityOffset ( sim_Mask_L, sim_Mask_R, clow_L, clow_R );
+    ApplyTonalityOffset ( m, sim_Mask_L, sim_Mask_R, clow_L, clow_R );
 
     // handling of transient signals
@@ -1076,5 +1062,5 @@
     PowSpec256 ( &data->L[432+SHORTFFT_OFFSET], F_256[3] );
     // calculate short Threshold
-    CalcShortThreshold ( F_256, ShortThr, shortThr_L, pre_erg_L, TransientL );
+    CalcShortThreshold ( m, F_256, m->ShortThr, shortThr_L, m->pre_erg_L, TransientL );
 
     // calculate four short FFTs (right)
@@ -1084,16 +1070,16 @@
     PowSpec256 ( &data->R[432+SHORTFFT_OFFSET], F_256[3] );
     // calculate short Threshold
-    CalcShortThreshold ( F_256, ShortThr, shortThr_R, pre_erg_R, TransientR );
+    CalcShortThreshold ( m, F_256, m->ShortThr, shortThr_R, m->pre_erg_R, TransientR );
 
     // dynamic adjustment of the threshold in quiet to the loudness of the current sequence
-    if ( varLtq > 0. )
-        factorLTQ = AdaptLtq ( Ls_L, Ls_R );
+    if ( m->varLtq > 0. )
+        factorLTQ = AdaptLtq (m, Ls_L, Ls_R );
 
     // utilization of the temporal post-masking
-    if ( tmpMask_used ) {
-        CalcTemporalThreshold ( a, b, T_L, sim_Mask_L, tmp_Mask_L );
-        CalcTemporalThreshold ( c, d, T_R, sim_Mask_R, tmp_Mask_R );
-        memcpy ( sim_Mask_L, tmp_Mask_L, sizeof sim_Mask_L );
-        memcpy ( sim_Mask_R, tmp_Mask_R, sizeof sim_Mask_R );
+    if ( m->tmpMask_used ) {
+		CalcTemporalThreshold (m, m->a, m->b, m->T_L, sim_Mask_L, m->tmp_Mask_L );
+		CalcTemporalThreshold (m, m->c, m->d, m->T_R, sim_Mask_R, m->tmp_Mask_R );
+		memcpy ( sim_Mask_L, m->tmp_Mask_L, sizeof sim_Mask_L );
+		memcpy ( sim_Mask_R, m->tmp_Mask_R, sizeof sim_Mask_R );
     }
 
@@ -1113,8 +1099,8 @@
 
     // Pre-Echo control
-    PreechoControl ( PartThr_L, PreThr_L, sim_Mask_L, PartThr_R, PreThr_R, sim_Mask_R );
+	PreechoControl ( PartThr_L, m->PreThr_L, sim_Mask_L, PartThr_R, m->PreThr_R, sim_Mask_R );
 
     // utilization of the threshold in quiet
-    ApplyLtq ( Thr_L, Thr_R, PartThr_L, PartThr_R, factorLTQ, 0 );
+    ApplyLtq ( m, Thr_L, Thr_R, PartThr_L, PartThr_R, factorLTQ, 0 );
 
     // Consideration of aliasing between the subbands (noise is smeared)
@@ -1129,5 +1115,5 @@
     /***************************************************************************************/
     /***************************************************************************************/
-    if ( MS_Channelmode > 0 ) {
+	if ( m->MS_Channelmode > 0 ) {
         // calculation of the spectral energy via FFT
         PowSpec1024 ( &data->M[0], erg0 );      // mid
@@ -1141,6 +1127,6 @@
 
         // calculate masking thresholds for M/S
-        CalcMSThreshold ( Ls_L, Ls_R, Ls_M, Ls_S, PartThr_L, PartThr_R, PartThr_M, PartThr_S );
-        ApplyLtq ( Thr_M, Thr_S, PartThr_M, PartThr_S, factorLTQ, 1 );
+        CalcMSThreshold ( m, Ls_L, Ls_R, Ls_M, Ls_S, PartThr_L, PartThr_R, PartThr_M, PartThr_S );
+        ApplyLtq ( m, Thr_M, Thr_S, PartThr_M, PartThr_S, factorLTQ, 1 );
 
         // Consideration of aliasing between the subbands (noise is smeared)
@@ -1154,9 +1140,9 @@
     }
 
-    if ( NS_Order > 0 ) {       // providing the Noise Shaping thresholds
-        memcpy ( ANSspec_L, Thr_L, sizeof ANSspec_L );
-        memcpy ( ANSspec_R, Thr_R, sizeof ANSspec_R );
-        memcpy ( ANSspec_M, Thr_M, sizeof ANSspec_M );
-        memcpy ( ANSspec_S, Thr_S, sizeof ANSspec_S );
+	if ( m->NS_Order > 0 ) {       // providing the Noise Shaping thresholds
+		memcpy ( m->ANSspec_L, Thr_L, sizeof m->ANSspec_L );
+		memcpy ( m->ANSspec_R, Thr_R, sizeof m->ANSspec_R );
+		memcpy ( m->ANSspec_M, Thr_M, sizeof m->ANSspec_M );
+		memcpy ( m->ANSspec_S, Thr_S, sizeof m->ANSspec_S );
     }
     /***************************************************************************************/
@@ -1180,9 +1166,9 @@
     memmove ( Xsave_L+512, Xsave_L, 1024*sizeof(float) );
     memmove ( Ysave_L+512, Ysave_L, 1024*sizeof(float) );
-    CalcUnpred ( MaxLine, erg0, phs0, isvoc_L ? Vocal_L : NULL, Xsave_L, Ysave_L, cw_L );
+	CalcUnpred ( m, MaxLine, erg0, phs0, isvoc_L ? m->Vocal_L : NULL, Xsave_L, Ysave_L, cw_L );
     // right
     memmove ( Xsave_R+512, Xsave_R, 1024*sizeof(float) );
     memmove ( Ysave_R+512, Ysave_R, 1024*sizeof(float) );
-    CalcUnpred ( MaxLine, erg1, phs1, isvoc_R ? Vocal_R : NULL, Xsave_R, Ysave_R, cw_R );
+	CalcUnpred ( m, MaxLine, erg1, phs1, isvoc_R ? m->Vocal_R : NULL, Xsave_R, Ysave_R, cw_R );
 
     // calculation of the weighted acoustic pressure per each partition
@@ -1193,12 +1179,12 @@
     memset ( clow_L    , 0, sizeof clow_L );
     memset ( sim_Mask_L, 0, sizeof sim_Mask_L );
-    SpreadingSignal ( Ls_L, cLs_L, sim_Mask_L, clow_L );
+    SpreadingSignal ( m, Ls_L, cLs_L, sim_Mask_L, clow_L );
     // right
     memset ( clow_R    , 0, sizeof clow_R );
     memset ( sim_Mask_R, 0, sizeof sim_Mask_R );
-    SpreadingSignal ( Ls_R, cLs_R, sim_Mask_R, clow_R );
+    SpreadingSignal ( m, Ls_R, cLs_R, sim_Mask_R, clow_R );
 
     // Offset depending on tonality
-    ApplyTonalityOffset ( sim_Mask_L, sim_Mask_R, clow_L, clow_R );
+    ApplyTonalityOffset ( m, sim_Mask_L, sim_Mask_R, clow_L, clow_R );
 
     // Handling of transient signals
@@ -1209,5 +1195,5 @@
     PowSpec256 ( &data->L[1008+SHORTFFT_OFFSET], F_256[3] );
     // calculate short Threshold
-    CalcShortThreshold ( F_256, ShortThr, shortThr_L, pre_erg_L, TransientL );
+	CalcShortThreshold ( m, F_256, m->ShortThr, shortThr_L, m->pre_erg_L, TransientL );
 
     // calculate four short FFTs (right)
@@ -1217,16 +1203,16 @@
     PowSpec256 ( &data->R[1008+SHORTFFT_OFFSET], F_256[3] );
     // calculate short Threshold
-    CalcShortThreshold ( F_256, ShortThr, shortThr_R, pre_erg_R, TransientR );
+	CalcShortThreshold ( m, F_256, m->ShortThr, shortThr_R, m->pre_erg_R, TransientR );
 
     // dynamic adjustment of threshold in quiet to loudness of the current sequence
-    if ( varLtq > 0. )
-        factorLTQ = AdaptLtq ( Ls_L, Ls_R );
+	if ( m->varLtq > 0. )
+        factorLTQ = AdaptLtq ( m, Ls_L, Ls_R );
 
     // utilization of temporal post-masking
-    if (tmpMask_used) {
-        CalcTemporalThreshold ( a, b, T_L, sim_Mask_L, tmp_Mask_L );
-        CalcTemporalThreshold ( c, d, T_R, sim_Mask_R, tmp_Mask_R );
-        memcpy ( sim_Mask_L, tmp_Mask_L, sizeof sim_Mask_L );
-        memcpy ( sim_Mask_R, tmp_Mask_R, sizeof sim_Mask_R );
+	if (m->tmpMask_used) {
+		CalcTemporalThreshold ( m, m->a, m->b, m->T_L, sim_Mask_L, m->tmp_Mask_L );
+		CalcTemporalThreshold ( m, m->c, m->d, m->T_R, sim_Mask_R, m->tmp_Mask_R );
+		memcpy ( sim_Mask_L, m->tmp_Mask_L, sizeof sim_Mask_L );
+		memcpy ( sim_Mask_R, m->tmp_Mask_R, sizeof sim_Mask_R );
     }
 
@@ -1246,8 +1232,8 @@
 
     // Pre-Echo control
-    PreechoControl ( PartThr_L, PreThr_L, sim_Mask_L, PartThr_R, PreThr_R, sim_Mask_R );
+	PreechoControl ( PartThr_L, m->PreThr_L, sim_Mask_L, PartThr_R, m->PreThr_R, sim_Mask_R );
 
     // utilization of threshold in quiet
-    ApplyLtq ( Thr_L, Thr_R, PartThr_L, PartThr_R, factorLTQ, 0 );
+    ApplyLtq ( m, Thr_L, Thr_R, PartThr_L, PartThr_R, factorLTQ, 0 );
 
     // Consideration of aliasing between the subbands (noise is smeared)
@@ -1262,5 +1248,5 @@
     /***************************************************************************************/
     /***************************************************************************************/
-    if ( MS_Channelmode > 0 ) {
+	if ( m->MS_Channelmode > 0 ) {
         // calculation of the spectral energy via FFT
         PowSpec1024 ( &data->M[576], erg0 );    // mid
@@ -1274,6 +1260,6 @@
 
         // calculate masking thresholds for M/S
-        CalcMSThreshold ( Ls_L, Ls_R, Ls_M, Ls_S, PartThr_L, PartThr_R, PartThr_M, PartThr_S );
-        ApplyLtq ( Thr_M, Thr_S, PartThr_M, PartThr_S, factorLTQ, 1 );
+        CalcMSThreshold ( m, Ls_L, Ls_R, Ls_M, Ls_S, PartThr_L, PartThr_R, PartThr_M, PartThr_S );
+        ApplyLtq ( m, Thr_M, Thr_S, PartThr_M, PartThr_S, factorLTQ, 1 );
 
         // Consideration of aliasing between the subbands (noise is smeared)
@@ -1289,10 +1275,10 @@
     /***************************************************************************************/
 
-    if ( NS_Order > 0 ) {
+	if ( m->NS_Order > 0 ) {
         for ( n = 0; n < MAX_ANS_LINES; n++ ) {                 // providing Noise Shaping thresholds
-            ANSspec_L [n] = minf ( ANSspec_L [n], Thr_L [n] );
-            ANSspec_R [n] = minf ( ANSspec_R [n], Thr_R [n] );
-            ANSspec_M [n] = minf ( ANSspec_M [n], Thr_M [n] );
-            ANSspec_S [n] = minf ( ANSspec_S [n], Thr_S [n] );
+			m->ANSspec_L [n] = minf ( m->ANSspec_L [n], Thr_L [n] );
+			m->ANSspec_R [n] = minf ( m->ANSspec_R [n], Thr_R [n] );
+			m->ANSspec_M [n] = minf ( m->ANSspec_M [n], Thr_M [n] );
+			m->ANSspec_S [n] = minf ( m->ANSspec_S [n], Thr_S [n] );
         }
     }
@@ -1304,6 +1290,4 @@
         SMR0.S[n] = maxf ( SMR0.S[n], SMR1.S[n] );
     }
-
-    LEAVE(50);
     return SMR0;
 }
Index: mppenc/branches/r2d/libmpcpsy/psy_tab.c
===================================================================
--- mppenc/branches/r2d/libmpcpsy/psy_tab.c	(revision 59)
+++ mppenc/branches/r2d/libmpcpsy/psy_tab.c	(revision 60)
@@ -18,126 +18,7 @@
  */
 
-#include "mppenc.h"
-
-// Antialiasing for calculation of the subband power
-const float  Butfly    [7] = { 0.5f, 0.2776f, 0.1176f, 0.0361f, 0.0075f, 0.000948f, 0.0000598f };
-
-// Antialiasing for calculation of the masking thresholds
-const float  InvButfly [7] = { 2.f, 3.6023f, 8.5034f, 27.701f, 133.33f, 1054.852f, 16722.408f };
-
-// w_low for long               0    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48   49   50   51   52   53   54   55   56
-const int   wl [PART_LONG] = {  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  13,  15,  17,  19,  21,  23,  25,  27,  29,  31,  33,  35,  38,  41,  44,  47,  50,  54,  58,  62,  67,  72,  78,  84,  91,  98, 106, 115, 124, 134, 145, 157, 170, 184, 199, 216, 234, 254, 276, 301, 329, 360, 396, 437, 485 };
-const int   wh [PART_LONG] = {  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  12,  14,  16,  18,  20,  22,  24,  26,  28,  30,  32,  34,  37,  40,  43,  46,  49,  53,  57,  61,  66,  71,  77,  83,  90,  97, 105, 114, 123, 133, 144, 156, 169, 183, 198, 215, 233, 253, 275, 300, 328, 359, 395, 436, 484, 511 };
-// Width:                       1    1    1    1    1    1    1    1    1    1    1    2    2    2    2    2    2    2    2    2    2    2    2    3    3    3    3    3    4    4    4    5    5    6    6    7    7    8    9    9   10   11   12   13   14   15   17   18   20   22   25   28   31   36   41   48   27
-
-// inverse partition-width for long
-const float iw [PART_LONG] = { 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/3, 1.f/3, 1.f/3, 1.f/3, 1.f/3, 1.f/4, 1.f/4, 1.f/4, 1.f/5, 1.f/5, 1.f/6, 1.f/6, 1.f/7, 1.f/7, 1.f/8, 1.f/9, 1.f/9, 1.f/10, 1.f/11, 1.f/12, 1.f/13, 1.f/14, 1.f/15, 1.f/17, 1.f/18, 1.f/20, 1.f/22, 1.f/25, 1.f/28, 1.f/31, 1.f/36, 1.f/41, 1.f/48, 1.f/27 };
-
-// w_low for short                    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17   18
-const int   wl_short [PART_SHORT] = { 0,  1,  2,  3,  4,  5,  6,  8, 10, 12, 15, 18, 23, 29, 36, 46, 59, 75,  99 };
-const int   wh_short [PART_SHORT] = { 0,  1,  2,  3,  5,  6,  7,  9, 12, 14, 18, 23, 29, 36, 46, 58, 75, 99, 127 };
-
-// inverse partition-width for short
-const float iw_short [PART_SHORT] = { 1.f, 1.f, 1.f, 1.f, 1.f/2, 1.f/2, 1.f/2, 1.f/2, 1.f/3, 1.f/3, 1.f/4, 1.f/6, 1.f/7, 1.f/8, 1.f/11, 1.f/13, 1.f/17, 1.f/25, 1.f/29 };
-
-/*
-Nr.   wl  wh     fl    fh     bl         bh         bm        Nr.   wl  wh     fl    fh     bl         bh         bm
- 0:    0   0      0     0   0.000000   0.000000   0.000000
- 1:    1   1     43    43   0.425460   0.425460   0.425460     0:   0   0      0     0   0.000000   0.000000     0.000000
- 2:    2   2     86    86   0.850241   0.850241   0.850241
-
- 3:    3   3    129   129   1.273448   1.273448   1.273448
- 4:    4   4    172   172   1.694205   1.694205   1.694205     1:   1   1    172   172   1.694205   1.694205     1.694205
- 5:    5   5    215   215   2.111672   2.111672   2.111672
-
- 6:    6   6    258   258   2.525051   2.525051   2.525051
- 7:    7   7    301   301   2.933594   2.933594   2.933594     2:   2   2    345   345   3.336612   3.336612     3.336612
- 8:    8   8    345   345   3.336612   3.336612   3.336612
-
- 9:    9   9    388   388   3.733479   3.733479   3.733479
-10:   10  10    431   431   4.123635   4.123635   4.123635     3:   3   3    517   517   4.881924   4.881924     4.881924
-11-   11  12    474   517   4.506591   4.881924   4.695234
-
-12:   13  14    560   603   5.249283   5.608381   5.429880
-13:   15  16    646   689   5.958998   6.300971   6.131073     4:   4   5    689   861   6.300971   7.581073     6.958618
-14:   17  18    732   775   6.634195   6.958618   6.797509
-
-15:   19  20    818   861   7.274232   7.581073   7.428745
-16:   21  22    904   947   7.879211   8.168753   8.025049     5:   5   6    861  1034   7.581073   8.722594     8.168753
-17:   23  24    991  1034   8.449828   8.722594   8.587239
-
-18:   25  26   1077  1120   8.987223   9.243908   9.116546
-19:   27  28   1163  1206   9.492850   9.734263   9.614484     6:   6   7   1034  1206   8.722594   9.734263     9.243908
-20:   29  30   1249  1292   9.968365  10.195382  10.082745
-
-21:   31  32   1335  1378  10.415539  10.629064  10.523116
-22:   33  34   1421  1464  10.836184  11.037125  10.937413     7:   8   9   1378  1550  10.629064  11.421352    11.037125
-23:   35  37   1507  1593  11.232108  11.605071  11.421352
-
-24:   38  40   1637  1723  11.783474  12.125139  11.956764
-25:   41  43   1766  1852  12.288791  12.602659  12.447904     8:  10  12   1723  2067  12.125139  13.316883    12.753228
-26:   44  46   1895  1981  12.753228  13.042468  12.899777
-
-27:   47  49   2024  2110  13.181453  13.448898  13.316883
-28:   50  53   2153  2283  13.577635  13.945465  13.764881     9:  12  14   2067  2412  13.316883  14.288198    13.825796
-29:   54  57   2326  2455  14.062349  14.397371  14.232693
-
-30:   58  61   2498  2627  14.504172  14.811258  14.660130
-31:   62  66   2670  2842  14.909464  15.283564  15.100115    10:  15  18   2584  3101  14.711029  15.795819    15.283564
-32:   67  71   2885  3058  15.372757  15.714074  15.546390
-
-33:   72  77   3101  3316  15.795819  16.185532  15.994471
-34:   78  83   3359  3575  16.259980  16.616871  16.441494    11:  18  23   3101  3962  15.795819  17.204658    16.547424
-35:   84  90   3618  3876  16.685418  17.079349  16.885941
-
-36:   91  97   3919  4177  17.142352  17.506445  17.327264
-37:   98 105   4221  4522  17.564981  17.959646  17.765487    12:  23  29   3962  4996  17.204658  18.533945    17.904788
-38:  106 114   4565  4910  18.014031  18.433233  18.227034
-
-39:  115 123   4953  5297  18.483782  18.874805  18.682185
-40:  124 133   5340  5728  18.922095  19.332992  19.130789    13:  29  36   4996  6202  18.533945  19.801451    19.198897
-41:  134 144   5771  6202  19.377073  19.801451  19.592946
-
-42:  145 156   6245  6718  19.842285  20.272889  20.061808
-43:  157 169   6761  7278  20.310373  20.739167  20.529583    14:  36  46   6202  7924  19.801451  21.222342    20.565177
-44:  170 183   7321  7881  20.773175  21.191895  20.987911
-
-45:  184 198   7924  8527  21.222342  21.623344  21.428652
-46:  199 215   8570  9259  21.650236  22.050787  21.857360    15:  46  58   7924  9991  21.222342  22.420001    21.882271
-47:  216 233   9302 10034  22.074042  22.440072  22.263795
-
-48-  234 253  10078 10896  22.459969  22.807140  22.640652
-49:  254 275  10939 11843  22.823891  23.144847  22.991444    16:  59  75  10164 12920  22.499251  23.461146    23.044078
-50:  276 300  11886 12920  23.158772  23.461146  23.317264
-
-51:  301 328  12963 14126  23.472530  23.748999  23.617861
-52:  329 359  14169 15461  23.758199  24.005540  23.888450    17:  75  99  12920 17054  23.461146  24.248491    23.920884
-53:  360 395  15504 17011  24.012922  24.242660  24.134368
-
-54:  396 436  17054 18777  24.248491  24.454928  24.357873
-55:  437 484  18820 20844  24.459492  24.647977  24.559711    18:  99 127  17054 21878  24.248491  24.727775    24.524955
-56:  485 511  20887 22007  24.651498  24.737100  24.695685
-*/
-
-
-/* V A R I A B L E S */
-float  MinVal   [PART_LONG];               // contains minimum tonality soffsets
-float  Loudness [PART_LONG];               // weighting factors for loudness calculation
-float  SPRD     [PART_LONG] [PART_LONG];   // tabulated spreading function
-float  O_MAX;
-float  O_MIN;
-float  FAC1;
-float  FAC2;                               // constants for offset calculation
-float  partLtq  [PART_LONG];               // threshold in quiet (partitions)
-float  invLtq   [PART_LONG];               // inverse threshold in quiet (partitions, long)
-float  fftLtq   [512];                     // threshold in quiet (FFT)
-float  Ltq_offset;                         // Offset for threshold in quiet
-float  Ltq_max;                            // maximum level for threshold in quiet
-float  TMN;
-float  NMT;
-float  TransDetect;
-unsigned int    EarModelFlag;
-int    MinValChoice;
-
+#include "libmpcpsy.h"
+
+#include <math.h>
 
 /*
@@ -156,5 +37,5 @@
      * third = 1/12
      * octave = 1/40 decade
-     * rest is linear interpolated, values are currently in millibel rel. 20 µPa
+     * rest is linear interpolated, values are currently in millibel rel. 20 Pa
      */
     static short tab [] = {
@@ -216,5 +97,6 @@
 // calculation of the threshold in quiet in FFT-resolution
 static void
-Ruhehoerschwelle ( unsigned int  EarModelFlag,
+Ruhehoerschwelle ( PsyModel* m,
+				   unsigned int  EarModelFlag,
                    int           Ltq_offset,
                    int           Ltq_max )
@@ -228,5 +110,5 @@
 
     for ( n = 0; n < 512; n++ ) {
-        f = (float) ( (n+1) * (float)(SampleFreq / 2000.) / 512 );   // Frequency in kHz
+		f = (float) ( (n+1) * (float)(m->SampleFreq / 2000.) / 512 );   // Frequency in kHz
 
         switch ( EarModelFlag / 100 ) {
@@ -235,8 +117,8 @@
             break;
         default:
-        case 1:         // measured threshold in quiet (Nick Berglmeir, Andree Buschmann, Kopfhörer)
+        case 1:         // measured threshold in quiet (Nick Berglmeir, Andree Buschmann, Kopfhï¿œer)
             tmp  = 3.00*pow (f,-0.8) -  5.0*exp (-0.1*(f-3.0)*(f-3.0)) + 0.0000015022693846297*pow (f, 6.0) + 10.*exp (-(f-0.1)*(f-0.1));
             break;
-        case 2:         // measured threshold in quiet (Filburt, Kopfhörer)
+        case 2:         // measured threshold in quiet (Filburt, Kopfhï¿œer)
             tmp  = 9.00*pow (f,-0.5) - 15.0*exp (-0.1*(f-4.0)*(f-4.0)) + 0.0341796875*pow (f, 2.5)          + 15.*exp (-(f-0.1)*(f-0.1)) - 18;
             tmp  = mind ( tmp, Ltq_max - 18 );
@@ -264,5 +146,5 @@
         tmp       = mind ( tmp, Ltq_max );              // Limit ATH
         tmp      += Ltq_offset - 23;                    // Add chosen Offset
-        fftLtq[n] = absLtq[n] = POW10 ( 0.1 * tmp);     // conversion into power
+        m->fftLtq[n] = absLtq[n] = POW10 ( 0.1 * tmp);     // conversion into power
     }
 
@@ -273,6 +155,6 @@
             erg = minf (erg, absLtq[k]);
 
-        partLtq[n] = erg;               // threshold in quiet
-        invLtq [n] = 1.f / partLtq[n];  // Inverse
+		m->partLtq[n] = erg;               // threshold in quiet
+		m->invLtq [n] = 1.f / m->partLtq[n];  // Inverse
     }
 }
@@ -300,12 +182,12 @@
 
 static double
-LongPart2Bark ( int Part )
-{
-    return Freq2Bark ((wl [Part] + wh [Part]) * SampleFreq / 2048.);
+LongPart2Bark ( PsyModel* m, int Part )
+{
+	return Freq2Bark ((wl [Part] + wh [Part]) * m->SampleFreq / 2048.);
 }
 
 // calculating the table for loudness calculation based on absLtq = ank
 static void
-Loudness_Tabelle (void)
+Loudness_Tabelle (PsyModel* m)
 {
     int    n;
@@ -315,8 +197,8 @@
     // ca. dB(A)
     for ( n = 0; n < PART_LONG; n++ ){
-        midfreq      = (wh[n] + wl[n] + 3) * (0.25 * SampleFreq / 512);     // center frequency in kHz, why +3 ???
+		midfreq      = (wh[n] + wl[n] + 3) * (0.25 * m->SampleFreq / 512);     // center frequency in kHz, why +3 ???
         tmp          = LOG10 (midfreq) - 3.5f;                                  // dB(A)
         tmp          = -10 * tmp * tmp + 3 - midfreq/3000;
-        Loudness [n] = POW10 ( 0.1 * tmp );                                     // conversion into power
+		m->Loudness [n] = POW10 ( 0.1 * tmp );                                     // conversion into power
     }
 }
@@ -370,5 +252,5 @@
 // calculating the coefficient for utilization of the tonality offset, depending on TMN und NMT
 static void
-Tonalitaetskoeffizienten ( void )
+Tonalitaetskoeffizienten ( PsyModel* m )
 {
     double                tmp;
@@ -376,21 +258,21 @@
     float                 bass;
 
-    bass = 0.1/8 * NMT;
-    if ( MinValChoice <= 2  &&  bass > 0.1 )
+	bass = 0.1/8 * m->NMT;
+	if ( m->MinValChoice <= 2  &&  bass > 0.1 )
         bass = 0.1f;
-    if ( MinValChoice <= 1 )
+	if ( m->MinValChoice <= 1 )
         bass = 0.0f;
 
     // alternative: calculation of the minval-values dependent on TMN and TMN
     for ( n = 0; n < PART_LONG; n++ ) {
-        tmp        = Bass ( (wl [n] + wh [n]) / 2048. * SampleFreq, TMN, NMT, bass );
-        MinVal [n] = POW10 ( -0.1 * tmp );                      // conversion into power
+		tmp        = Bass ( (wl [n] + wh [n]) / 2048. * m->SampleFreq, m->TMN, m->NMT, bass );
+		m->MinVal [n] = POW10 ( -0.1 * tmp );                      // conversion into power
     }
 
     // calculation of the constants for "tonality offset"
-    O_MAX = POW10 ( -0.1 * TMN );
-    O_MIN = POW10 ( -0.1 * NMT );
-    FAC1  = POW10 ( -0.1 * (NMT - (TMN - NMT) * 0.229) ) ;
-    FAC2  = (TMN - NMT) * (0.99011159 * 0.1);
+	m->O_MAX = POW10 ( -0.1 * m->TMN );
+	m->O_MIN = POW10 ( -0.1 * m->NMT );
+	m->FAC1  = POW10 ( -0.1 * (m->NMT - (m->TMN - m->NMT) * 0.229) ) ;
+	m->FAC2  = (m->TMN - m->NMT) * (0.99011159 * 0.1);
 }
 
@@ -398,5 +280,5 @@
 // calculation of the spreading function
 static void
-Spread ( void )
+Spread ( PsyModel* m )
 {
     int    i;
@@ -410,5 +292,5 @@
     for ( i = 0; i < PART_LONG; i++ ) {                 // i is masking Partition, Source
         for ( j = 0; j < PART_LONG; j++ ) {             // j is masking Partition, Target
-            tmpx = LongPart2Bark (j) - LongPart2Bark (i);// Difference of the partitions in Bark
+            tmpx = LongPart2Bark (m, j) - LongPart2Bark (m, i);// Difference of the partitions in Bark
             tmpy = tmpz = 0.;                           // tmpz = 0: no dip
 
@@ -422,5 +304,5 @@
 #else
                 x  = i  ?  wl[i]+wh[i]  :  1;
-                x *= SampleFreq / 1000. / 2048;         // center frequency in kHz
+                x *= m->SampleFreq / 1000. / 2048;         // center frequency in kHz
 #endif
                 // dB/Bark
@@ -432,5 +314,5 @@
 
             // calculate coefficient
-            SPRD[i][j] = POW10 ( -0.1 * (tmpy+tmpz) );  // [Source] [Target]
+			m->SPRD[i][j] = POW10 ( -0.1 * (tmpy+tmpz) );  // [Source] [Target]
         }
     }
@@ -440,7 +322,7 @@
         float  norm = 0.f;
         for ( j = 0; j < PART_LONG; j++ )               // j is masking Partition
-            norm += SPRD [j] [i];
+			norm += m->SPRD [j] [i];
         for ( j = 0; j < PART_LONG; j++ )               // j is masking Partition
-            SPRD [j] [i] /= norm;
+			m->SPRD [j] [i] /= norm;
     }
 }
@@ -448,14 +330,14 @@
 // call all initialisation procedures
 void
-Init_Psychoakustiktabellen ( void )
-{
-    Max_Band = (int) ( Bandwidth * 64. / SampleFreq );
-    if ( Max_Band <  1 ) Max_Band =  1;
-    if ( Max_Band > 31 ) Max_Band = 31;
-
-    Tonalitaetskoeffizienten ();
-    Ruhehoerschwelle ( EarModelFlag, Ltq_offset, Ltq_max );
-    Loudness_Tabelle ();
-    Spread ();
+Init_Psychoakustiktabellen ( PsyModel* m )
+{
+	m->Max_Band = (int) ( m->Bandwidth * 64. / m->SampleFreq );
+	if ( m->Max_Band <  1 ) m->Max_Band =  1;
+	if ( m->Max_Band > 31 ) m->Max_Band = 31;
+
+    Tonalitaetskoeffizienten (m);
+	Ruhehoerschwelle ( m, m->EarModelFlag, m->Ltq_offset, m->Ltq_max );
+    Loudness_Tabelle (m);
+    Spread (m);
 }
 
Index: mppenc/branches/r2d/src/analy_filter.c
===================================================================
--- mppenc/branches/r2d/src/analy_filter.c	(revision 59)
+++ mppenc/branches/r2d/src/analy_filter.c	(revision 60)
@@ -249,5 +249,4 @@
 
     /************************* calculate L-signal ***************************/
-    ENTER(180);
     memcpy ( X_L + X_MEM, X_L, 480*sizeof(*X_L) );
     x      = X_L + X_MEM;
@@ -286,5 +285,4 @@
         Matrixing ( MaxBand, M, Y_R, &out[0].R[n] );    // matrixing
     }
-    LEAVE(180);
 }
 
@@ -304,5 +302,4 @@
 
     /************************* calculate L-signal ***************************/
-    ENTER(180);
     memcpy ( X_L + X_MEM, X_L, 480*sizeof(*X_L) );
     x      = X_L + X_MEM;
@@ -340,5 +337,4 @@
         Matrixing ( MaxBand, M, Y_R, &out[0].R[n] );    // matrixing
     }
-    LEAVE(180);
 }
 
Index: mppenc/branches/r2d/src/bitstream.c
===================================================================
--- mppenc/branches/r2d/src/bitstream.c	(revision 59)
+++ mppenc/branches/r2d/src/bitstream.c	(revision 60)
@@ -41,6 +41,4 @@
 Change_Endian32 ( unsigned int* dst, size_t words32bit )
 {
-    ENTER(160);
-
     for ( ; words32bit--; dst++ ) {
 # if  INT_MAX >= 2147483647L
@@ -59,5 +57,4 @@
 # endif
     }
-    LEAVE(160);
     return;
 }
Index: mppenc/branches/r2d/src/encode_sv7.c
===================================================================
--- mppenc/branches/r2d/src/encode_sv7.c	(revision 59)
+++ mppenc/branches/r2d/src/encode_sv7.c	(revision 60)
@@ -144,5 +144,5 @@
             if ( q[i] != 1 )
                 return;
-        fprintf ( stderr, "Alles Nullsamples, aber Auflösung = %u\n", *Res );
+        fprintf ( stderr, "Alles Nullsamples, aber Auflï¿œung = %u\n", *Res );
         *Res = 0;
         break;
@@ -151,5 +151,5 @@
             if ( q[i] != 2 )
                 return;
-        fprintf ( stderr, "Alles Nullsamples, aber Auflösung = %u\n", *Res );
+        fprintf ( stderr, "Alles Nullsamples, aber Auflï¿œung = %u\n", *Res );
         *Res = 0;
         break;
@@ -177,6 +177,4 @@
     unsigned char        SCFI_R [32];
 
-    ENTER(110);
-
     /************************************ Resolution *********************************/
     WriteBits ( (unsigned int)Res_L[0], 4 );                            // subband 0
@@ -415,6 +413,4 @@
 
     }
-
-    LEAVE(110);
     return;
 }
Index: mppenc/branches/r2d/src/mppdec.h
===================================================================
--- mppenc/branches/r2d/src/mppdec.h	(revision 59)
+++ mppenc/branches/r2d/src/mppdec.h	(revision 60)
@@ -1161,7 +1161,4 @@
 # endif
 
-//// Profiler include //////////////////////////////////////////////
-#include "profile.h"
-
 #ifdef _MSC_VER
 #pragma warning ( disable : 4244 )
Index: mppenc/branches/r2d/src/mppenc.c
===================================================================
--- mppenc/branches/r2d/src/mppenc.c	(revision 59)
+++ mppenc/branches/r2d/src/mppenc.c	(revision 60)
@@ -26,19 +26,12 @@
 
 /* G L O B A L  V A R I A B L E S */
-float         SNR_comp_L [32];
-float         SNR_comp_R [32];             // SNR-compensation after SCF-combination and ANS-gain
 float         Power_L    [32] [3];
 float         Power_R    [32] [3];
 float         PNS = 0.;
-int           Max_Band;                    // maximum bandwidth
 
 /* MS-Coding */
 unsigned int  MS_Channelmode;              // global flag for enhanced functionality
-float         SampleFreq      =  0.;
-float         Bandwidth       =  0.;
 int           PredictionBands =  0;
 int           CombPenalities  = -1;
-extern float  KBD1            =  2;
-extern float  KBD2            = -1.;
 int           DisplayUpdateTime = 1;
 int           APE_Version     = 2000;
@@ -410,6 +403,4 @@
     int    n;
     int    idx;
-
-    ENTER(2);
     for ( n = 0; n < BLOCK; n++, N++ ) {
         idx           = n + CENTER;
@@ -422,5 +413,4 @@
         data->S[idx] *= scale;
     }
-    LEAVE(2);
 }
 
@@ -434,6 +424,4 @@
     int    n;
     int    idx;
-
-    ENTER(3);
     for ( n = 0; n < BLOCK; n++, N++ ) {
         idx           = n + CENTER;
@@ -446,5 +434,4 @@
         data->S[idx] *= scale;
     }
-    LEAVE(3);
 }
 
@@ -493,6 +480,4 @@
     float  SL;
     float  SR;
-
-    ENTER(4);
 
     for ( Band = 0; Band <= MaxBand; Band++ ) {         // Suche nach Maxima
@@ -673,6 +658,4 @@
             }
     }
-
-    LEAVE(4);
     return;
 }
@@ -689,6 +672,4 @@
     static float  errorR [32] [36 + MAX_NS_ORDER];
     int           Band;
-
-    ENTER(5);
 
     // quantize Subband- and Subframe-samples
@@ -717,6 +698,4 @@
         }
     }
-
-    LEAVE(5);
     return;
 }
@@ -772,6 +751,4 @@
     float  save [36];   // to adjust the scalefactors
     float  MNR;         // Mask-to-Noise ratio
-
-    ENTER(6);
 
     for ( Band = 0; Band <= MaxBand; Band++, res++, comp++, smr++, scf += 3, x += 72 ) {
@@ -814,5 +791,4 @@
 
     }
-    LEAVE(6);
     return;
 }
@@ -1596,6 +1572,4 @@
 
 
-    ENTER(2);
-
     // initialize PCM-data
     memset ( &Main, 0, sizeof Main );
@@ -1860,12 +1834,11 @@
         if ( N == LastValidFrame - 1 ) {
             WriteBits ( LastValidSamples, 11 );
-            // fprintf ( stderr, "\nGültige Samples im letzten Frame: %4u   \n", LastValidSamples );
+            // fprintf ( stderr, "\nGltige Samples im letzten Frame: %4u   \n", LastValidSamples );
         }
         if ( N >= LastValidFrame ) {
-            // fprintf ( stderr, "Zusätzlicher Frame %u (von %u) angehängt.   \n", N, LastValidFrame );
-        }
-
-    }
-    LEAVE(2);
+            // fprintf ( stderr, "Zusï¿œzlicher Frame %u (von %u) angehï¿œgt.   \n", N, LastValidFrame );
+        }
+
+    }
 
     // write the last incomplete word to buffer, so it's written during the next flush
@@ -1936,7 +1909,4 @@
             SendStartupMessage ( MPPENC_VERSION, 7, MPPENC_BUILD );
     }
-
-    START();
-    ENTER(1);
 
     // Welcome message
@@ -1978,6 +1948,4 @@
         stderr_printf("\a\a\a");
 
-    LEAVE(1);
-    REPORT();
 #ifdef BUGBUG
     reppr ();
Index: mppenc/branches/r2d/src/mppenc.h
===================================================================
--- mppenc/branches/r2d/src/mppenc.h	(revision 59)
+++ mppenc/branches/r2d/src/mppenc.h	(revision 60)
@@ -36,96 +36,12 @@
 #define X_MEM            1152
 
-// ans.c
-#define MAX_NS_ORDER        6                   // maximum order of the Adaptive Noise Shaping Filter (IIR)
-#define MAX_ANS_BANDS      16
-#define MAX_ANS_LINES    (32 * MAX_ANS_BANDS)   // maximum number of noiseshaped FFT-lines
-///////// 16 * MAX_ANS_BANDS not sufficient? //////////////////
-#define MS2SPAT1             0.5f
-#define MS2SPAT2             0.25f
-#define MS2SPAT3             0.125f
-#define MS2SPAT4             0.0625f
-
 // bitstream.c
 #define BUFFER_ALMOST_FULL  8192
 #define BUFFER_FULL         (BUFFER_ALMOST_FULL + 4352)         // 34490 bit/frame  1320.3 kbps
 
-// cvd.c
-#define MAX_CVD_LINE      300                   // maximum FFT-Index for CVD
-#define CVD_UNPRED          0.040f              // unpredictability (cw) for CVD-detected bins, e33 (04)
-#define MIN_ANALYZED_IDX   12                   // maximum base-frequency = 44100/MIN_ANALYZED_IDX ^^^^^^
-#define MED_ANALYZED_IDX   50                   // maximum base-frequency = 44100/MED_ANALYZED_IDX ^^^^^^
-#define MAX_ANALYZED_IDX  900                   // minimum base-frequency = 44100/MAX_ANALYZED_IDX  (816 for Amnesia)
-
-// mppenc.h
-#define CENTER            448                   // offset for centering current data in Main-array
-#define BLOCK            1152                   // blocksize
-#define ANABUFFER    (BLOCK + CENTER)           // size of PCM-data array for analysis
-
-// psy.c
-#define SHORTFFT_OFFSET   168                   // fft-offset for short FFT's
-#define PREFAC_LONG        10                   // preecho-factor for long partitions
-
-// psy_tab.h
-#define PART_LONG          57                   // number of partitions for long
-#define PART_SHORT     (PART_LONG / 3)          // number of partitions for short
-#define MAX_SPL            20                   // maximum assumed Sound Pressure Level
-
 // quant.h
 #define SCFfac              0.832980664785f     // = SCF[n-1]/SCF[n]
 
 // wave_in.h
-
-
-// fast but maybe more inaccurate, use if you need speed
-#if defined(__GNUC__) && !defined(__APPLE__)
-#  define SIN(x)      sinf ((float)(x))
-#  define COS(x)      cosf ((float)(x))
-#  define ATAN2(x,y)  atan2f ((float)(x), (float)(y))
-#  define SQRT(x)     sqrtf ((float)(x))
-#  define LOG(x)      logf ((float)(x))
-#  define LOG10(x)    log10f ((float)(x))
-#  define POW(x,y)    expf (logf(x) * (y))
-#  define POW10(x)    expf (M_LN10 * (x))
-#  define FLOOR(x)    floorf ((float)(x))
-#  define IFLOOR(x)   (int) floorf ((float)(x))
-#  define FABS(x)     fabsf ((float)(x))
-#else
-# define SIN(x)      (float) sin (x)
-# define COS(x)      (float) cos (x)
-# define ATAN2(x,y)  (float) atan2 (x, y)
-# define SQRT(x)     (float) sqrt (x)
-# define LOG(x)      (float) log (x)
-# define LOG10(x)    (float) log10 (x)
-# define POW(x,y)    (float) pow (x,y)
-# define POW10(x)    (float) pow (10., (x))
-# define FLOOR(x)    (float) floor (x)
-# define IFLOOR(x)   (int)   floor (x)
-# define FABS(x)     (float) fabs (x)
-#endif
-
-#define SQRTF(x)      SQRT (x)
-#ifdef FAST_MATH
-# define TABSTEP      64
-# define COSF(x)      my_cos ((float)(x))
-# define ATAN2F(x,y)  my_atan2 ((float)(x), (float)(y))
-# define IFLOORF(x)   my_ifloor ((float)(x))
-#else
-# undef  TABSTEP
-# define COSF(x)      COS (x)
-# define ATAN2F(x,y)  ATAN2 (x,y)
-# define IFLOORF(x)   IFLOOR (x)
-#endif
-
-typedef struct {
-    float  L [ANABUFFER];
-    float  R [ANABUFFER];
-    float  M [ANABUFFER];
-    float  S [ANABUFFER];
-} PCMDataTyp;
-
-typedef struct {
-    float  L [36];
-    float  R [36];
-} SubbandFloatTyp;
 
 typedef struct {
@@ -133,11 +49,4 @@
     unsigned int  R [36];
 } SubbandQuantTyp;
-
-typedef struct {
-    float  L [32];
-    float  R [32];
-    float  M [32];
-    float  S [32];
-} SMRTyp;
 
 typedef struct {
@@ -207,13 +116,4 @@
 void   rdft                ( const int, float*, int*, float* );
 void   Generate_FFT_Tables ( const int, int*, float* );
-
-
-// fft_routines.c
-void   Init_FFT      ( void );
-void   PowSpec256    ( const float*, float* );
-void   PowSpec1024   ( const float*, float* );
-void   PowSpec2048   ( const float*, float* );
-void   PolarSpec1024 ( const float*, float*, float* );
-void   Cepstrum2048  ( float* cep, const int );
 
 
Index: mppenc/branches/r2d/src/profile.c
===================================================================
--- mppenc/branches/r2d/src/profile.c	(revision 59)
+++ 	(revision )
@@ -1,174 +1,0 @@
-/*
- * Musepack audio compression
- * Copyright (C) 1999-2004 Buschmann/Klemm/Piecha/Wolf
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <string.h>
-#include "mppdec.h"
-#include "profile.h"
-
-/*
- *  For every architecture you want to profile/checkpoint you need the following items:
- *
- *  uintmax_t:
- *      A type which is used for time calculation, mostly 32 bit or 64 bit,
- *      should be large enough so that no overruns occures during the measurement
- *  STD_TIMER_CLK:
- *      Clock frequency of the used timer in MHz
- *  RDTSC():
- *      A macro reading the current time into a local variable timetemp with the type uintmax_t,
- *      Time is in 1.e-6/STD_TIMER_CLK seconds.
- *
- *  Places:
- *      typedef of uintmax_t:     profile.h
- *      RDTSC():                  profile.h
- *      STD_TIMER_CLK:            profile.c
- *      no-inline functions maybe needed by RDTSC():
- *                                profile.c
- */
-
-#ifdef PROFILE
-
-#ifdef __TURBOC__
-# define STD_TIMER_CLK  1.193181667 /* MHz */
-
-uintmax_t
-readtime ( void )               /* PC onboard timer */
-{
-    asm  XOR   AX, AX
-    asm  MOV   ES, AX
-    asm  OUT   67, AL
-    asm  MOV   DX, ES:[46Ch]
-    asm  IN    AL, 64
-    asm  XCHG  AL, AH
-    asm  IN    AL, 64
-    asm  XCHG  AL, AH
-    asm  NEG   AX
-}
-
-#elif defined USE_SYSV_TIMER
-# define STD_TIMER_CLK    1.0000000 /* MHz */
-
-# include <sys/time.h>
-# include <unistd.h>
-
-uintmax_t
-readtime ( void )               /* System V timer */
-{
-    struct timeval  tv;
-
-    gettimeofday ( &tv, NULL );
-    return tv.tv_sec * (uintmax_t)1000000LU + tv.tv_usec;
-}
-
-#else
-# define STD_TIMER_CLK  233.3333333 /* MHz */
-#endif
-
-
-uintmax_t       timecounter    [256];
-const char*     timename       [256];
-unsigned char   functionstack [1024];
-unsigned char*  functionstack_pointer = functionstack;
-
-
-static void Cdecl
-signal_handler ( int signum )
-{
-    char            name [128];
-    char            file [128];
-    char            no   [ 32];
-    unsigned char*  f;
-
-    (void) stderr_printf ( "\n\nSignal %d detected. Call stack:\n", signum );
-    for ( f = functionstack+1; f <= functionstack_pointer; f++ ) {
-        (void) sscanf        ( timename[*f], "%128[^|]|%128[^|]|%32[0-9]", name, file, no );
-        (void) stderr_printf ( "%-24.24s%12.12s:%s\n", name, file, no );
-    }
-    _exit ( 128+signum );
-}
-
-
-void
-set_signal ( void )
-{
-    signal ( SIGILL , signal_handler );
-    signal ( SIGINT , signal_handler );
-    signal ( SIGSEGV, signal_handler );
-    signal ( SIGFPE , signal_handler );
-}
-
-
-void
-report ( void )
-{
-    static char  dash [] = "---------------------------------------";
-    uintmax_t    sum;
-    uintmax_t    max;
-    int          i;
-    int          j;
-    int          k;
-    char         name [128];
-    char         file [128];
-    char         no   [ 32];
-    size_t       filelen;
-    double       MHz = STD_TIMER_CLK;
-
-#ifdef __linux__
-    FILE*        fp;
-
-    // read out CPU frequency if proc-FS is present
-    if ( (fp = fopen ("/proc/cpuinfo", "r")) != NULL ) {
-        while ( fgets(name, sizeof(name), fp) )
-            if ( 1 == sscanf ( name, "cpu MHz : %lf", &MHz ) )
-                break;
-        (void) fclose (fp);
-    }
-#endif
-
-    // calculate total time
-    for ( sum = 0, i = 1; i < sizeof(timecounter)/sizeof(*timecounter); i++ )
-        sum += timecounter [i];
-
-    (void) fprintf ( stderr, "\n%s%s\n", dash, dash );
-    (void) fprintf ( stderr, "100.0%%   %13.6f ms   *** TOTAL ***%25s[%.1f MHz]\n", sum/(MHz*1000.), "", MHz );
-
-    // output sorted
-    while ( 1 ) {
-        for ( max = 0, j = 1; j < sizeof(timecounter)/sizeof(*timecounter); j++ )
-            if ( timecounter [j] > max )
-                max = timecounter [k = j];
-        if (max == 0)
-            break;
-        sscanf ( timename [k], "%128[^|]|%128[^|]|%32[0-9]", name, file, no );
-        filelen = strlen (file);
-        (void) fprintf ( stderr, "%6.2f%%  %13.6f ms   %-28.28s%18.18s:%s\n",
-                         100. * timecounter[k] / sum, timecounter[k] / (MHz*1000.),
-                         name, filelen < 18 ? file : file+filelen-18, no );
-        timecounter [k] = 0;
-    }
-
-    (void) fprintf ( stderr, "%s%s\n", dash, dash );
-    (void) fflush  ( stderr );
-}
-
-#endif /* PROFILE */
-
-/* end of profile.c */
Index: mppenc/branches/r2d/src/profile.h
===================================================================
--- mppenc/branches/r2d/src/profile.h	(revision 59)
+++ 	(revision )
@@ -1,98 +1,0 @@
-/*
- * Musepack audio compression
- * Copyright (C) 1999-2004 Buschmann/Klemm/Piecha/Wolf
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef MPPDEC_PROFILE_H
-#define MPPDEC_PROFILE_H
-
-#ifdef PROFILE
-
-/* T I M E C O U N T - F U N C T I O N */
-# if   defined _WIN32
-typedef /*unsigned*/ __int64  uintmax_t;
-#pragma warning ( disable: 4035 )
-static __inline uintmax_t  rdtscll ( void ) { __asm { rdtsc }; }
-#pragma warning ( default: 4035 )
-#  define RDTSC()  timetemp = rdtscll ()
-#  define __FUNCTION__  "?"
-# elif defined __TURBOC__
-typedef signed long  uintmax_t;
-uintmax_t readtime ( void );
-#  define RDTSC()  timetemp = readtime ()
-#  define __FUNCTION__  "?"
-# else
-typedef unsigned long long  uintmax_t;
-#  include <asm/msr.h>
-#  define RDTSC()  rdtscll (timetemp)
-# endif /* _WIN32 */
-
-
-/* M A C R O S */
-# define _STR(x)    #x
-# define __STR(x)   _STR(x)
-
-# define ENTER(x)  do {                                                             \
-                     uintmax_t  timetemp;                                           \
-                     RDTSC();                                                       \
-                     timecounter[*functionstack_pointer]       += timetemp;         \
-                     timecounter[*++functionstack_pointer = x] -= timetemp;         \
-                     timename[x] = __FUNCTION__ "()|" __FILE__ "|" __STR(__LINE__); \
-                   } while (0)
-
-# define NEXT(x,n) do {                                                      \
-                     uintmax_t  timetemp;                                    \
-                     RDTSC();                                                \
-                     timecounter[*functionstack_pointer]     += timetemp;    \
-                     timecounter[*functionstack_pointer = x] -= timetemp;    \
-                     timename[x] = __FUNCTION__ "-" __STR(n) "|" __FILE__ "|" __STR(__LINE__); \
-                   } while (0)
-
-# define LEAVE(x)  do {                                                  \
-                     uintmax_t  timetemp;                                \
-                     RDTSC();                                            \
-                     timecounter[x]                        += timetemp;  \
-                     timecounter[*--functionstack_pointer] -= timetemp;  \
-                   } while (0)
-
-# define START()   set_signal ()
-# define REPORT()  report ()
-
-/* V A R I A B L E S */
-extern uintmax_t       timecounter    [256];
-extern const char*     timename       [256];
-extern unsigned char   functionstack [1024];
-extern unsigned char*  functionstack_pointer;
-
-/* F U N C T I O N S */
-void  set_signal ( void );
-void  report     ( void );
-
-#else
-
-/* M A C R O S */
-# define START()
-# define ENTER(x)
-# define NEXT(x,n)
-# define LEAVE(x)
-# define REPORT()
-
-#endif /* PROFILE */
-
-#endif /* MPPDEC_PROFILE_H */
-
-/* end of profile.h */
Index: mppenc/branches/r2d/src/tools.c
===================================================================
--- mppenc/branches/r2d/src/tools.c	(revision 59)
+++ mppenc/branches/r2d/src/tools.c	(revision 60)
@@ -88,5 +88,4 @@
 Change_Endian32 ( Uint32_t* dst, size_t words32bit )
 {
-    ENTER(160);
 
     for ( ; words32bit--; dst++ ) {
@@ -106,5 +105,4 @@
 # endif
     }
-    LEAVE(160);
     return;
 }
@@ -124,6 +122,4 @@
 {
     size_t  wordsread;
-
-    ENTER(161);
     wordsread = READ ( fp, dst, words32bit * sizeof(*dst) ) / sizeof(*dst);
 
@@ -132,5 +128,4 @@
 #endif
 
-    LEAVE(161);
     return wordsread;
 }
@@ -219,6 +214,4 @@
     Float  mid;
     Float  side;
-
-    ENTER(162);
 
     for ( Band = 0; Band <= Stop_Band; Band++ ) {
@@ -398,6 +391,4 @@
 
     }
-
-    LEAVE(162);
     return;
 }
@@ -438,6 +429,4 @@
     Float  ML;
     Float  MR;
-
-    ENTER(163);
 
     for ( Band = Start_Band; Band <= Stop_Band; Band++ ) {
@@ -471,5 +460,4 @@
 
     }
-    LEAVE(163);
     return;
 }
Index: mppenc/branches/r2d/src/wave_in.c
===================================================================
--- mppenc/branches/r2d/src/wave_in.c	(revision 59)
+++ mppenc/branches/r2d/src/wave_in.c	(revision 60)
@@ -272,6 +272,4 @@
     float*  s = data -> S + offset;
 
-    ENTER(120);
-
     // Read PCM data
 #ifdef _WIN32
@@ -376,6 +374,4 @@
         }
     }
-
-    LEAVE(120);
     return ReadSamples;
 }
@@ -453,6 +449,6 @@
 
 														// finally calculate number of samples
-    if (type->PCMBytes >= 0xFFFFFF00  ||  
-			type->PCMBytes == 0  ||  
+    if (type->PCMBytes >= 0xFFFFFF00  ||
+			type->PCMBytes == 0  ||
 			(Uint32_t)type->PCMBytes % (type -> Channels * type->BytesPerSample) != 0) {
 		type->PCMSamples = 36000000 * type->SampleFreq;
