annotate Plugins/Input/mpg123/layer3.c @ 1090:09eb2c83097a trunk

[svn] Psychoaccoustics support (to disable, temporarily add -UPSYCHO to your CFLAGS.): This commit brings psychoaccoustics support (as used in mp3surround decoders) to libmpgdec. For example, we can now almost fully compensate for lack of bandwidth in ISO compliant MP3 encodings. In addition, further inaccuracies with pitch and the lack of reverb feeling that some MP3s have are detected and automatically compensated for.
author nenolod
date Sat, 20 May 2006 20:36:10 -0700
parents 7897fba5a46e
children b5ae09a6c2f1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1 /*
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
2 * Mpeg Layer-3 audio decoder
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
3 * --------------------------
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
4 * copyright (c) 1995-1999 by Michael Hipp.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
5 * All rights reserved. See also 'README'
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
6 *
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
7 * Optimize-TODO: put short bands into the band-field without the stride
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
8 * of 3 reals
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
9 * Length-optimze: unify long and short band code where it is possible
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
10 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
11
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
12 #if 0
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
13 #define L3_DEBUG 1
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
14 #endif
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
15
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
16 #if 0
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
17 #define CUT_HF
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
18 #endif
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
19
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20 #include <stdlib.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
21 #include <math.h>
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
22 #include <glib.h>
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23 #include "audacious/output.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24 #include "mpg123.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25 #include "huffman.h"
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
26
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
27 #include "common.h"
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
28
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29 #include "getbits.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
31 static mpgdec_real ispow[8207];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
32 static mpgdec_real aa_ca[8],aa_cs[8];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
33 static mpgdec_real COS1[12][6];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
34 static mpgdec_real win[4][36];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
35 static mpgdec_real win1[4][36];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
36 static mpgdec_real gainpow2[256+118+4];
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
37
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
38 /* non static for external 3dnow functions */
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
39 mpgdec_real COS9[9];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
40 static mpgdec_real COS6_1,COS6_2;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
41 mpgdec_real tfcos36[9];
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
42
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
43 static mpgdec_real tfcos12[3];
972
7897fba5a46e [svn] - don't use dct9 in integer mode
nenolod
parents: 970
diff changeset
44
7897fba5a46e [svn] - don't use dct9 in integer mode
nenolod
parents: 970
diff changeset
45 #ifndef INTEGER_COMPILE
7897fba5a46e [svn] - don't use dct9 in integer mode
nenolod
parents: 970
diff changeset
46 # define NEW_DCT9
7897fba5a46e [svn] - don't use dct9 in integer mode
nenolod
parents: 970
diff changeset
47 #else
7897fba5a46e [svn] - don't use dct9 in integer mode
nenolod
parents: 970
diff changeset
48 # undef NEW_DCT9
7897fba5a46e [svn] - don't use dct9 in integer mode
nenolod
parents: 970
diff changeset
49 #endif
7897fba5a46e [svn] - don't use dct9 in integer mode
nenolod
parents: 970
diff changeset
50
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51 #ifdef NEW_DCT9
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
52 static mpgdec_real cos9[3],cos18[3];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 struct bandInfoStruct {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
56 int longIdx[23];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
57 int longDiff[22];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
58 int shortIdx[14];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
59 int shortDiff[13];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 int longLimit[9][23];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 int shortLimit[9][14];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
65 struct bandInfoStruct bandInfo[9] = {
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67 /* MPEG 1.0 */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
68 { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
69 {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
70 {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
71 {4,4,4,4,6,8,10,12,14,18,22,30,56} } ,
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
73 { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
74 {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
75 {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
76 {4,4,4,4,6,6,10,12,14,16,20,26,66} } ,
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
78 { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
79 {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
80 {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
81 {4,4,4,4,6,8,12,16,20,26,34,42,12} } ,
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 /* MPEG 2.0 */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
84 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
85 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
86 {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
87 {4,4,4,6,6,8,10,14,18,26,32,42,18 } } ,
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,52,64,70,76,36 } ,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 /* changed 19th value fropm 330 to 332 */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
93 { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
94 {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,54,62,70,76,36 } ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
95 {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
96 {4,4,4,6,8,10,12,14,18,24,32,44,12 } } ,
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
98 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
99 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 },
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
100 {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
101 {4,4,4,6,8,10,12,14,18,24,30,40,18 } } ,
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102 /* MPEG 2.5 */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
103 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
104 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
105 {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
106 {4,4,4,6,8,10,12,14,18,24,30,40,18} },
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
107 { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
108 {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
109 {0,12,24,36,54,78,108,144,186,240,312,402,522,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
110 {4,4,4,6,8,10,12,14,18,24,30,40,18} },
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
111 { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
112 {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
113 {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
114 {8,8,8,12,16,20,24,28,36,2,2,2,26} } ,
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
117 static int mapbuf0[9][152];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118 static int mapbuf1[9][156];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
119 static int mapbuf2[9][44];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120 static int *map[9][3];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 static int *mapend[9][3];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
123 static unsigned int n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
124 static unsigned int i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
126 static mpgdec_real tan1_1[16],tan2_1[16],tan1_2[16],tan2_2[16];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
127 static mpgdec_real pow1_1[2][16],pow2_1[2][16],pow1_2[2][16],pow2_2[2][16];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129 void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 mpg123_init_layer3(int down_sample_sblimit)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 int i, j, k, l;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 for (i = -256; i < 118 + 4; i++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135 gainpow2[i + 256] = pow((double) 2.0, -0.25 * (double) (i + 210));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
136 for (i = 0; i < 8207; i++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137 ispow[i] = pow((double) i, (double) 4.0 / 3.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139 for (i = 0; i < 8; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140 static double Ci[8] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141 { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
142 -0.0037
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
143 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
144 double sq = sqrt(1.0 + Ci[i] * Ci[i]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146 aa_cs[i] = 1.0 / sq;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
147 aa_ca[i] = Ci[i] / sq;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
148 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
149
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
150 for (i = 0; i < 18; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
151 win[0][i] = win[1][i] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
152 0.5 * sin(M_PI / 72.0 * (double) (2 * (i + 0) + 1)) /
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
153 cos(M_PI * (double) (2 * (i + 0) + 19) / 72.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
154 win[0][i + 18] = win[3][i + 18] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
155 0.5 * sin(M_PI / 72.0 * (double) (2 * (i + 18) + 1)) /
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
156 cos(M_PI * (double) (2 * (i + 18) + 19) / 72.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
157 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
158 for (i = 0; i < 6; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
159 win[1][i + 18] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
160 0.5 / cos(M_PI * (double) (2 * (i + 18) + 19) / 72.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
161 win[3][i + 12] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
162 0.5 / cos(M_PI * (double) (2 * (i + 12) + 19) / 72.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
163 win[1][i + 24] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
164 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 13)) / cos(M_PI *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
165 (double)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
166 (2 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
167 (i +
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
168 24) +
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
169 19) / 72.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
170 win[1][i + 30] = win[3][i] = 0.0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
171 win[3][i + 6] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
172 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
173 (double) (2
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
174 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
175 (i
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
176 +
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
177 6)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
178 +
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
179 19)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
180 / 72.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
181 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
182
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
183 for (i = 0; i < 9; i++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
184 COS9[i] = cos(M_PI / 18.0 * (double) i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
185
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
186 for (i = 0; i < 9; i++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
187 tfcos36[i] = 0.5 / cos(M_PI * (double) (i * 2 + 1) / 36.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
188 for (i = 0; i < 3; i++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
189 tfcos12[i] = 0.5 / cos(M_PI * (double) (i * 2 + 1) / 12.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
190
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
191 COS6_1 = cos(M_PI / 6.0 * (double) 1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
192 COS6_2 = cos(M_PI / 6.0 * (double) 2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
193
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
194 #ifdef NEW_DCT9
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
195 cos9[0] = cos(1.0 * M_PI / 9.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
196 cos9[1] = cos(5.0 * M_PI / 9.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
197 cos9[2] = cos(7.0 * M_PI / 9.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
198 cos18[0] = cos(1.0 * M_PI / 18.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
199 cos18[1] = cos(11.0 * M_PI / 18.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
200 cos18[2] = cos(13.0 * M_PI / 18.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
201 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
202
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
203 for (i = 0; i < 12; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
204 win[2][i] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
205 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
206 (double) (2
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
207 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
208 i
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
209 + 7)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
210 / 24.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
211 for (j = 0; j < 6; j++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
212 COS1[i][j] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
213 cos(M_PI / 24.0 * (double) ((2 * i + 7) * (2 * j + 1)));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
214 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
215
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
216 for (j = 0; j < 4; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
217 static int len[4] = { 36, 36, 12, 36 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
218
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
219 for (i = 0; i < len[j]; i += 2)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
220 win1[j][i] = +win[j][i];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
221 for (i = 1; i < len[j]; i += 2)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
222 win1[j][i] = -win[j][i];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
223 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
224
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
225 for (i = 0; i < 16; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
226 double t = tan((double) i * M_PI / 12.0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
227
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
228 tan1_1[i] = t / (1.0 + t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
229 tan2_1[i] = 1.0 / (1.0 + t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
230 tan1_2[i] = M_SQRT2 * t / (1.0 + t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
231 tan2_2[i] = M_SQRT2 / (1.0 + t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
232
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
233 for (j = 0; j < 2; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
234 double base = pow(2.0, -0.25 * (j + 1.0));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
235 double p1 = 1.0, p2 = 1.0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
236
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
237 if (i > 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
238 if (i & 1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
239 p1 = pow(base, (i + 1.0) * 0.5);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
240 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
241 p2 = pow(base, i * 0.5);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
242 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
243 pow1_1[j][i] = p1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
244 pow2_1[j][i] = p2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
245 pow1_2[j][i] = M_SQRT2 * p1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
246 pow2_2[j][i] = M_SQRT2 * p2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
247 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
248 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
249
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
250 for (j = 0; j < 9; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
251 struct bandInfoStruct *bi = &bandInfo[j];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
252 int *mp;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
253 int cb, lwin;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
254 int *bdf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
255
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
256 mp = map[j][0] = mapbuf0[j];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
257 bdf = bi->longDiff;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
258 for (i = 0, cb = 0; cb < 8; cb++, i += *bdf++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
259 *mp++ = (*bdf) >> 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
260 *mp++ = i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
261 *mp++ = 3;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
262 *mp++ = cb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
263 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
264 bdf = bi->shortDiff + 3;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
265 for (cb = 3; cb < 13; cb++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
266 int l = (*bdf++) >> 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
267
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
268 for (lwin = 0; lwin < 3; lwin++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
269 *mp++ = l;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
270 *mp++ = i + lwin;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
271 *mp++ = lwin;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
272 *mp++ = cb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
273 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
274 i += 6 * l;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
275 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
276 mapend[j][0] = mp;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
277
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
278 mp = map[j][1] = mapbuf1[j];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
279 bdf = bi->shortDiff + 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
280 for (i = 0, cb = 0; cb < 13; cb++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
281 int l = (*bdf++) >> 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
282
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
283 for (lwin = 0; lwin < 3; lwin++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
284 *mp++ = l;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
285 *mp++ = i + lwin;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
286 *mp++ = lwin;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
287 *mp++ = cb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
288 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
289 i += 6 * l;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
290 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
291 mapend[j][1] = mp;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
292
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
293 mp = map[j][2] = mapbuf2[j];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
294 bdf = bi->longDiff;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
295 for (cb = 0; cb < 22; cb++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
296 *mp++ = (*bdf++) >> 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
297 *mp++ = cb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
298 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
299 mapend[j][2] = mp;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
300
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
301 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
302
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
303 for (j = 0; j < 9; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
304 for (i = 0; i < 23; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
305 longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
306 if (longLimit[j][i] > (down_sample_sblimit))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
307 longLimit[j][i] = down_sample_sblimit;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
308 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
309 for (i = 0; i < 14; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
310 shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
311 if (shortLimit[j][i] > (down_sample_sblimit))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
312 shortLimit[j][i] = down_sample_sblimit;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
313 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
314 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
315
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
316 for (i = 0; i < 5; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
317 for (j = 0; j < 6; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
318 for (k = 0; k < 6; k++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
319 int n = k + j * 6 + i * 36;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
320
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
321 i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
322 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
323 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
324 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
325 for (i = 0; i < 4; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
326 for (j = 0; j < 4; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
327 for (k = 0; k < 4; k++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
328 int n = k + j * 4 + i * 16;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
329
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
330 i_slen2[n + 180] = i | (j << 3) | (k << 6) | (4 << 12);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
331 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
332 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
333 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
334 for (i = 0; i < 4; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
335 for (j = 0; j < 3; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
336 int n = j + i * 3;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
337
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
338 i_slen2[n + 244] = i | (j << 3) | (5 << 12);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
339 n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
340 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
341 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
342
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
343 for (i = 0; i < 5; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
344 for (j = 0; j < 5; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
345 for (k = 0; k < 4; k++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
346 for (l = 0; l < 4; l++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
347 int n = l + k * 4 + j * 16 + i * 80;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
348
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
349 n_slen2[n] =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
350 i | (j << 3) | (k << 6) | (l << 9) | (0 << 12);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
351 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
352 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
353 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
354 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
355 for (i = 0; i < 5; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
356 for (j = 0; j < 5; j++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
357 for (k = 0; k < 4; k++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
358 int n = k + j * 4 + i * 20;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
359
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
360 n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
361 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
362 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
363 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
364 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
365
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
366 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
367 * read additional side information (for MPEG 1 and MPEG 2)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
368 */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
369 static int III_get_side_info(struct III_sideinfo *si,int stereo,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
370 int ms_stereo,long sfreq,int single,int lsf)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
371 {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
372 int ch, gr;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
373 int powdiff = (single == 3) ? 4 : 0;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
374
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
375 static const int tabs[2][5] = { { 2,9,5,3,4 } , { 1,8,1,2,9 } };
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
376 const int *tab = tabs[lsf];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
377
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
378 si->main_data_begin = mpg123_getbits(&bsi,tab[1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
379 if (stereo == 1)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
380 si->private_bits = mpg123_getbits_fast(&bsi,tab[2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
381 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
382 si->private_bits = mpg123_getbits_fast(&bsi,tab[3]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
383
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
384 if(!lsf) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
385 for (ch=0; ch<stereo; ch++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
386 si->ch[ch].gr[0].scfsi = -1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
387 si->ch[ch].gr[1].scfsi = mpg123_getbits_fast(&bsi,4);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
388 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
389 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
390
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
391 for (gr=0; gr<tab[0]; gr++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
392 for (ch=0; ch<stereo; ch++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
393 register struct gr_info_s *gr_info = &(si->ch[ch].gr[gr]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
394
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
395 gr_info->part2_3_length = mpg123_getbits(&bsi,12);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
396 gr_info->big_values = mpg123_getbits(&bsi,9);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
397 if(gr_info->big_values > 288) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
398 gr_info->big_values = 288;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
399 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
400 gr_info->pow2gain = gainpow2+256 - mpg123_getbits_fast(&bsi,8) + powdiff;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
401 if(ms_stereo)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
402 gr_info->pow2gain += 2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
403 gr_info->scalefac_compress = mpg123_getbits(&bsi,tab[4]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
404
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
405 if(mpg123_get1bit(&bsi)) { /* window switch flag */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
406 int i;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
407 #ifdef L3_DEBUG
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
408 if(2*gr_info->big_values > bandInfo[sfreq].shortIdx[12])
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
409 fprintf(stderr,"L3: BigValues too large, doesn't make sense %d %d\n",2*gr_info->big_values,bandInfo[sfreq].shortIdx[12]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
410 #endif
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
411
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
412 gr_info->block_type = mpg123_getbits_fast(&bsi,2);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
413 gr_info->mixed_block_flag = mpg123_get1bit(&bsi);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
414 gr_info->table_select[0] = mpg123_getbits_fast(&bsi,5);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
415 gr_info->table_select[1] = mpg123_getbits_fast(&bsi,5);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
416 /*
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
417 * table_select[2] not needed, because there is no region2,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
418 * but to satisfy some verifications tools we set it either.
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
419 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
420 gr_info->table_select[2] = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
421 for(i=0;i<3;i++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
422 gr_info->full_gain[i] = gr_info->pow2gain + (mpg123_getbits_fast(&bsi,3)<<3);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
423
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
424 if(gr_info->block_type == 0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
425 return 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
426 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
427
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
428 /* region_count/start parameters are implicit in this case. */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
429 if(!lsf || gr_info->block_type == 2)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
430 gr_info->region1start = 36>>1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
431 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
432 /* check this again for 2.5 and sfreq=8 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
433 if(sfreq == 8)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
434 gr_info->region1start = 108>>1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
435 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
436 gr_info->region1start = 54>>1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
437 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
438 gr_info->region2start = 576>>1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
439 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
440 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
441 int i,r0c,r1c;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
442 #ifdef L3_DEBUG
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
443 if(2*gr_info->big_values > bandInfo[sfreq].longIdx[21])
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
444 fprintf(stderr,"L3: BigValues too large, doesn't make sense %d %d\n",2*gr_info->big_values,bandInfo[sfreq].longIdx[21]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
445 #endif
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
446 for (i=0; i<3; i++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
447 gr_info->table_select[i] = mpg123_getbits_fast(&bsi,5);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
448 r0c = mpg123_getbits_fast(&bsi,4);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
449 r1c = mpg123_getbits_fast(&bsi,3);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
450 gr_info->region1start = bandInfo[sfreq].longIdx[r0c+1] >> 1 ;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
451 if(r0c + r1c + 2 > 22)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
452 gr_info->region2start = 576>>1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
453 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
454 gr_info->region2start = bandInfo[sfreq].longIdx[r0c+1+r1c+1] >> 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
455 gr_info->block_type = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
456 gr_info->mixed_block_flag = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
457 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
458 if(!lsf)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
459 gr_info->preflag = mpg123_get1bit(&bsi);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
460 gr_info->scalefac_scale = mpg123_get1bit(&bsi);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
461 gr_info->count1table_select = mpg123_get1bit(&bsi);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
462 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
463 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
464
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
465 return !0;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
466 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
467
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
468 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
469 * read scalefactors
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
470 */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
471 static int III_get_scale_factors_1(int *scf,struct gr_info_s *gr_info)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
472 {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
473 static const unsigned char slen[2][16] = {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
474 {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4},
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
475 {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
476 };
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
477 int numbits;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
478 int num0 = slen[0][gr_info->scalefac_compress];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
479 int num1 = slen[1][gr_info->scalefac_compress];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
480
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
481 if (gr_info->block_type == 2) {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
482 int i=18;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
483 numbits = (num0 + num1) * 18;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
484
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
485 if (gr_info->mixed_block_flag) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
486 for (i=8;i;i--)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
487 *scf++ = mpg123_getbits_fast(&bsi,num0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
488 i = 9;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
489 numbits -= num0; /* num0 * 17 + num1 * 18 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
490 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
491
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
492 for (;i;i--)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
493 *scf++ = mpg123_getbits_fast(&bsi,num0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
494 for (i = 18; i; i--)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
495 *scf++ = mpg123_getbits_fast(&bsi,num1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
496 *scf++ = 0; *scf++ = 0; *scf++ = 0; /* short[13][0..2] = 0 */
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
497 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
498 else {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
499 int i;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
500 int scfsi = gr_info->scfsi;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
501
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
502 if(scfsi < 0) { /* scfsi < 0 => granule == 0 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
503 for(i=11;i;i--)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
504 *scf++ = mpg123_getbits_fast(&bsi,num0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
505 for(i=10;i;i--)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
506 *scf++ = mpg123_getbits_fast(&bsi,num1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
507 numbits = (num0 + num1) * 10 + num0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
508 *scf++ = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
509 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
510 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
511 numbits = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
512 if(!(scfsi & 0x8)) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
513 for (i=0;i<6;i++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
514 *scf++ = mpg123_getbits_fast(&bsi,num0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
515 numbits += num0 * 6;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
516 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
517 else {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
518 scf += 6;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
519 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
520
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
521 if(!(scfsi & 0x4)) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
522 for (i=0;i<5;i++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
523 *scf++ = mpg123_getbits_fast(&bsi,num0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
524 numbits += num0 * 5;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
525 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
526 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
527 scf += 5;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
528 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
529
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
530 if(!(scfsi & 0x2)) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
531 for(i=0;i<5;i++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
532 *scf++ = mpg123_getbits_fast(&bsi,num1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
533 numbits += num1 * 5;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
534 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
535 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
536 scf += 5;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
537 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
538
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
539 if(!(scfsi & 0x1)) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
540 for (i=0;i<5;i++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
541 *scf++ = mpg123_getbits_fast(&bsi,num1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
542 numbits += num1 * 5;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
543 }
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
544 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
545 scf += 5;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
546 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
547 *scf++ = 0; /* no l[21] in original sources */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
548 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
549 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
550 return numbits;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
551 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
552
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
553 static int III_get_scale_factors_2(int *scf,struct gr_info_s *gr_info,int i_stereo)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
554 {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
555 unsigned char *pnt;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
556 int i,j,n=0,numbits=0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
557 unsigned int slen;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
558
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
559 static unsigned char stab[3][6][4] = {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
560 { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
561 { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0} } ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
562 { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
563 {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
564 { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
565 { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0} } };
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
566
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
567 if(i_stereo) /* i_stereo AND second channel -> do_layer3() checks this */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
568 slen = i_slen2[gr_info->scalefac_compress>>1];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
569 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
570 slen = n_slen2[gr_info->scalefac_compress];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
571
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
572 gr_info->preflag = (slen>>15) & 0x1;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
573
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
574 n = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
575 if( gr_info->block_type == 2 ) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
576 n++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
577 if(gr_info->mixed_block_flag)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
578 n++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
579 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
580
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
581 pnt = stab[n][(slen>>12)&0x7];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
582
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
583 for(i=0;i<4;i++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
584 int num = slen & 0x7;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
585 slen >>= 3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
586 if(num) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
587 for(j=0;j<(int)(pnt[i]);j++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
588 *scf++ = mpg123_getbits_fast(&bsi,num);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
589 numbits += pnt[i] * num;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
590 }
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
591 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
592 for(j=0;j<(int)(pnt[i]);j++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
593 *scf++ = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
594 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
595 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
596
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
597 n = (n << 1) + 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
598 for(i=0;i<n;i++)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
599 *scf++ = 0;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
600
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
601 return numbits;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
602 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
603
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
604 static int pretab1[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0};
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
605 static int pretab2[22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
606
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
607 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
608 * Dequantize samples (includes huffman decoding)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
609 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
610 /* 24 is enough because tab13 has max. a 19 bit huffvector */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
611 #define BITSHIFT ((sizeof(long)-1)*8)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
612 #define REFRESH_MASK \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
613 while(num < BITSHIFT) { \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
614 mask |= ((unsigned long)mpg123_getbyte(&bsi))<<(BITSHIFT-num); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
615 num += 8; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
616 part2remain -= 8; }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
617
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
618 static int III_dequantize_sample(mpgdec_real xr[SBLIMIT][SSLIMIT],int *scf,
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
619 struct gr_info_s *gr_info,int sfreq,int part2bits)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
620 {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
621 int shift = 1 + gr_info->scalefac_scale;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
622 mpgdec_real *xrpnt = (mpgdec_real *) xr;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
623 int l[3],l3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
624 int part2remain = gr_info->part2_3_length - part2bits;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
625 int *me;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
626
738
f8c37b2bcfa1 [svn] - fix underwater effects, patch via Spyke @ #audacious
nenolod
parents: 701
diff changeset
627 int num = mpg123_getbitoffset(&bsi);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
628 long mask;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
629 /* we must split this, because for num==0 the shift is undefined if you do it in one step */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
630 mask = ((unsigned long) mpg123_getbits(&bsi,num))<<BITSHIFT;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
631 mask <<= 8-num;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
632 part2remain -= num;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
633
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
634 {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
635 int bv = gr_info->big_values;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
636 int region1 = gr_info->region1start;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
637 int region2 = gr_info->region2start;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
638
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
639 l3 = ((576>>1)-bv)>>1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
640 /*
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
641 * we may lose the 'odd' bit here !!
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
642 * check this later again
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
643 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
644 if(bv <= region1) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
645 l[0] = bv; l[1] = l[2] = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
646 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
647 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
648 l[0] = region1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
649 if(bv <= region2) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
650 l[1] = bv - l[0]; l[2] = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
651 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
652 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
653 l[1] = region2 - l[0]; l[2] = bv - region2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
654 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
655 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
656 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
657
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
658 if(gr_info->block_type == 2) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
659 /*
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
660 * decoding with short or mixed mode BandIndex table
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
661 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
662 int i,max[4];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
663 int step=0,lwin=3,cb=0;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
664 register mpgdec_real v = 0.0;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
665 register int *m,mc;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
666
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
667 if(gr_info->mixed_block_flag) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
668 max[3] = -1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
669 max[0] = max[1] = max[2] = 2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
670 m = map[sfreq][0];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
671 me = mapend[sfreq][0];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
672 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
673 else {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
674 max[0] = max[1] = max[2] = max[3] = -1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
675 /* max[3] not really needed in this case */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
676 m = map[sfreq][1];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
677 me = mapend[sfreq][1];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
678 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
679
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
680 mc = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
681 for(i=0;i<2;i++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
682 int lp = l[i];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
683 struct newhuff *h = ht+gr_info->table_select[i];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
684 for(;lp;lp--,mc--) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
685 register int x,y;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
686 if( (!mc) ) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
687 mc = *m++;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
688 xrpnt = ((mpgdec_real *) xr) + (*m++);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
689 lwin = *m++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
690 cb = *m++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
691 if(lwin == 3) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
692 v = gr_info->pow2gain[(*scf++) << shift];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
693 step = 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
694 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
695 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
696 v = gr_info->full_gain[lwin][(*scf++) << shift];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
697 step = 3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
698 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
699 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
700 {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
701 register short *val = h->table;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
702 REFRESH_MASK;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
703 while((y=*val++)<0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
704 if (mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
705 val -= y;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
706 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
707 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
708 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
709 x = y >> 4;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
710 y &= 0xf;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
711 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
712 if(x == 15 && h->linbits) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
713 max[lwin] = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
714 REFRESH_MASK;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
715 x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
716 num -= h->linbits+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
717 mask <<= h->linbits;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
718 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
719 *xrpnt = REAL_MUL(-ispow[x], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
720 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
721 *xrpnt = REAL_MUL(ispow[x], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
722 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
723 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
724 else if(x) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
725 max[lwin] = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
726 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
727 *xrpnt = REAL_MUL(-ispow[x], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
728 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
729 *xrpnt = REAL_MUL(ispow[x], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
730 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
731 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
732 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
733 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
734 *xrpnt = DOUBLE_TO_REAL(0.0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
735 xrpnt += step;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
736 if(y == 15 && h->linbits) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
737 max[lwin] = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
738 REFRESH_MASK;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
739 y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
740 num -= h->linbits+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
741 mask <<= h->linbits;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
742 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
743 *xrpnt = REAL_MUL(-ispow[y], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
744 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
745 *xrpnt = REAL_MUL(ispow[y], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
746 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
747 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
748 else if(y) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
749 max[lwin] = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
750 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
751 *xrpnt = REAL_MUL(-ispow[y], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
752 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
753 *xrpnt = REAL_MUL(ispow[y], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
754 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
755 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
756 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
757 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
758 *xrpnt = DOUBLE_TO_REAL(0.0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
759 xrpnt += step;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
760 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
761 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
762
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
763 for(;l3 && (part2remain+num > 0);l3--) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
764 struct newhuff *h = htc+gr_info->count1table_select;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
765 register short *val = h->table,a;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
766
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
767 REFRESH_MASK;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
768 while((a=*val++)<0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
769 if (mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
770 val -= a;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
771 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
772 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
773 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
774 if(part2remain+num <= 0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
775 num -= part2remain+num;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
776 break;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
777 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
778
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
779 for(i=0;i<4;i++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
780 if(!(i & 1)) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
781 if(!mc) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
782 mc = *m++;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
783 xrpnt = ((mpgdec_real *) xr) + (*m++);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
784 lwin = *m++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
785 cb = *m++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
786 if(lwin == 3) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
787 v = gr_info->pow2gain[(*scf++) << shift];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
788 step = 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
789 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
790 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
791 v = gr_info->full_gain[lwin][(*scf++) << shift];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
792 step = 3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
793 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
794 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
795 mc--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
796 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
797 if( (a & (0x8>>i)) ) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
798 max[lwin] = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
799 if(part2remain+num <= 0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
800 break;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
801 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
802 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
803 *xrpnt = -v;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
804 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
805 *xrpnt = v;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
806 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
807 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
808 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
809 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
810 *xrpnt = DOUBLE_TO_REAL(0.0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
811 xrpnt += step;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
812 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
813 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
814
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
815 if(lwin < 3) { /* short band? */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
816 while(1) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
817 for(;mc > 0;mc--) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
818 *xrpnt = DOUBLE_TO_REAL(0.0); xrpnt += 3; /* short band -> step=3 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
819 *xrpnt = DOUBLE_TO_REAL(0.0); xrpnt += 3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
820 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
821 if(m >= me)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
822 break;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
823 mc = *m++;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
824 xrpnt = ((mpgdec_real *) xr) + *m++;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
825 if(*m++ == 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
826 break; /* optimize: field will be set to zero at the end of the function */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
827 m++; /* cb */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
828 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
829 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
830
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
831 gr_info->maxband[0] = max[0]+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
832 gr_info->maxband[1] = max[1]+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
833 gr_info->maxband[2] = max[2]+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
834 gr_info->maxbandl = max[3]+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
835
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
836 {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
837 int rmax = max[0] > max[1] ? max[0] : max[1];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
838 rmax = (rmax > max[2] ? rmax : max[2]) + 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
839 gr_info->maxb = rmax ? shortLimit[sfreq][rmax] : longLimit[sfreq][max[3]+1];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
840 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
841
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
842 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
843 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
844 /*
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
845 * decoding with 'long' BandIndex table (block_type != 2)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
846 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
847 int *pretab = gr_info->preflag ? pretab1 : pretab2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
848 int i,max = -1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
849 int cb = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
850 int *m = map[sfreq][2];
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
851 register mpgdec_real v = 0.0;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
852 int mc = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
853
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
854 /*
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
855 * long hash table values
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
856 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
857 for(i=0;i<3;i++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
858 int lp = l[i];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
859 struct newhuff *h = ht+gr_info->table_select[i];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
860
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
861 for(;lp;lp--,mc--) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
862 int x,y;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
863
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
864 if(!mc) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
865 mc = *m++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
866 cb = *m++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
867 #ifdef CUT_HF
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
868 if(cb == 21) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
869 fprintf(stderr,"c");
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
870 v = 0.0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
871 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
872 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
873 #endif
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
874 v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
875
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
876 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
877 {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
878 register short *val = h->table;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
879 REFRESH_MASK;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
880 while((y=*val++)<0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
881 if (mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
882 val -= y;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
883 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
884 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
885 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
886 x = y >> 4;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
887 y &= 0xf;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
888 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
889
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
890 if (x == 15 && h->linbits) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
891 max = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
892 REFRESH_MASK;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
893 x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
894 num -= h->linbits+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
895 mask <<= h->linbits;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
896 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
897 *xrpnt++ = REAL_MUL(-ispow[x], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
898 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
899 *xrpnt++ = REAL_MUL(ispow[x], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
900 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
901 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
902 else if(x) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
903 max = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
904 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
905 *xrpnt++ = REAL_MUL(-ispow[x], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
906 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
907 *xrpnt++ = REAL_MUL(ispow[x], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
908 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
909 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
910 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
911 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
912 *xrpnt++ = DOUBLE_TO_REAL(0.0);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
913
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
914 if (y == 15 && h->linbits) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
915 max = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
916 REFRESH_MASK;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
917 y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
918 num -= h->linbits+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
919 mask <<= h->linbits;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
920 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
921 *xrpnt++ = REAL_MUL(-ispow[y], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
922 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
923 *xrpnt++ = REAL_MUL(ispow[y], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
924 mask <<= 1;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
925 }
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
926 else if(y) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
927 max = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
928 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
929 *xrpnt++ = REAL_MUL(-ispow[y], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
930 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
931 *xrpnt++ = REAL_MUL(ispow[y], v);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
932 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
933 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
934 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
935 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
936 *xrpnt++ = DOUBLE_TO_REAL(0.0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
937 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
938 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
939
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
940 /*
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
941 * short (count1table) values
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
942 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
943 for(;l3 && (part2remain+num > 0);l3--) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
944 struct newhuff *h = htc+gr_info->count1table_select;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
945 register short *val = h->table,a;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
946
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
947 REFRESH_MASK;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
948 while((a=*val++)<0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
949 if (mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
950 val -= a;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
951 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
952 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
953 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
954 if(part2remain+num <= 0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
955 num -= part2remain+num;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
956 break;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
957 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
958
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
959 for(i=0;i<4;i++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
960 if(!(i & 1)) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
961 if(!mc) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
962 mc = *m++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
963 cb = *m++;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
964 #ifdef CUT_HF
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
965 if(cb == 21) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
966 fprintf(stderr,"c");
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
967 v = 0.0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
968 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
969 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
970 #endif
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
971 v = gr_info->pow2gain[((*scf++) + (*pretab++)) << shift];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
972 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
973 mc--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
974 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
975 if ( (a & (0x8>>i)) ) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
976 max = cb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
977 if(part2remain+num <= 0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
978 break;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
979 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
980 if(mask < 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
981 *xrpnt++ = -v;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
982 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
983 *xrpnt++ = v;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
984 num--;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
985 mask <<= 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
986 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
987 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
988 *xrpnt++ = DOUBLE_TO_REAL(0.0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
989 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
990 }
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
991
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
992 gr_info->maxbandl = max+1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
993 gr_info->maxb = longLimit[sfreq][gr_info->maxbandl];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
994 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
995
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
996 part2remain += num;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
997 mpg123_backbits(&bsi,num);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
998 num = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
999
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1000 while(xrpnt < &xr[SBLIMIT][0])
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1001 *xrpnt++ = DOUBLE_TO_REAL(0.0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1002
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1003 while( part2remain > 16 ) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1004 mpg123_getbits(&bsi,16); /* Dismiss stuffing Bits */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1005 part2remain -= 16;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1006 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1007 if(part2remain > 0)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1008 mpg123_getbits(&bsi,part2remain);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1009 #if 0
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1010 else if(part2remain < 0) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1011 g_warn("Can't rewind stream by %d bits!\n",-part2remain);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1012 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1013 #endif
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1014 return 0;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1015 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1016
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1017 /*
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1018 * III_stereo: calculate mpgdec_real channel values for Joint-I-Stereo-mode
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1019 */
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1020 static void III_i_stereo(mpgdec_real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac,
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1021 struct gr_info_s *gr_info,int sfreq,int ms_stereo,int lsf)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1022 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1023 mpgdec_real (*xr)[SBLIMIT*SSLIMIT] = (mpgdec_real (*)[SBLIMIT*SSLIMIT] ) xr_buf;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1024 struct bandInfoStruct *bi = &bandInfo[sfreq];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1025
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1026 const mpgdec_real *tab1,*tab2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1027
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1028 int tab;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1029 static const mpgdec_real *tabs[3][2][2] = {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1030 { { tan1_1,tan2_1 } , { tan1_2,tan2_2 } },
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1031 { { pow1_1[0],pow2_1[0] } , { pow1_2[0],pow2_2[0] } } ,
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1032 { { pow1_1[1],pow2_1[1] } , { pow1_2[1],pow2_2[1] } }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1033 };
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1034
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1035 tab = lsf + (gr_info->scalefac_compress & lsf);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1036 tab1 = tabs[tab][ms_stereo][0];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1037 tab2 = tabs[tab][ms_stereo][1];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1038 #if 0
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1039 if(lsf) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1040 int p = gr_info->scalefac_compress & 0x1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1041 if(ms_stereo) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1042 tab1 = pow1_2[p]; tab2 = pow2_2[p];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1043 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1044 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1045 tab1 = pow1_1[p]; tab2 = pow2_1[p];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1046 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1047 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1048 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1049 if(ms_stereo) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1050 tab1 = tan1_2; tab2 = tan2_2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1051 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1052 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1053 tab1 = tan1_1; tab2 = tan2_1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1054 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1055 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1056 #endif
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1057
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1058 if (gr_info->block_type == 2) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1059 int lwin,do_l = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1060 if( gr_info->mixed_block_flag )
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1061 do_l = 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1062
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1063 for (lwin=0;lwin<3;lwin++) { /* process each window */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1064 /* get first band with zero values */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1065 int is_p,sb,idx,sfb = gr_info->maxband[lwin]; /* sfb is minimal 3 for mixed mode */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1066 if(sfb > 3)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1067 do_l = 0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1068
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1069 for(;sfb<12;sfb++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1070 is_p = scalefac[sfb*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1071 if(is_p != 7) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1072 mpgdec_real t1,t2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1073 sb = bi->shortDiff[sfb];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1074 idx = bi->shortIdx[sfb] + lwin;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1075 t1 = tab1[is_p]; t2 = tab2[is_p];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1076 for (; sb > 0; sb--,idx+=3) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1077 mpgdec_real v = xr[0][idx];
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1078 xr[0][idx] = REAL_MUL(v, t1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1079 xr[1][idx] = REAL_MUL(v, t2);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1080 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1081 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1082 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1083
413
97ba91ee699e [svn] Change copying of scaling properties from factor 11 -> 12, to factor 12
nenolod
parents: 177
diff changeset
1084 is_p = scalefac[12*3+lwin-gr_info->mixed_block_flag]; /* scale: 0-15 */
97ba91ee699e [svn] Change copying of scaling properties from factor 11 -> 12, to factor 12
nenolod
parents: 177
diff changeset
1085 sb = bi->shortDiff[13];
97ba91ee699e [svn] Change copying of scaling properties from factor 11 -> 12, to factor 12
nenolod
parents: 177
diff changeset
1086 idx = bi->shortIdx[13] + lwin;
97ba91ee699e [svn] Change copying of scaling properties from factor 11 -> 12, to factor 12
nenolod
parents: 177
diff changeset
1087
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1088 if(is_p != 7) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1089 mpgdec_real t1,t2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1090 t1 = tab1[is_p]; t2 = tab2[is_p];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1091 for ( ; sb > 0; sb--,idx+=3 ) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1092 mpgdec_real v = xr[0][idx];
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1093 xr[0][idx] = REAL_MUL(v, t1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1094 xr[1][idx] = REAL_MUL(v, t2);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1095 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1096 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1097 } /* end for(lwin; .. ; . ) */
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1098
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1099 /* also check l-part, if ALL bands in the three windows are 'empty'
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1100 * and mode = mixed_mode
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1101 */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1102 if (do_l) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1103 int sfb = gr_info->maxbandl;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1104 int idx = bi->longIdx[sfb];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1105
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1106 for ( ; sfb<8; sfb++ ) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1107 int sb = bi->longDiff[sfb];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1108 int is_p = scalefac[sfb]; /* scale: 0-15 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1109 if(is_p != 7) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1110 mpgdec_real t1,t2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1111 t1 = tab1[is_p]; t2 = tab2[is_p];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1112 for ( ; sb > 0; sb--,idx++) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1113 mpgdec_real v = xr[0][idx];
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1114 xr[0][idx] = REAL_MUL(v, t1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1115 xr[1][idx] = REAL_MUL(v, t2);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1116 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1117 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1118 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1119 idx += sb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1120 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1121 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1122 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1123 else { /* ((gr_info->block_type != 2)) */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1124 int sfb = gr_info->maxbandl;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1125 int is_p,idx = bi->longIdx[sfb];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1126
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1127 /* hmm ... maybe the maxbandl stuff for i-stereo is buggy? */
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1128 if(sfb <= 21) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1129 for ( ; sfb<21; sfb++) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1130 int sb = bi->longDiff[sfb];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1131 is_p = scalefac[sfb]; /* scale: 0-15 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1132 if(is_p != 7) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1133 mpgdec_real t1,t2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1134 t1 = tab1[is_p]; t2 = tab2[is_p];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1135 for ( ; sb > 0; sb--,idx++) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1136 mpgdec_real v = xr[0][idx];
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1137 xr[0][idx] = REAL_MUL(v, t1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1138 xr[1][idx] = REAL_MUL(v, t2);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1139 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1140 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1141 else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1142 idx += sb;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1143 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1144
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1145 is_p = scalefac[20];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1146 if(is_p != 7) { /* copy l-band 20 to l-band 21 */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1147 int sb;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1148 mpgdec_real t1 = tab1[is_p],t2 = tab2[is_p];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1149
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1150 for ( sb = bi->longDiff[21]; sb > 0; sb--,idx++ ) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1151 mpgdec_real v = xr[0][idx];
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1152 xr[0][idx] = REAL_MUL(v, t1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1153 xr[1][idx] = REAL_MUL(v, t2);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1154 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1155 }
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1156 } /* end: if(sfb <= 21) */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1157 } /* ... */
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1158 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1159
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1160 static void III_antialias(mpgdec_real xr[SBLIMIT][SSLIMIT],struct gr_info_s *gr_info) {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1161 int sblim;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1162
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1163 if(gr_info->block_type == 2) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1164 if(!gr_info->mixed_block_flag)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1165 return;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1166 sblim = 1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1167 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1168 else {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1169 sblim = gr_info->maxb-1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1170 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1171
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1172 /* 31 alias-reduction operations between each pair of sub-bands */
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1173 /* with 8 butterflies between each pair */
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1174
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1175 {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1176 int sb;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1177 mpgdec_real *xr1=(mpgdec_real *) xr[1];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1178
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1179 for(sb=sblim;sb;sb--,xr1+=10) {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1180 int ss;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1181 mpgdec_real *cs=aa_cs,*ca=aa_ca;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1182 mpgdec_real *xr2 = xr1;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1183
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1184 for(ss=7;ss>=0;ss--)
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1185 { /* upper and lower butterfly inputs */
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1186 register mpgdec_real bu = *--xr2,bd = *xr1;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1187 *xr2 = REAL_MUL(bu, *cs) - REAL_MUL(bd, *ca);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1188 *xr1++ = REAL_MUL(bd, *cs++) + REAL_MUL(bu, *ca++);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1189 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1190 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1191 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1192 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1193
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1194 /*
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1195 This is an optimized DCT from Jeff Tsay's maplay 1.2+ package.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1196 Saved one multiplication by doing the 'twiddle factor' stuff
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1197 together with the window mul. (MH)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1198
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1199 This uses Byeong Gi Lee's Fast Cosine Transform algorithm, but the
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1200 9 point IDCT needs to be reduced further. Unfortunately, I don't
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1201 know how to do that, because 9 is not an even number. - Jeff.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1202
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1203 ****************************************************************
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1204
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1205 9 Point Inverse Discrete Cosine Transform
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1206
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1207 This piece of code is Copyright 1997 Mikko Tommila and is freely usable
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1208 by anybody. The algorithm itself is of course in the public domain.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1209
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1210 Again derived heuristically from the 9-point WFTA.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1211
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1212 The algorithm is optimized (?) for speed, not for small rounding errors or
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1213 good readability.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1214
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1215 36 additions, 11 multiplications
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1216
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1217 Again this is very likely sub-optimal.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1218
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1219 The code is optimized to use a minimum number of temporary variables,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1220 so it should compile quite well even on 8-register Intel x86 processors.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1221 This makes the code quite obfuscated and very difficult to understand.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1222
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1223 References:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1224 [1] S. Winograd: "On Computing the Discrete Fourier Transform",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1225 Mathematics of Computation, Volume 32, Number 141, January 1978,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1226 Pages 175-199
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1227 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1228
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1229 /*------------------------------------------------------------------*/
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1230 /* */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1231 /* Function: Calculation of the inverse MDCT */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1232 /* */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1233 /*------------------------------------------------------------------*/
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1234
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1235 void dct36(mpgdec_real *inbuf,mpgdec_real *o1,mpgdec_real *o2,mpgdec_real *wintab,mpgdec_real *tsbuf)
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1236 {
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1237 #ifdef NEW_DCT9
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1238 mpgdec_real tmp[18];
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1239 #endif
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1240
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1241 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1242 register mpgdec_real *in = inbuf;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1243
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1244 in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1245 in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1246 in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1247 in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1248 in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1249 in[2] +=in[1]; in[1] +=in[0];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1250
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1251 in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1252 in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1253
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1254
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1255 #ifdef NEW_DCT9
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1256 #if 1
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1257 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1258 mpgdec_real t3;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1259 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1260 mpgdec_real t0, t1, t2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1261
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1262 t0 = REAL_MUL(COS6_2, (in[8] + in[16] - in[4]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1263 t1 = REAL_MUL(COS6_2, in[12]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1264
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1265 t3 = in[0];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1266 t2 = t3 - t1 - t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1267 tmp[1] = tmp[7] = t2 - t0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1268 tmp[4] = t2 + t0 + t0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1269 t3 += t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1270
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1271 t2 = REAL_MUL(COS6_1, (in[10] + in[14] - in[2]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1272 tmp[1] -= t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1273 tmp[7] += t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1274 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1275 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1276 mpgdec_real t0, t1, t2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1277
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1278 t0 = REAL_MUL(cos9[0], (in[4] + in[8] ));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1279 t1 = REAL_MUL(cos9[1], (in[8] - in[16]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1280 t2 = REAL_MUL(cos9[2], (in[4] + in[16]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1281
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1282 tmp[2] = tmp[6] = t3 - t0 - t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1283 tmp[0] = tmp[8] = t3 + t0 + t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1284 tmp[3] = tmp[5] = t3 - t1 + t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1285 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1286 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1287 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1288 mpgdec_real t1, t2, t3;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1289
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1290 t1 = REAL_MUL(cos18[0], (in[2] + in[10]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1291 t2 = REAL_MUL(cos18[1], (in[10] - in[14]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1292 t3 = REAL_MUL(COS6_1, in[6]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1293
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1294 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1295 mpgdec_real t0 = t1 + t2 + t3;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1296 tmp[0] += t0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1297 tmp[8] -= t0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1298 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1299
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1300 t2 -= t3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1301 t1 -= t3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1302
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1303 t3 = REAL_MUL(cos18[2], (in[2] + in[14]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1304
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1305 t1 += t3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1306 tmp[3] += t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1307 tmp[5] -= t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1308
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1309 t2 -= t3;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1310 tmp[2] += t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1311 tmp[6] -= t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1312 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1313
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1314 #else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1315 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1316 mpgdec_real t0, t1, t2, t3, t4, t5, t6, t7;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1317
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1318 t1 = REAL_MUL(COS6_2, in[12]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1319 t2 = REAL_MUL(COS6_2, (in[8] + in[16] - in[4]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1320
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1321 t3 = in[0] + t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1322 t4 = in[0] - t1 - t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1323 t5 = t4 - t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1324 tmp[4] = t4 + t2 + t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1325
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1326 t0 = REAL_MUL(cos9[0], (in[4] + in[8]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1327 t1 = REAL_MUL(cos9[1], (in[8] - in[16]));
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1328
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1329 t2 = REAL_MUL(cos9[2], (in[4] + in[16]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1330
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1331 t6 = t3 - t0 - t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1332 t0 += t3 + t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1333 t3 += t2 - t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1334
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1335 t2 = REAL_MUL(cos18[0], (in[2] + in[10]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1336 t4 = REAL_MUL(cos18[1], (in[10] - in[14]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1337 t7 = REAL_MUL(COS6_1, in[6]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1338
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1339 t1 = t2 + t4 + t7;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1340 tmp[0] = t0 + t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1341 tmp[8] = t0 - t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1342 t1 = REAL_MUL(cos18[2], (in[2] + in[14]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1343 t2 += t1 - t7;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1344
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1345 tmp[3] = t3 + t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1346 t0 = REAL_MUL(COS6_1, (in[10] + in[14] - in[2]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1347 tmp[5] = t3 - t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1348
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1349 t4 -= t1 + t7;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1350
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1351 tmp[1] = t5 - t0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1352 tmp[7] = t5 + t0;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1353 tmp[2] = t6 + t4;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1354 tmp[6] = t6 - t4;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1355 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1356 #endif
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1357
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1358 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1359 mpgdec_real t0, t1, t2, t3, t4, t5, t6, t7;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1360
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1361 t1 = REAL_MUL(COS6_2, in[13]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1362 t2 = REAL_MUL(COS6_2, (in[9] + in[17] - in[5]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1363
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1364 t3 = in[1] + t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1365 t4 = in[1] - t1 - t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1366 t5 = t4 - t2;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1367
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1368 t0 = REAL_MUL(cos9[0], (in[5] + in[9]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1369 t1 = REAL_MUL(cos9[1], (in[9] - in[17]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1370
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1371 tmp[13] = REAL_MUL((t4 + t2 + t2), tfcos36[17-13]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1372 t2 = REAL_MUL(cos9[2], (in[5] + in[17]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1373
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1374 t6 = t3 - t0 - t2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1375 t0 += t3 + t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1376 t3 += t2 - t1;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1377
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1378 t2 = REAL_MUL(cos18[0], (in[3] + in[11]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1379 t4 = REAL_MUL(cos18[1], (in[11] - in[15]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1380 t7 = REAL_MUL(COS6_1, in[7]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1381
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1382 t1 = t2 + t4 + t7;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1383 tmp[17] = REAL_MUL((t0 + t1), tfcos36[17-17]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1384 tmp[9] = REAL_MUL((t0 - t1), tfcos36[17-9]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1385 t1 = REAL_MUL(cos18[2], (in[3] + in[15]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1386 t2 += t1 - t7;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1387
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1388 tmp[14] = REAL_MUL((t3 + t2), tfcos36[17-14]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1389 t0 = REAL_MUL(COS6_1, (in[11] + in[15] - in[3]));
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1390 tmp[12] = REAL_MUL((t3 - t2), tfcos36[17-12]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1391
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1392 t4 -= t1 + t7;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1393
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1394 tmp[16] = REAL_MUL((t5 - t0), tfcos36[17-16]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1395 tmp[10] = REAL_MUL((t5 + t0), tfcos36[17-10]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1396 tmp[15] = REAL_MUL((t6 + t4), tfcos36[17-15]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1397 tmp[11] = REAL_MUL((t6 - t4), tfcos36[17-11]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1398 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1399
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1400 #define MACRO(v) { \
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1401 mpgdec_real tmpval; \
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1402 tmpval = tmp[(v)] + tmp[17-(v)]; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1403 out2[9+(v)] = REAL_MUL(tmpval, w[27+(v)]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1404 out2[8-(v)] = REAL_MUL(tmpval, w[26-(v)]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1405 tmpval = tmp[(v)] - tmp[17-(v)]; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1406 ts[SBLIMIT*(8-(v))] = out1[8-(v)] + REAL_MUL(tmpval, w[8-(v)]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1407 ts[SBLIMIT*(9+(v))] = out1[9+(v)] + REAL_MUL(tmpval, w[9+(v)]); }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1408
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1409 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1410 register mpgdec_real *out2 = o2;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1411 register mpgdec_real *w = wintab;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1412 register mpgdec_real *out1 = o1;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1413 register mpgdec_real *ts = tsbuf;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1414
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1415 MACRO(0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1416 MACRO(1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1417 MACRO(2);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1418 MACRO(3);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1419 MACRO(4);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1420 MACRO(5);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1421 MACRO(6);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1422 MACRO(7);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1423 MACRO(8);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1424 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1425
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1426 #else
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1427
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1428 {
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1429
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1430 #define MACRO0(v) { \
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1431 mpgdec_real tmp; \
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1432 out2[9+(v)] = REAL_MUL((tmp = sum0 + sum1), w[27+(v)]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1433 out2[8-(v)] = REAL_MUL(tmp, w[26-(v)]); } \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1434 sum0 -= sum1; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1435 ts[SBLIMIT*(8-(v))] = out1[8-(v)] + REAL_MUL(sum0, w[8-(v)]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1436 ts[SBLIMIT*(9+(v))] = out1[9+(v)] + REAL_MUL(sum0, w[9+(v)]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1437 #define MACRO1(v) { \
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1438 mpgdec_real sum0,sum1; \
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1439 sum0 = tmp1a + tmp2a; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1440 sum1 = REAL_MUL((tmp1b + tmp2b), tfcos36[(v)]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1441 MACRO0(v); }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1442 #define MACRO2(v) { \
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1443 mpgdec_real sum0,sum1; \
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1444 sum0 = tmp2a - tmp1a; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1445 sum1 = REAL_MUL((tmp2b - tmp1b), tfcos36[(v)]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1446 MACRO0(v); }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1447
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1448 register const mpgdec_real *c = COS9;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1449 register mpgdec_real *out2 = o2;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1450 register mpgdec_real *w = wintab;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1451 register mpgdec_real *out1 = o1;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1452 register mpgdec_real *ts = tsbuf;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1453
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1454 mpgdec_real ta33,ta66,tb33,tb66;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1455
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1456 ta33 = REAL_MUL(in[2*3+0], c[3]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1457 ta66 = REAL_MUL(in[2*6+0], c[6]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1458 tb33 = REAL_MUL(in[2*3+1], c[3]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1459 tb66 = REAL_MUL(in[2*6+1], c[6]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1460
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1461 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1462 mpgdec_real tmp1a,tmp2a,tmp1b,tmp2b;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1463 tmp1a = REAL_MUL(in[2*1+0], c[1]) + ta33 + REAL_MUL(in[2*5+0], c[5]) + REAL_MUL(in[2*7+0], c[7]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1464 tmp1b = REAL_MUL(in[2*1+1], c[1]) + tb33 + REAL_MUL(in[2*5+1], c[5]) + REAL_MUL(in[2*7+1], c[7]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1465 tmp2a = REAL_MUL(in[2*2+0], c[2]) + REAL_MUL(in[2*4+0], c[4]) + ta66 + REAL_MUL(in[2*8+0], c[8]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1466 tmp2b = REAL_MUL(in[2*2+1], c[2]) + REAL_MUL(in[2*4+1], c[4]) + tb66 + REAL_MUL(in[2*8+1], c[8]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1467
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1468 MACRO1(0);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1469 MACRO2(8);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1470 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1471
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1472 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1473 mpgdec_real tmp1a,tmp2a,tmp1b,tmp2b;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1474 tmp1a = REAL_MUL(( in[2*1+0] - in[2*5+0] - in[2*7+0] ), c[3]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1475 tmp1b = REAL_MUL(( in[2*1+1] - in[2*5+1] - in[2*7+1] ), c[3]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1476 tmp2a = REAL_MUL(( in[2*2+0] - in[2*4+0] - in[2*8+0] ), c[6]) - in[2*6+0] + in[2*0+0];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1477 tmp2b = REAL_MUL(( in[2*2+1] - in[2*4+1] - in[2*8+1] ), c[6]) - in[2*6+1] + in[2*0+1];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1478
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1479 MACRO1(1);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1480 MACRO2(7);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1481 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1482
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1483 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1484 mpgdec_real tmp1a,tmp2a,tmp1b,tmp2b;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1485 tmp1a = REAL_MUL(in[2*1+0], c[5]) - ta33 - REAL_MUL(in[2*5+0], c[7]) + REAL_MUL(in[2*7+0], c[1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1486 tmp1b = REAL_MUL(in[2*1+1], c[5]) - tb33 - REAL_MUL(in[2*5+1], c[7]) + REAL_MUL(in[2*7+1], c[1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1487 tmp2a = - REAL_MUL(in[2*2+0], c[8]) - REAL_MUL(in[2*4+0], c[2]) + ta66 + REAL_MUL(in[2*8+0], c[4]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1488 tmp2b = - REAL_MUL(in[2*2+1], c[8]) - REAL_MUL(in[2*4+1], c[2]) + tb66 + REAL_MUL(in[2*8+1], c[4]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1489
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1490 MACRO1(2);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1491 MACRO2(6);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1492 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1493
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1494 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1495 mpgdec_real tmp1a,tmp2a,tmp1b,tmp2b;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1496 tmp1a = REAL_MUL(in[2*1+0], c[7]) - ta33 + REAL_MUL(in[2*5+0], c[1]) - REAL_MUL(in[2*7+0], c[5]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1497 tmp1b = REAL_MUL(in[2*1+1], c[7]) - tb33 + REAL_MUL(in[2*5+1], c[1]) - REAL_MUL(in[2*7+1], c[5]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1498 tmp2a = - REAL_MUL(in[2*2+0], c[4]) + REAL_MUL(in[2*4+0], c[8]) + ta66 - REAL_MUL(in[2*8+0], c[2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1499 tmp2b = - REAL_MUL(in[2*2+1], c[4]) + REAL_MUL(in[2*4+1], c[8]) + tb66 - REAL_MUL(in[2*8+1], c[2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1500
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1501 MACRO1(3);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1502 MACRO2(5);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1503 }
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1504
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1505 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1506 mpgdec_real sum0,sum1;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1507 sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1508 sum1 = REAL_MUL((in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ), tfcos36[4]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1509 MACRO0(4);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1510 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1511 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1512 #endif
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1513
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1514 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1515 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1516
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1517 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1518 * new DCT12
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1519 */
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1520 static void dct12(mpgdec_real *in,mpgdec_real *rawout1,mpgdec_real *rawout2,register mpgdec_real *wi,register mpgdec_real *ts)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1521 {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1522 #define DCT12_PART1 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1523 in5 = in[5*3]; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1524 in5 += (in4 = in[4*3]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1525 in4 += (in3 = in[3*3]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1526 in3 += (in2 = in[2*3]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1527 in2 += (in1 = in[1*3]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1528 in1 += (in0 = in[0*3]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1529 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1530 in5 += in3; in3 += in1; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1531 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1532 in2 = REAL_MUL(in2, COS6_1); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1533 in3 = REAL_MUL(in3, COS6_1); \
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1534
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1535 #define DCT12_PART2 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1536 in0 += REAL_MUL(in4, COS6_2); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1537 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1538 in4 = in0 + in2; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1539 in0 -= in2; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1540 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1541 in1 += REAL_MUL(in5, COS6_2); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1542 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1543 in5 = REAL_MUL((in1 + in3), tfcos12[0]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1544 in1 = REAL_MUL((in1 - in3), tfcos12[2]); \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1545 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1546 in3 = in4 + in5; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1547 in4 -= in5; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1548 \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1549 in2 = in0 + in1; \
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1550 in0 -= in1;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1551
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1552
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1553 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1554 mpgdec_real in0,in1,in2,in3,in4,in5;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1555 register mpgdec_real *out1 = rawout1;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1556 ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1557 ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5];
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1558
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1559 DCT12_PART1
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1560
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1561 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1562 mpgdec_real tmp0,tmp1 = (in0 - in4);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1563 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1564 mpgdec_real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1565 tmp0 = tmp1 + tmp2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1566 tmp1 -= tmp2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1567 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1568 ts[(17-1)*SBLIMIT] = out1[17-1] + REAL_MUL(tmp0, wi[11-1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1569 ts[(12+1)*SBLIMIT] = out1[12+1] + REAL_MUL(tmp0, wi[6+1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1570 ts[(6 +1)*SBLIMIT] = out1[6 +1] + REAL_MUL(tmp1, wi[1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1571 ts[(11-1)*SBLIMIT] = out1[11-1] + REAL_MUL(tmp1, wi[5-1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1572 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1573
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1574 DCT12_PART2
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1575
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1576 ts[(17-0)*SBLIMIT] = out1[17-0] + REAL_MUL(in2, wi[11-0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1577 ts[(12+0)*SBLIMIT] = out1[12+0] + REAL_MUL(in2, wi[6+0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1578 ts[(12+2)*SBLIMIT] = out1[12+2] + REAL_MUL(in3, wi[6+2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1579 ts[(17-2)*SBLIMIT] = out1[17-2] + REAL_MUL(in3, wi[11-2]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1580
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1581 ts[(6 +0)*SBLIMIT] = out1[6+0] + REAL_MUL(in0, wi[0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1582 ts[(11-0)*SBLIMIT] = out1[11-0] + REAL_MUL(in0, wi[5-0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1583 ts[(6 +2)*SBLIMIT] = out1[6+2] + REAL_MUL(in4, wi[2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1584 ts[(11-2)*SBLIMIT] = out1[11-2] + REAL_MUL(in4, wi[5-2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1585 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1586
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1587 in++;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1588
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1589 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1590 mpgdec_real in0,in1,in2,in3,in4,in5;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1591 register mpgdec_real *out2 = rawout2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1592
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1593 DCT12_PART1
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1594
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1595 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1596 mpgdec_real tmp0,tmp1 = (in0 - in4);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1597 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1598 mpgdec_real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1599 tmp0 = tmp1 + tmp2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1600 tmp1 -= tmp2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1601 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1602 out2[5-1] = REAL_MUL(tmp0, wi[11-1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1603 out2[0+1] = REAL_MUL(tmp0, wi[6+1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1604 ts[(12+1)*SBLIMIT] += REAL_MUL(tmp1, wi[1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1605 ts[(17-1)*SBLIMIT] += REAL_MUL(tmp1, wi[5-1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1606 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1607
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1608 DCT12_PART2
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1609
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1610 out2[5-0] = REAL_MUL(in2, wi[11-0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1611 out2[0+0] = REAL_MUL(in2, wi[6+0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1612 out2[0+2] = REAL_MUL(in3, wi[6+2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1613 out2[5-2] = REAL_MUL(in3, wi[11-2]);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1614
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1615 ts[(12+0)*SBLIMIT] += REAL_MUL(in0, wi[0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1616 ts[(17-0)*SBLIMIT] += REAL_MUL(in0, wi[5-0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1617 ts[(12+2)*SBLIMIT] += REAL_MUL(in4, wi[2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1618 ts[(17-2)*SBLIMIT] += REAL_MUL(in4, wi[5-2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1619 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1620
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1621 in++;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1622
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1623 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1624 mpgdec_real in0,in1,in2,in3,in4,in5;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1625 register mpgdec_real *out2 = rawout2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1626 out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1627
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1628 DCT12_PART1
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1629
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1630 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1631 mpgdec_real tmp0,tmp1 = (in0 - in4);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1632 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1633 mpgdec_real tmp2 = REAL_MUL((in1 - in5), tfcos12[1]);
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1634 tmp0 = tmp1 + tmp2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1635 tmp1 -= tmp2;
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1636 }
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1637 out2[11-1] = REAL_MUL(tmp0, wi[11-1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1638 out2[6 +1] = REAL_MUL(tmp0, wi[6+1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1639 out2[0+1] += REAL_MUL(tmp1, wi[1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1640 out2[5-1] += REAL_MUL(tmp1, wi[5-1]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1641 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1642
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1643 DCT12_PART2
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1644
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1645 out2[11-0] = REAL_MUL(in2, wi[11-0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1646 out2[6 +0] = REAL_MUL(in2, wi[6+0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1647 out2[6 +2] = REAL_MUL(in3, wi[6+2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1648 out2[11-2] = REAL_MUL(in3, wi[11-2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1649
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1650 out2[0+0] += REAL_MUL(in0, wi[0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1651 out2[5-0] += REAL_MUL(in0, wi[5-0]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1652 out2[0+2] += REAL_MUL(in4, wi[2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1653 out2[5-2] += REAL_MUL(in4, wi[5-2]);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1654 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1655 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1656
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1657 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1658 * III_hybrid
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1659 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1660 static void
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1661 III_hybrid(mpgdec_real fsIn[SBLIMIT][SSLIMIT],
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1662 mpgdec_real tsOut[SSLIMIT][SBLIMIT], int ch,
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1663 struct gr_info_s *gr_info, struct frame *fr)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1664 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1665 static mpgdec_real block[2][2][SBLIMIT * SSLIMIT] = { {{0,}} };
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1666 static int blc[2] = { 0, 0 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1667
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1668 mpgdec_real *tspnt = (mpgdec_real *) tsOut;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1669 mpgdec_real *rawout1, *rawout2;
738
f8c37b2bcfa1 [svn] - fix underwater effects, patch via Spyke @ #audacious
nenolod
parents: 701
diff changeset
1670 int bt, sb = 0;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1671
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1672 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1673 int b = blc[ch];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1674 rawout1 = block[b][ch];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1675 b = -b + 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1676 rawout2 = block[b][ch];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1677 blc[ch] = b;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1678 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1679
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1680 if (gr_info->mixed_block_flag) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1681 sb = 2;
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1682 dct36(fsIn[0], rawout1, rawout2, win[0], tspnt);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1683 dct36(fsIn[1], rawout1 + 18, rawout2 + 18, win1[0], tspnt + 1);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1684 rawout1 += 36;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1685 rawout2 += 36;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1686 tspnt += 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1687 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1688
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1689 bt = gr_info->block_type;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1690 if (bt == 2) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1691 for (; sb < gr_info->maxb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1692 sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1693 dct12(fsIn[sb], rawout1, rawout2, win[2], tspnt);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1694 dct12(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, win1[2],
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1695 tspnt + 1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1696 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1697 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1698 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1699 for (; sb < gr_info->maxb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1700 sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36) {
127
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1701 dct36(fsIn[sb], rawout1, rawout2, win[bt], tspnt);
05d824e30afd [svn] Synchronize mpg123 code with mpg123-0.59s.mc3. This brings us superior accuracy to libMAD, apparently.
nenolod
parents: 61
diff changeset
1702 dct36(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, win1[bt],
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1703 tspnt + 1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1704 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1705 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1706
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1707 for (; sb < SBLIMIT; sb++, tspnt++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1708 int i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1709 for (i = 0; i < SSLIMIT; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1710 tspnt[i * SBLIMIT] = *rawout1++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1711 *rawout2++ = 0.0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1712 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1713 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1714 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1715 int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1716 mpg123_do_layer3(struct frame *fr)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1717 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1718 int gr, ch, ss;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1719 int scalefacs[2][39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1720 struct III_sideinfo sideinfo;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1721 int stereo = fr->stereo;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1722 int single = fr->single;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1723 int ms_stereo, i_stereo;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1724 int sfreq = fr->sampling_frequency;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1725 int stereo1, granules;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1726
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1727 if (stereo == 1) { /* stream is mono */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1728 stereo1 = 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1729 single = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1730 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1731 else if (single >= 0) /* stream is stereo, but force to mono */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1732 stereo1 = 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1733 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1734 stereo1 = 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1735
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1736 if (fr->mode == MPG_MD_JOINT_STEREO) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1737 ms_stereo = (fr->mode_ext & 0x2) >> 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1738 i_stereo = fr->mode_ext & 0x1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1739 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1740 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1741 ms_stereo = i_stereo = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1742
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1743 granules = fr->lsf ? 1 : 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1744 if (!III_get_side_info
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1745 (&sideinfo, stereo, ms_stereo, sfreq, single, fr->lsf))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1746 return 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1747
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1748 mpg123_set_pointer(sideinfo.main_data_begin);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1749
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1750 for (gr = 0; gr < granules; gr++) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1751 mpgdec_real hybridIn[2][SBLIMIT][SSLIMIT];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1752 mpgdec_real hybridOut[2][SSLIMIT][SBLIMIT];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1753
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1754 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1755 struct gr_info_s *gr_info = &(sideinfo.ch[0].gr[gr]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1756 long part2bits;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1757
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1758 if (fr->lsf)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1759 part2bits = III_get_scale_factors_2(scalefacs[0], gr_info, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1760 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1761 part2bits = III_get_scale_factors_1(scalefacs[0], gr_info);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1762
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1763 if (III_dequantize_sample
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1764 (hybridIn[0], scalefacs[0], gr_info, sfreq, part2bits))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1765 return 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1766 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1767
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1768 if (stereo == 2) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1769 struct gr_info_s *gr_info = &(sideinfo.ch[1].gr[gr]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1770 long part2bits;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1771
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1772 if (fr->lsf)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1773 part2bits =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1774 III_get_scale_factors_2(scalefacs[1], gr_info, i_stereo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1775 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1776 part2bits = III_get_scale_factors_1(scalefacs[1], gr_info);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1777
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1778 if (III_dequantize_sample
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1779 (hybridIn[1], scalefacs[1], gr_info, sfreq, part2bits))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1780 return 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1781
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1782 if (ms_stereo) {
701
d539e5c5f730 [svn] Fixes of the remaining GCC 4.1 warnings from external contributor Diego "Flameeyes" Petteno (Gentoo).
chainsaw
parents: 448
diff changeset
1783 unsigned int i, maxb = sideinfo.ch[0].gr[gr].maxb;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1784
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1785 if (sideinfo.ch[1].gr[gr].maxb > maxb)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1786 maxb = sideinfo.ch[1].gr[gr].maxb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1787 for (i = 0; i < SSLIMIT * maxb; i++) {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1788 mpgdec_real tmp0 = ((mpgdec_real *) hybridIn[0])[i];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1789 mpgdec_real tmp1 = ((mpgdec_real *) hybridIn[1])[i];
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1790 ((mpgdec_real *) hybridIn[0])[i] = tmp0 + tmp1;
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1791 ((mpgdec_real *) hybridIn[1])[i] = tmp0 - tmp1;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1792 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1793 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1794
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1795 if (i_stereo)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1796 III_i_stereo(hybridIn, scalefacs[1], gr_info, sfreq,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1797 ms_stereo, fr->lsf);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1798
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1799 if (ms_stereo || i_stereo || (single == 3)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1800 if (gr_info->maxb > sideinfo.ch[0].gr[gr].maxb)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1801 sideinfo.ch[0].gr[gr].maxb = gr_info->maxb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1802 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1803 gr_info->maxb = sideinfo.ch[0].gr[gr].maxb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1804 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1805
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1806 switch (single) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1807 case 3:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1808 {
701
d539e5c5f730 [svn] Fixes of the remaining GCC 4.1 warnings from external contributor Diego "Flameeyes" Petteno (Gentoo).
chainsaw
parents: 448
diff changeset
1809 register unsigned int i;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1810 register mpgdec_real *in0 = (mpgdec_real *) hybridIn[0],
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1811 *in1 = (mpgdec_real *) hybridIn[1];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1812 for (i = 0; i < SSLIMIT * gr_info->maxb; i++, in0++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1813 *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1814 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1815 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1816 case 1:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1817 {
701
d539e5c5f730 [svn] Fixes of the remaining GCC 4.1 warnings from external contributor Diego "Flameeyes" Petteno (Gentoo).
chainsaw
parents: 448
diff changeset
1818 register unsigned int i;
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1819 register mpgdec_real *in0 = (mpgdec_real *) hybridIn[0],
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 738
diff changeset
1820 *in1 = (mpgdec_real *) hybridIn[1];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1821 for (i = 0; i < SSLIMIT * gr_info->maxb; i++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1822 *in0++ = *in1++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1823 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1824 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1825 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1826 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1827
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1828 #ifdef XMMS_EQ
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1829 if (mpg123_info->eq_active) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1830 int i, sb;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1831
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1832 if (single < 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1833 for (sb = 0, i = 0; sb < SBLIMIT; sb++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1834 for (ss = 0; ss < SSLIMIT; ss++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1835 hybridIn[0][sb][ss] *= mpg123_info->eq_mul[i];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1836 hybridIn[1][sb][ss] *= mpg123_info->eq_mul[i++];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1837 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1838 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1839 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1840 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1841 for (sb = 0, i = 0; sb < SBLIMIT; sb++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1842 for (ss = 0; ss < SSLIMIT; ss++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1843 hybridIn[0][sb][ss] *= mpg123_info->eq_mul[i++];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1844 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1845 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1846 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1847 #endif
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1848
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1849 for (ch = 0; ch < stereo1; ch++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1850 struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1851
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1852 III_antialias(hybridIn[ch], gr_info);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1853 if (gr_info->maxb < 1 || gr_info->maxb > SBLIMIT)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1854 return 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1855 III_hybrid(hybridIn[ch], hybridOut[ch], ch, gr_info, fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1856 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1857
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1858 for (ss = 0; ss < SSLIMIT; ss++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1859 if (single >= 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1860 (fr->synth_mono) (hybridOut[0][ss], mpg123_pcm_sample,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1861 &mpg123_pcm_point);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1862 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1863 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1864 int p1 = mpg123_pcm_point;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1865
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1866 (fr->synth) (hybridOut[0][ss], 0, mpg123_pcm_sample, &p1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1867 (fr->synth) (hybridOut[1][ss], 1, mpg123_pcm_sample,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1868 &mpg123_pcm_point);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1869 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1870 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1871
1090
09eb2c83097a [svn] Psychoaccoustics support (to disable, temporarily add -UPSYCHO to your CFLAGS.):
nenolod
parents: 972
diff changeset
1872 #ifdef PSYCHO
09eb2c83097a [svn] Psychoaccoustics support (to disable, temporarily add -UPSYCHO to your CFLAGS.):
nenolod
parents: 972
diff changeset
1873 psycho_process(mpg123_pcm_sample, mpg123_pcm_point, mpg123_cfg.channels == 2 ? fr->stereo : 1);
09eb2c83097a [svn] Psychoaccoustics support (to disable, temporarily add -UPSYCHO to your CFLAGS.):
nenolod
parents: 972
diff changeset
1874 #endif
09eb2c83097a [svn] Psychoaccoustics support (to disable, temporarily add -UPSYCHO to your CFLAGS.):
nenolod
parents: 972
diff changeset
1875
448
15481b4017cc [svn] Revert hack that had no effect. The blips apparently occur on the output side of things.
nenolod
parents: 447
diff changeset
1876 if (mpg123_info->output_audio && mpg123_info->jump_to_time == -1) {
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1877 produce_audio(mpg123_ip.output->written_time(),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1878 mpg123_cfg.resolution ==
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1879 16 ? FMT_S16_NE : FMT_U8,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1880 mpg123_cfg.channels ==
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1881 2 ? fr->stereo : 1, mpg123_pcm_point,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1882 mpg123_pcm_sample, &mpg123_info->going);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1883 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1884
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1885 mpg123_pcm_point = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1886 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1887 return 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1888 }