annotate mp3lib/decod386.c @ 13593:e2dca00374f2

add new control message, that is send after end of stream, to flush all remaining frames in the video system required by xvid4 encoder.
author iive
date Sat, 09 Oct 2004 13:07:18 +0000
parents f60bc2314146
children 07e7a572bd84
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2 * Mpeg Layer-1,2,3 audio decoder
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 * ------------------------------
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 * copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 * See also 'README'
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 *
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 * slighlty optimized for machines without autoincrement/decrement.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 * The performance is highly compiler dependend. Maybe
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 * the decode.c version for 'normal' processor may be faster
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 * even for Intel processors.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13
1318
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
14 #include "../config.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15
1318
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
16 #if 0
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
17 /* old WRITE_SAMPLE */
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
18 /* is portable */
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
19 #define WRITE_SAMPLE(samples,sum,clip) { \
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
20 if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
21 else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; }\
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
22 else { *(samples) = sum; } \
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
23 }
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
24 #else
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 /* new WRITE_SAMPLE */
1318
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
26
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
27 /*
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
28 * should be the same as the "old WRITE_SAMPLE" macro above, but uses
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
29 * some tricks to avoid double->int conversions and floating point compares.
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
30 *
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
31 * Here's how it works:
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
32 * ((((65536.0 * 65536.0 * 16)+(65536.0 * 0.5))* 65536.0)) is
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
33 * 0x0010000080000000LL in hex. It computes 0x0010000080000000LL + sum
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
34 * as a double IEEE fp value and extracts the low-order 32-bits from the
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
35 * IEEE fp representation stored in memory. The 2^56 bit in the constant
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
36 * is intended to force the bits of "sum" into the least significant bits
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
37 * of the double mantissa. After an integer substraction of 0x80000000
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
38 * we have the original double value "sum" converted to an 32-bit int value.
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
39 *
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
40 * (Is that really faster than the clean and simple old version of the macro?)
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
41 */
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
42
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
43 /*
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
44 * On a SPARC cpu, we fetch the low-order 32-bit from the second 32-bit
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
45 * word of the double fp value stored in memory. On an x86 cpu, we fetch it
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
46 * from the first 32-bit word.
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
47 * I'm not sure if the WORDS_BIGENDIAN feature test covers all possible memory
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
48 * layouts of double floating point values an all cpu architectures. If
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
49 * it doesn't work for you, just enable the "old WRITE_SAMPLE" macro.
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
50 */
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
51 #if WORDS_BIGENDIAN
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
52 #define MANTISSA_OFFSET 1
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
53 #else
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
54 #define MANTISSA_OFFSET 0
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
55 #endif
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
56
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 /* sizeof(int) == 4 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 #define WRITE_SAMPLE(samples,sum,clip) { \
7299
131497b1f6ad - GCC 3.x (SPARC) is too clever for the double->int conversion trick used in
jkeil
parents: 4321
diff changeset
59 union { double dtemp; int itemp[2]; } u; int v; \
131497b1f6ad - GCC 3.x (SPARC) is too clever for the double->int conversion trick used in
jkeil
parents: 4321
diff changeset
60 u.dtemp = ((((65536.0 * 65536.0 * 16)+(65536.0 * 0.5))* 65536.0)) + (sum);\
131497b1f6ad - GCC 3.x (SPARC) is too clever for the double->int conversion trick used in
jkeil
parents: 4321
diff changeset
61 v = u.itemp[MANTISSA_OFFSET] - 0x80000000; \
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 if( v > 32767) { *(samples) = 0x7fff; (clip)++; } \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 else if( v < -32768) { *(samples) = -0x8000; (clip)++; } \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 else { *(samples) = v; } \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 }
1318
2052e18abd9d mp3 audio decoding didn't work on big-endian architectures
jkeil
parents: 1258
diff changeset
66 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 /*
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 #define WRITE_SAMPLE(samples,sum,clip) { \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 double dtemp; int v; \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 dtemp = ((((65536.0 * 65536.0 * 16)+(65536.0 * 0.5))* 65536.0)) + (sum);\
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 v = ((*(int *)&dtemp) - 0x80000000); \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 if( v > 32767) { *(samples) = 0x7fff; (clip)++; } \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 else if( v < -32768) { *(samples) = -0x8000; (clip)++; } \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 else { *(samples) = v; } \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79
13188
f60bc2314146 small gcc warning fixes
rathann
parents: 12291
diff changeset
80 static int synth_1to1(real *bandPtr,int channel,unsigned char *out,int *pnt);
f60bc2314146 small gcc warning fixes
rathann
parents: 12291
diff changeset
81
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 static int synth_1to1_mono(real *bandPtr,unsigned char *samples,int *pnt)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 short samples_tmp[64];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 short *tmp1 = samples_tmp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 int i,ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 int pnt1 = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 ret = synth_1to1(bandPtr,0,(unsigned char *) samples_tmp,&pnt1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 samples += *pnt;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 for(i=0;i<32;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 *( (short *) samples) = *tmp1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 samples += 2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 tmp1 += 2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 *pnt += 64;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 static int synth_1to1_mono2stereo(real *bandPtr,unsigned char *samples,int *pnt)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 int i,ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 ret = synth_1to1(bandPtr,0,samples,pnt);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 samples = samples + *pnt - 128;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 for(i=0;i<32;i++) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 ((short *)samples)[1] = ((short *)samples)[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 samples+=4;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117
12134
83822b2b0a17 some more globals
alex
parents: 9002
diff changeset
118 static synth_func_t synth_func;
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 787
diff changeset
119
4321
63fb32311b3b Fixing compilation on non-MMX but x86 systems
nick
parents: 4149
diff changeset
120 #if defined(CAN_COMPILE_X86_ASM)
13188
f60bc2314146 small gcc warning fixes
rathann
parents: 12291
diff changeset
121 int synth_1to1_MMX( real *bandPtr,int channel,short * samples)
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 787
diff changeset
122 {
1942
853be3ebe862 Eeeh I need some sleep, accidently commited a wrong version of the files that had other changes, too.
atmos4
parents: 1941
diff changeset
123 static short buffs[2][2][0x110];
853be3ebe862 Eeeh I need some sleep, accidently commited a wrong version of the files that had other changes, too.
atmos4
parents: 1941
diff changeset
124 static int bo = 1;
853be3ebe862 Eeeh I need some sleep, accidently commited a wrong version of the files that had other changes, too.
atmos4
parents: 1941
diff changeset
125 synth_1to1_MMX_s(bandPtr, channel, samples, (short *) buffs, &bo);
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 787
diff changeset
126 return 0;
1258
50b8a3a5eeed Portability and old binutils support
nick
parents: 1245
diff changeset
127 }
50b8a3a5eeed Portability and old binutils support
nick
parents: 1245
diff changeset
128 #endif
9002
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
129
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
130 #ifdef HAVE_ALTIVEC
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
131 #define dct64_base(a,b,c) if(gCpuCaps.hasAltiVec) dct64_altivec(a,b,c); else dct64(a,b,c)
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
132 #else /* HAVE_ALTIVEC */
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
133 #define dct64_base(a,b,c) dct64(a,b,c)
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
134 #endif /* HAVE_ALTIVEC */
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
135
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 static int synth_1to1(real *bandPtr,int channel,unsigned char *out,int *pnt)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 static real buffs[2][2][0x110];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 static const int step = 2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140 static int bo = 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 short *samples = (short *) (out + *pnt);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 real *b0,(*buf)[0x110];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 int clip = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 int bo1;
8543
60fe896e437c decode_i586.c version uses %ebp for its own use, so:
arpi
parents: 7299
diff changeset
145
60fe896e437c decode_i586.c version uses %ebp for its own use, so:
arpi
parents: 7299
diff changeset
146 *pnt += 128;
60fe896e437c decode_i586.c version uses %ebp for its own use, so:
arpi
parents: 7299
diff changeset
147
4149
9dde9f96f860 runtime cpudetect suppport
alex
parents: 1942
diff changeset
148 /* optimized for x86 */
4321
63fb32311b3b Fixing compilation on non-MMX but x86 systems
nick
parents: 4149
diff changeset
149 #if defined(CAN_COMPILE_X86_ASM)
1245
03b7e2955a20 Added newest MMX-optimized decore which speedups decoding at least on 13% for any cpu.
nick
parents: 787
diff changeset
150 if ( synth_func )
787
9bc104531aec mp3lib sse support - disabled by default
arpi_esp
parents: 736
diff changeset
151 {
8543
60fe896e437c decode_i586.c version uses %ebp for its own use, so:
arpi
parents: 7299
diff changeset
152 // printf("Calling %p, bandPtr=%p channel=%d samples=%p\n",synth_func,bandPtr,channel,samples);
60fe896e437c decode_i586.c version uses %ebp for its own use, so:
arpi
parents: 7299
diff changeset
153 // FIXME: synth_func() may destroy EBP, don't rely on stack contents!!!
60fe896e437c decode_i586.c version uses %ebp for its own use, so:
arpi
parents: 7299
diff changeset
154 return (*synth_func)( bandPtr,channel,samples);
736
59b0a9ec8604 K7 3dnow-dsp support
nickols_k
parents: 732
diff changeset
155 }
1258
50b8a3a5eeed Portability and old binutils support
nick
parents: 1245
diff changeset
156 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157 if(!channel) { /* channel=0 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 bo--;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159 bo &= 0xf;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160 buf = buffs[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 samples++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 buf = buffs[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 if(bo & 0x1) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168 b0 = buf[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 bo1 = bo;
9002
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
170 dct64_base(buf[1]+((bo+1)&0xf),buf[0]+bo,bandPtr);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172 else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 b0 = buf[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174 bo1 = bo+1;
9002
60d144a16088 An altivec-optimized DCT64 for mp3lib
arpi
parents: 8560
diff changeset
175 dct64_base(buf[0]+bo,buf[1]+bo+1,bandPtr);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 register int j;
8560
1320f1b3229d fixing that f*cking linker 'bug' e.g. naming config with libmp3lame
alex
parents: 8543
diff changeset
180 real *window = mp3lib_decwin + 16 - bo1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 for (j=16;j;j--,b0+=0x10,window+=0x20,samples+=step)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 real sum;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 sum = window[0x0] * b0[0x0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 sum -= window[0x1] * b0[0x1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 sum += window[0x2] * b0[0x2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 sum -= window[0x3] * b0[0x3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 sum += window[0x4] * b0[0x4];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 sum -= window[0x5] * b0[0x5];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 sum += window[0x6] * b0[0x6];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 sum -= window[0x7] * b0[0x7];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 sum += window[0x8] * b0[0x8];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 sum -= window[0x9] * b0[0x9];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 sum += window[0xA] * b0[0xA];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196 sum -= window[0xB] * b0[0xB];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 sum += window[0xC] * b0[0xC];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 sum -= window[0xD] * b0[0xD];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 sum += window[0xE] * b0[0xE];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 sum -= window[0xF] * b0[0xF];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 WRITE_SAMPLE(samples,sum,clip);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 real sum;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 sum = window[0x0] * b0[0x0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 sum += window[0x2] * b0[0x2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 sum += window[0x4] * b0[0x4];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 sum += window[0x6] * b0[0x6];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 sum += window[0x8] * b0[0x8];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212 sum += window[0xA] * b0[0xA];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 sum += window[0xC] * b0[0xC];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214 sum += window[0xE] * b0[0xE];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 WRITE_SAMPLE(samples,sum,clip);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216 b0-=0x10,window-=0x20,samples+=step;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 window += bo1<<1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 for (j=15;j;j--,b0-=0x10,window-=0x20,samples+=step)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 real sum;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 sum = -window[-0x1] * b0[0x0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 sum -= window[-0x2] * b0[0x1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225 sum -= window[-0x3] * b0[0x2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 sum -= window[-0x4] * b0[0x3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 sum -= window[-0x5] * b0[0x4];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 sum -= window[-0x6] * b0[0x5];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 sum -= window[-0x7] * b0[0x6];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 sum -= window[-0x8] * b0[0x7];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 sum -= window[-0x9] * b0[0x8];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 sum -= window[-0xA] * b0[0x9];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 sum -= window[-0xB] * b0[0xA];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234 sum -= window[-0xC] * b0[0xB];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 sum -= window[-0xD] * b0[0xC];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 sum -= window[-0xE] * b0[0xD];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237 sum -= window[-0xF] * b0[0xE];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 sum -= window[-0x0] * b0[0xF];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 WRITE_SAMPLE(samples,sum,clip);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 return clip;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247
12291
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
248 #ifdef USE_FAKE_MONO
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
249 static int synth_1to1_l(real *bandPtr,int channel,unsigned char *out,int *pnt)
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
250 {
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
251 int i,ret;
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
252
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
253 ret = synth_1to1(bandPtr,channel,out,pnt);
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
254 out = out + *pnt - 128;
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
255
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
256 for(i=0;i<32;i++) {
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
257 ((short *)out)[1] = ((short *)out)[0];
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
258 out+=4;
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
259 }
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
260
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
261 return ret;
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
262 }
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
263
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
264 static int synth_1to1_r(real *bandPtr,int channel,unsigned char *out,int *pnt)
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
265 {
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
266 int i,ret;
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
267
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
268 ret = synth_1to1(bandPtr,channel,out,pnt);
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
269 out = out + *pnt - 128;
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
270
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
271 for(i=0;i<32;i++) {
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
272 ((short *)out)[0] = ((short *)out)[1];
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
273 out+=4;
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
274 }
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
275
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
276 return ret;
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
277 }
4e6f75467d64 reorder funcs to avoid warnings/errors (gccs are nowadays are more pickier about code than gcc2.95 with -ansi)
alex
parents: 12134
diff changeset
278 #endif