catori 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -0
- data/bin/catori +9 -0
- data/changelog.txt +3 -0
- data/construir +3 -0
- data/crear_vista.sql +8 -0
- data/ext/audiofile/MANIFEST +8 -0
- data/ext/audiofile/README +11 -0
- data/ext/audiofile/audiofile.c +833 -0
- data/ext/audiofile/audiofile.rd +265 -0
- data/ext/audiofile/depend +0 -0
- data/ext/audiofile/extconf.rb +8 -0
- data/ext/audiofile/fail.rb +22 -0
- data/ext/audiofile/mkmf.log +34 -0
- data/ext/audiofile/test.rb +229 -0
- data/ext/flac/extconf.rb +5 -0
- data/ext/flac/flac.c +75 -0
- data/ext/flac/mkmf.log +12 -0
- data/ext/flac/test.rb +3 -0
- data/ext/mahoro-0.1/INSTALL +9 -0
- data/ext/mahoro-0.1/extconf.rb +7 -0
- data/ext/mahoro-0.1/mahoro.c +187 -0
- data/ext/mahoro-0.1/mkmf.log +24 -0
- data/ext/mahoro-0.1/test.rb +41 -0
- data/ext/mpc/extconf.rb +5 -0
- data/ext/mpc/id3tag.c +245 -0
- data/ext/mpc/id3tag.h +5 -0
- data/ext/mpc/mkmf.log +12 -0
- data/ext/mpc/mpc.c +56 -0
- data/ext/mpc/mpp.h +194 -0
- data/ext/mpc/mppdec.h +1171 -0
- data/ext/mpc/test.rb +3 -0
- data/ext/rmac/extconf.rb +7 -0
- data/ext/rmac/mkmf.log +22 -0
- data/ext/rmac/rmac.cpp +162 -0
- data/ext/vorbisfile/ChangeLog +11 -0
- data/ext/vorbisfile/README +33 -0
- data/ext/vorbisfile/configure +2 -0
- data/ext/vorbisfile/extconf.rb +9 -0
- data/ext/vorbisfile/mkmf.log +68 -0
- data/ext/vorbisfile/test.rb +78 -0
- data/ext/vorbisfile/vorbisfile.c +482 -0
- data/instalar.txt +19 -0
- data/install.rb +11 -0
- data/lib/audioinfo.rb +321 -0
- data/lib/catori.rb +131 -0
- data/lib/catori/Catalogador.rb +71 -0
- data/lib/catori/Db.rb +81 -0
- data/lib/catori/Gui.rb +52 -0
- data/lib/catori/Installer.rb +16 -0
- data/lib/catori/Query.rb +82 -0
- data/lib/catori/XML.rb +42 -0
- data/lib/catori/catori_gui.glade +340 -0
- data/lib/catori/catori_gui.glade.bak +340 -0
- data/lib/catori/catori_gui.gladep +8 -0
- data/lib/catori/catori_gui.gladep.bak +8 -0
- data/lib/catori/taglib.rb +227 -0
- data/lib/pixmaps/album.png +0 -0
- data/lib/pixmaps/artist.png +0 -0
- data/lib/pixmaps/cdr.png +0 -0
- data/lib/pixmaps/song.png +0 -0
- data/lib/taglib.rb +230 -0
- data/sql/catori_mysql.sql +68 -0
- data/sql/catori_pg.sql +65 -0
- data/tests/saw.ape +0 -0
- data/tests/saw.flac +0 -0
- data/tests/saw.mp3 +0 -0
- data/tests/saw.mpc +0 -0
- data/tests/saw.ogg +0 -0
- data/tests/saw.wav +0 -0
- data/tests/test_audioinfo.rb +43 -0
- metadata +217 -0
data/ext/mpc/id3tag.h
ADDED
data/ext/mpc/mkmf.log
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
have_library: checking for main() in -lmpcdec... -------------------- yes
|
2
|
+
|
3
|
+
"i686-pc-linux-gnu-gcc -o conftest -I. -I/usr/lib/ruby/1.8/i686-linux -I. -O2 -march=athlon-xp -m3dnow -msse -mfpmath=sse -mmmx -pipe -fno-strict-aliasing -fPIC -Wall conftest.c -L'.' -L'/usr/lib' -Wl,-R'/usr/lib' -L. -rdynamic -Wl,-export-dynamic -lruby18-static -lmpcdec -ldl -lcrypt -lm -lc"
|
4
|
+
checked program was:
|
5
|
+
/* begin */
|
6
|
+
1: /*top*/
|
7
|
+
2: int main() { return 0; }
|
8
|
+
3: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
|
9
|
+
/* end */
|
10
|
+
|
11
|
+
--------------------
|
12
|
+
|
data/ext/mpc/mpc.c
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#include <ctype.h>
|
3
|
+
#include <string.h>
|
4
|
+
#include <mpcdec/mpcdec.h>
|
5
|
+
#include <ruby.h>
|
6
|
+
#include "mppdec.h"
|
7
|
+
#include "id3tag.h"
|
8
|
+
|
9
|
+
static VALUE mMpc;
|
10
|
+
static VALUE cInfo;
|
11
|
+
static VALUE rb_mpc_info(VALUE module, VALUE filename);
|
12
|
+
|
13
|
+
void
|
14
|
+
Init_mpc()
|
15
|
+
{
|
16
|
+
mMpc = rb_define_module("Mpc");
|
17
|
+
cInfo = rb_define_class_under(mMpc, "Info", rb_cObject);
|
18
|
+
|
19
|
+
int i = 0;
|
20
|
+
//#define NA 5
|
21
|
+
const char *attr2[] =
|
22
|
+
{ "time", "bps","sample_rate", "channels", "bits_per_sample", "comments","tracknumber","year","title","artist","album","comment",NULL
|
23
|
+
};
|
24
|
+
|
25
|
+
for (i = 0; attr2[i]; i++) {
|
26
|
+
rb_define_attr(cInfo, attr2[i], 1, 0);
|
27
|
+
}
|
28
|
+
|
29
|
+
rb_define_module_function(mMpc, "info", rb_mpc_info, 1);
|
30
|
+
}
|
31
|
+
|
32
|
+
VALUE
|
33
|
+
rb_mpc_info(VALUE self, VALUE filename)
|
34
|
+
{
|
35
|
+
VALUE info = rb_class_new_instance(0, NULL, cInfo);
|
36
|
+
mpc_reader_file r;
|
37
|
+
mpc_streaminfo si;
|
38
|
+
TagInfo_t tags;
|
39
|
+
FILE *fp=fopen(STR2CSTR(filename),"r");
|
40
|
+
mpc_streaminfo_init(&si);
|
41
|
+
mpc_reader_setup_file_reader(&r,fp);
|
42
|
+
mpc_streaminfo_read(&si,&r.reader);
|
43
|
+
rb_iv_set(info,"@time",rb_float_new(mpc_streaminfo_get_length(&si)));
|
44
|
+
rb_iv_set(info,"@sample_rate",INT2FIX(si.sample_freq));
|
45
|
+
rb_iv_set(info,"@channels",INT2FIX(si.channels));
|
46
|
+
rb_iv_set(info,"@bps",rb_float_new(si.average_bitrate));
|
47
|
+
Read_APE_Tags(fp,&tags);
|
48
|
+
rb_iv_set(info,"@tracknumber",rb_str_new2(tags.Track));
|
49
|
+
rb_iv_set(info,"@year",rb_str_new2(tags.Year));
|
50
|
+
rb_iv_set(info,"@title",rb_str_new2(tags.Title));
|
51
|
+
rb_iv_set(info,"@artist",rb_str_new2(tags.Artist));
|
52
|
+
rb_iv_set(info,"@album",rb_str_new2(tags.Album));
|
53
|
+
rb_iv_set(info,"@comment",rb_str_new2(tags.Comment));
|
54
|
+
fclose(fp);
|
55
|
+
return info;
|
56
|
+
}
|
data/ext/mpc/mpp.h
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
/*
|
2
|
+
* Musepack audio compression
|
3
|
+
* Copyright (C) 1999-2004 Buschmann/Klemm/Piecha/Wolf
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*/
|
19
|
+
|
20
|
+
/******************************************************
|
21
|
+
* *
|
22
|
+
* Source Compile configuration *
|
23
|
+
* *
|
24
|
+
******************************************************/
|
25
|
+
|
26
|
+
|
27
|
+
#if !defined(__APPLE__)
|
28
|
+
// use optimized assembler routines for Pentium III/K6-2/Athlon (only 32 bit OS, Intel x86 and no MAKE_xxBITS)
|
29
|
+
// you need the NASM assembler on your system, the program becomes a little bit larger and decoding
|
30
|
+
// on AMD K6-2 (x3), AMD K6-III (x3), AMD Duron (x1.7), AMD Athlon (x1.7), Pentium III (x2) and Pentium 4 (x1.8) becomes faster
|
31
|
+
#define USE_ASM
|
32
|
+
|
33
|
+
// Open Sound System support (only Unix with OSS support)
|
34
|
+
// If your Operating System supports the Open Sound System, you can output to /dev/dsp* and
|
35
|
+
// instead of writing a file the program plays the file via this sound device.
|
36
|
+
// on some systems you also must link the libossaudio library, so maybe you also must edit the Makefile
|
37
|
+
#define USE_OSS_AUDIO
|
38
|
+
|
39
|
+
// Enlightenment Sound Daemon support (only Unix with ESD support)
|
40
|
+
// If your Operating System supports the Enlightenment Sound Daemon you can output to /dev/esd and
|
41
|
+
// instead of writing a file the program plays the file via this sound device.
|
42
|
+
// you also must link the libesd library, so maybe you also must edit the Makefile
|
43
|
+
#define USE_ESD_AUDIO
|
44
|
+
|
45
|
+
#endif
|
46
|
+
|
47
|
+
// native Sun Onboard-Audio support (only SunOS)
|
48
|
+
// If you have a Sun Workstation with Onboard-Audio, you can output to /dev/audio and
|
49
|
+
// instead of writing a file the program plays the file via this sound device.
|
50
|
+
// Some machines lacking librt.a so you are unable to link a static executable with realtime-support.
|
51
|
+
// Although you can still perfectly use the dynamic executable.
|
52
|
+
//#define USE_SUN_AUDIO
|
53
|
+
|
54
|
+
// Sound support for SGI Irix
|
55
|
+
// If you have a SGI Workstation running IRIX, you can output to /dev/audio and
|
56
|
+
// instead of writing a file the program plays the file via this sound device.
|
57
|
+
#define USE_IRIX_AUDIO
|
58
|
+
|
59
|
+
// Audio support for Windows (WAVE OUT) (only Windows)
|
60
|
+
// If you have a Windows based system and if you want also play files directly instead of only writing audio files,
|
61
|
+
// then define the next item
|
62
|
+
#define USE_WIN_AUDIO
|
63
|
+
|
64
|
+
// Buffersize for Windows Audio in 4.5 KByte units
|
65
|
+
// Only needed for Windows+USE_WIN_AUDIO
|
66
|
+
// Good values are 8...32 for fast machines and 128...512 for slow machines
|
67
|
+
// large values decrease average performance a little bit, increase memory
|
68
|
+
// consumption (1 Block = 4.5 KByte), but increase buffering, so it takes a
|
69
|
+
// longer time to get a drop out. Note that I don't have a 486/80...133, so
|
70
|
+
// I don't know anything about their performance.
|
71
|
+
// (Attention: 512 = additional 2.3 MByte of memory)
|
72
|
+
#define MAX_WAVEBLOCKS 40
|
73
|
+
|
74
|
+
// increase priority if destination is an audio device
|
75
|
+
// this increases the priority of the decoder when playing the file directly to a sound card to reduce/prevent
|
76
|
+
// drop outs during the playback due to CPU time shortage
|
77
|
+
#define USE_NICE
|
78
|
+
|
79
|
+
// use realtime scheduling if destination is an audio device
|
80
|
+
// This sets the program to real time priority when playing the file directly to a sound card.
|
81
|
+
// Now it should really difficult to get drop outs (file IO and other realtime programs are the remaining weak points)
|
82
|
+
#define USE_REALTIME
|
83
|
+
|
84
|
+
// use ANSI-Escape sequences to structure output
|
85
|
+
#define USE_ANSI_ESCAPE
|
86
|
+
|
87
|
+
// Use termios for reading values from keyboard without echo and ENTER
|
88
|
+
#define USE_TERMIOS
|
89
|
+
|
90
|
+
// if none of the next three macros MAKE_xxBIT is defined,
|
91
|
+
// normal non-dithered and non-shaped 16 bit PCM output is generated
|
92
|
+
|
93
|
+
// create 16 bit Output
|
94
|
+
// output is 16 bit wide, you can also dither and noise shape
|
95
|
+
//#define MAKE_16BIT
|
96
|
+
|
97
|
+
// create 24 bit Output
|
98
|
+
// output is 24 bit wide instead of 16 bit wide, you can also dither and noise shape
|
99
|
+
//#define MAKE_24BIT
|
100
|
+
|
101
|
+
// create 32 bit Output
|
102
|
+
// output is 32 bit wide instead of 16 bit wide, you can also dither and noise shape
|
103
|
+
//#define MAKE_32BIT
|
104
|
+
#define MPP_ENCODER 1
|
105
|
+
// Select subset of function used for file I/O:
|
106
|
+
// 1: ANSI via file pointer (FILE*)
|
107
|
+
// 2: POSIX via file handle (int or HANDLE)
|
108
|
+
// 3: POSIX like lowest level function of Turbo/Borland C
|
109
|
+
// 4: WinAMP 3: running inside WinAMP
|
110
|
+
// Try to use '2', if this doesn't work, try '1'. '3' is for Borland compilers.
|
111
|
+
#ifndef FILEIO
|
112
|
+
# if defined MPP_ENCODER
|
113
|
+
# define FILEIO 1 // mppenc still uses buffered ANSI-I/O
|
114
|
+
# elif defined MPP_DECODER
|
115
|
+
# define FILEIO 2
|
116
|
+
# else
|
117
|
+
# error Neigher MPP_DECODER nor MPP_ENCODER is defined. Abort.
|
118
|
+
# endif
|
119
|
+
#endif
|
120
|
+
|
121
|
+
// the POSIX function read() can return less bytes than requested not only at the end of the file.
|
122
|
+
// if this happens, the following macro must be defined:
|
123
|
+
#define HAVE_INCOMPLETE_READ
|
124
|
+
|
125
|
+
// use a shorter Huffman_t representation, may be faster
|
126
|
+
// use for performance tuning
|
127
|
+
#define USE_HUFF_PACK
|
128
|
+
|
129
|
+
// use shorter representation for SCF_Index[][] and Res[], may be faster
|
130
|
+
// use for performance tuning
|
131
|
+
#define USE_ARRAY_PACK
|
132
|
+
|
133
|
+
// use the System 5 timer for profiling
|
134
|
+
// otherwise a special piece of code for Turbo-C is used or the Timestamp Counter on Intel IA32/gcc systems.
|
135
|
+
// Both is highly non portable. This solution is more portable (you only need a SYS 5 compatible system,
|
136
|
+
// but also much much more inaccurate.
|
137
|
+
//#define USE_SYSV_TIMER
|
138
|
+
|
139
|
+
// do a memory shift every n subband samples, otherwise only increment pointer (6, 12, 18 and 36 are good values)
|
140
|
+
// use for performance tuning
|
141
|
+
#define VIRT_SHIFT 18
|
142
|
+
|
143
|
+
// selects InputBuff size, size is 4 * 2^IBUFLOG2 bytes (11...14 are good values)
|
144
|
+
// use for performance tuning
|
145
|
+
// can also be used to eliminate disk performance issue while tuning the program
|
146
|
+
// (set to a value, so the test cases are fully read before decoding
|
147
|
+
#define IBUFLOG2 14
|
148
|
+
|
149
|
+
// Dump contents of MPEGplus files (only for development), 0x00 no dump
|
150
|
+
// Bit 0: maxband, Bit 1: msbits, Bit 2: allocation/resolution, Bit 3: SCF
|
151
|
+
// Bit 4: Subsamples, Bit 5: Datenrate, Bit 6: Bitusage der Sektionen
|
152
|
+
//#define DUMPSELECT 0xFF
|
153
|
+
|
154
|
+
// 16 bit and 32 bit accesses must be aligned, otherwise a bus error occures.
|
155
|
+
// try this if you get bus errors
|
156
|
+
//#define MUST_ALIGNED
|
157
|
+
|
158
|
+
// Experimental: use http/ftp streaming
|
159
|
+
#define USE_HTTP
|
160
|
+
|
161
|
+
// _use setargv module
|
162
|
+
#define USE_ARGV
|
163
|
+
|
164
|
+
|
165
|
+
// Use IPv4 and IPv6
|
166
|
+
//#define USE_IPv4_6
|
167
|
+
// Use only IPv6
|
168
|
+
//#define USE_IPv6
|
169
|
+
|
170
|
+
// compile StreamVersion 8 decoding (always disable, no usabiltity)
|
171
|
+
// do not edit
|
172
|
+
//#define USE_SV8
|
173
|
+
|
174
|
+
// disables assert()
|
175
|
+
// assert() is for development only and decreases speed and increases the size of the program
|
176
|
+
#ifndef NDEBUG
|
177
|
+
# define NDEBUG
|
178
|
+
#endif
|
179
|
+
|
180
|
+
// Some other tracing (only for development)
|
181
|
+
// do not edit
|
182
|
+
//#define DEBUG
|
183
|
+
|
184
|
+
// Some tracings of popen()
|
185
|
+
// do not edit
|
186
|
+
//#define DEBUG2
|
187
|
+
|
188
|
+
// activate simple profiler
|
189
|
+
//#define PROFILE
|
190
|
+
|
191
|
+
// make debug output in tags.c stfu
|
192
|
+
#define STFU
|
193
|
+
|
194
|
+
/* end of mpp.h */
|
data/ext/mpc/mppdec.h
ADDED
@@ -0,0 +1,1171 @@
|
|
1
|
+
/*
|
2
|
+
* Musepack audio compression
|
3
|
+
* Copyright (C) 1999-2004 Buschmann/Klemm/Piecha/Wolf
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*/
|
19
|
+
|
20
|
+
//// Macros typical for Compilers:
|
21
|
+
//
|
22
|
+
// __TURBOC__ Turbo-C, Borland-C
|
23
|
+
// __BORLANDC__ Borland-C
|
24
|
+
// __ZTC__ Zortech-C
|
25
|
+
// _MSC_VER Microsoft-C
|
26
|
+
// __EMX__ Eberhard Mattes EMX (GNU based)
|
27
|
+
// __GNUC__ GNU C based compiler (also Cygwin)
|
28
|
+
// __CYGWIN__ Cygnus Windows C-Compiler (GNU based)
|
29
|
+
// __APPLE_CC__ Apple GCC (GNU based)
|
30
|
+
|
31
|
+
|
32
|
+
//// Macros typical for Operating Systems
|
33
|
+
//
|
34
|
+
// __linux__ Linux
|
35
|
+
// __bsdi__ BSDi
|
36
|
+
// __FreeBSD__ FreeBSD
|
37
|
+
// __NetBSD__ NetBSD
|
38
|
+
// __OpenBSD__ OpenBSD
|
39
|
+
// __unix__ Unix ????????
|
40
|
+
// _WIN16 16 bit-Windows
|
41
|
+
// _WIN32 32 bit-Windows (WIN32 is wrong, not defined by not MSC) (also __GNUC__ + _WIN32 is possible)
|
42
|
+
// _HPUX_SOURCE HP-UX
|
43
|
+
// __BEOS__ BeOS
|
44
|
+
// __APPLE__ Apple Mac OS X (only when using Apple GCC)
|
45
|
+
// ??????? MS-DOS and relatives
|
46
|
+
|
47
|
+
|
48
|
+
//// Macros typical for special conformances
|
49
|
+
// System 5 Release 4 (SVr4)
|
50
|
+
// System 5 ID (SVID)
|
51
|
+
// POSIX 1.0
|
52
|
+
// POSIX 1.0b
|
53
|
+
// X/OPEN
|
54
|
+
// BSD 4.3
|
55
|
+
// BSD 4.4
|
56
|
+
// ANSI
|
57
|
+
|
58
|
+
|
59
|
+
// Macros to manipulate Sockets + Files in one, in (+0x4000)
|
60
|
+
// output times TIME/TIME_T/DTIME
|
61
|
+
|
62
|
+
#ifndef MPPDEC_MPPDEC_H
|
63
|
+
#define MPPDEC_MPPDEC_H
|
64
|
+
|
65
|
+
//// optimization/feature defines //////////////////////////////////
|
66
|
+
#ifndef NOT_INCLUDE_CONFIG_H
|
67
|
+
# include "config.h"
|
68
|
+
#endif
|
69
|
+
#include "./mpp.h"
|
70
|
+
|
71
|
+
|
72
|
+
//// portable system includes //////////////////////////////////////
|
73
|
+
#include <stdio.h>
|
74
|
+
#include <stdlib.h>
|
75
|
+
#include <stddef.h>
|
76
|
+
#include <stdarg.h>
|
77
|
+
#include <string.h>
|
78
|
+
#include <limits.h>
|
79
|
+
#include <assert.h>
|
80
|
+
#include <math.h>
|
81
|
+
|
82
|
+
|
83
|
+
//// system dependent system includes //////////////////////////////
|
84
|
+
// low level I/O, where are prototypes and constants?
|
85
|
+
#if defined _WIN32 || defined __TURBOC__ || defined __ZTC__ || defined _MSC_VER
|
86
|
+
# include <io.h>
|
87
|
+
# include <fcntl.h>
|
88
|
+
# include <time.h>
|
89
|
+
# include <sys/types.h>
|
90
|
+
# include <sys/stat.h>
|
91
|
+
#elif defined __unix__ || defined __linux__ || defined __APPLE__
|
92
|
+
# include <fcntl.h>
|
93
|
+
# include <unistd.h>
|
94
|
+
# include <sys/time.h>
|
95
|
+
# include <sys/ioctl.h>
|
96
|
+
# include <sys/types.h>
|
97
|
+
# include <sys/stat.h>
|
98
|
+
#else
|
99
|
+
// .... add Includes for new Operating System here (with prefix: #elif defined)
|
100
|
+
# include <fcntl.h>
|
101
|
+
# include <unistd.h>
|
102
|
+
# include <sys/ioctl.h>
|
103
|
+
# include <sys/stat.h>
|
104
|
+
#endif
|
105
|
+
|
106
|
+
|
107
|
+
#if defined __linux__
|
108
|
+
# include <fpu_control.h>
|
109
|
+
#elif defined __FreeBSD__
|
110
|
+
# include <machine/floatingpoint.h>
|
111
|
+
#elif defined _MSC_VER
|
112
|
+
# include <float.h>
|
113
|
+
#endif
|
114
|
+
|
115
|
+
|
116
|
+
#if defined _WIN32
|
117
|
+
# undef USE_OSS_AUDIO
|
118
|
+
# undef USE_ESD_AUDIO
|
119
|
+
# undef USE_SUN_AUDIO
|
120
|
+
#else
|
121
|
+
# undef USE_WIN_AUDIO
|
122
|
+
#endif
|
123
|
+
|
124
|
+
#if defined __APPLE__
|
125
|
+
# undef USE_OSS_AUDIO
|
126
|
+
# undef USE_SUN_AUDIO
|
127
|
+
# undef USE_WIN_AUDIO
|
128
|
+
# undef USE_NICE
|
129
|
+
# undef USE_REALTIME
|
130
|
+
# undef USE_ASM
|
131
|
+
# undef USE_ESD_AUDIO
|
132
|
+
# define NO_DEV_AUDIO
|
133
|
+
# undef ENDIAN
|
134
|
+
# define ENDIAN HAVE_BIG_ENDIAN
|
135
|
+
#endif
|
136
|
+
|
137
|
+
#if defined __TURBOC__
|
138
|
+
# undef USE_OSS_AUDIO
|
139
|
+
# undef USE_ESD_AUDIO
|
140
|
+
# undef USE_SUN_AUDIO
|
141
|
+
# undef USE_NICE
|
142
|
+
# undef USE_REALTIME
|
143
|
+
#endif
|
144
|
+
|
145
|
+
#if defined USE_DIET || defined MAKE_24BIT || defined MAKE_32BIT
|
146
|
+
# undef USE_ESD_AUDIO
|
147
|
+
#endif
|
148
|
+
|
149
|
+
#if defined MAKE_16BIT || defined MAKE_24BIT || defined MAKE_32BIT
|
150
|
+
# undef USE_ASM
|
151
|
+
#endif
|
152
|
+
|
153
|
+
#if INT_MAX < 2147483647L
|
154
|
+
# undef USE_ASM
|
155
|
+
#endif
|
156
|
+
|
157
|
+
// sound card
|
158
|
+
#if defined USE_OSS_AUDIO
|
159
|
+
# include <sys/ioctl.h>
|
160
|
+
# include <sys/time.h>
|
161
|
+
# if defined __linux__ // the standard is that this file is stored somewhere on the hard disk
|
162
|
+
# include <linux/soundcard.h>
|
163
|
+
# elif defined __bsdi__
|
164
|
+
# include <sys/soundcard.h>
|
165
|
+
# elif defined __FreeBSD__
|
166
|
+
# include <machine/soundcard.h>
|
167
|
+
# elif defined __NetBSD__ || defined __OpenBSD__
|
168
|
+
# include <soundcard.h>
|
169
|
+
# elif defined __APPLE__ && defined __MACH__
|
170
|
+
# include <pleasepatchheretherightpathofsoundcard.hforMacOSX/soundcard.h>
|
171
|
+
# else
|
172
|
+
# include <pleasepatchheretherightpathof/soundcard.h>
|
173
|
+
# endif
|
174
|
+
#endif /* USE_OSS_AUDIO */
|
175
|
+
|
176
|
+
#if defined USE_ESD_AUDIO
|
177
|
+
# include <esd.h>
|
178
|
+
#endif
|
179
|
+
|
180
|
+
#if defined USE_SUN_AUDIO
|
181
|
+
# include <sys/audioio.h>
|
182
|
+
#endif
|
183
|
+
|
184
|
+
#ifdef MPP_ENCODER
|
185
|
+
# undef USE_HTTP
|
186
|
+
#endif
|
187
|
+
|
188
|
+
#ifdef USE_HTTP
|
189
|
+
# ifdef _WIN32
|
190
|
+
# include <winsock2.h>
|
191
|
+
# else
|
192
|
+
# include <sys/socket.h>
|
193
|
+
# endif
|
194
|
+
#endif
|
195
|
+
|
196
|
+
#if defined USE_WIN_AUDIO
|
197
|
+
# include <windows.h>
|
198
|
+
# define WINAUDIO_FD ((FILE_T)-128)
|
199
|
+
#elif defined USE_IRIX_AUDIO
|
200
|
+
# define IRIXAUDIO_FD ((FILE_T)-127)
|
201
|
+
#endif
|
202
|
+
#define NULL_FD ((FILE_T)-126)
|
203
|
+
|
204
|
+
#if defined USE_NICE && !defined _WIN32
|
205
|
+
# include <sys/resource.h>
|
206
|
+
#endif
|
207
|
+
|
208
|
+
// scheduler stuff
|
209
|
+
#if defined USE_REALTIME && !defined _WIN32
|
210
|
+
# include <sched.h>
|
211
|
+
#endif
|
212
|
+
|
213
|
+
#ifndef O_BINARY
|
214
|
+
# ifdef _O_BINARY
|
215
|
+
# define O_BINARY _O_BINARY
|
216
|
+
# else
|
217
|
+
# define O_BINARY 0
|
218
|
+
# endif
|
219
|
+
#endif
|
220
|
+
|
221
|
+
#if defined _WIN32 || defined __TURBOC__
|
222
|
+
# define strncasecmp(__s1,__s2,__n) strnicmp ((__s1), (__s2), (__n))
|
223
|
+
# define strcasecmp(__s1,__s2) stricmp ((__s1), (__s2))
|
224
|
+
# define MKDIR(__dir,__attr) mkdir ((__dir))
|
225
|
+
#else
|
226
|
+
# define MKDIR(__dir,__attr) mkdir ((__dir), (__attr))
|
227
|
+
#endif
|
228
|
+
|
229
|
+
#if defined _WIN32
|
230
|
+
# include <direct.h>
|
231
|
+
# define snprintf _snprintf
|
232
|
+
# define getcwd(__buff,__len) _getcwd ((__buff), (__len))
|
233
|
+
# define sleep(__sec) Sleep ((__sec) * 1000)
|
234
|
+
#endif
|
235
|
+
|
236
|
+
#if defined _WIN32
|
237
|
+
# define TIME_T long
|
238
|
+
# define TIME(__x) time ( &(__x) )
|
239
|
+
# define DTIME(__x,__y) ( (double)(__y) - (__x) )
|
240
|
+
#else
|
241
|
+
# define TIME_T struct timeval
|
242
|
+
# define TIME(__x) gettimeofday ( &(__x), NULL )
|
243
|
+
# define DTIME(__x,__y) ( ((double)(__y).tv_sec - (__x).tv_sec) + 1.e-6 * ((double)(__y).tv_usec - (__x).tv_usec) )
|
244
|
+
#endif
|
245
|
+
|
246
|
+
#if defined __GNUC__
|
247
|
+
# define inline __inline__
|
248
|
+
# define restrict
|
249
|
+
#elif defined _WIN32
|
250
|
+
# define inline __inline
|
251
|
+
# define restrict
|
252
|
+
#else
|
253
|
+
# define inline
|
254
|
+
# define restrict
|
255
|
+
#endif
|
256
|
+
|
257
|
+
|
258
|
+
//// Binary/Low-Level-IO ///////////////////////////////////////////
|
259
|
+
//
|
260
|
+
// All file I/O is basicly handled via an ANSI file pointer (type: FILE*) in
|
261
|
+
// FILEIO-Mode 1 and via a POSIX file descriptor (type: int) in
|
262
|
+
// FILEIO-Mode 2 and 3.
|
263
|
+
//
|
264
|
+
// Some operation are only available via the POSIX interface (fcntl, setmode,
|
265
|
+
// ...) so we need a function to get the file descriptor from a file pointer.
|
266
|
+
// In FILEIO-Mode 2 and 3 this is a dummy function because we always working
|
267
|
+
// with this file descriptors.
|
268
|
+
//
|
269
|
+
|
270
|
+
#if FILEIO == 1
|
271
|
+
# if defined __BORLANDC__ || defined _WIN32
|
272
|
+
# define FILENO(__fp) _fileno ((__fp))
|
273
|
+
# elif defined __CYGWIN__ || defined __TURBOC__ || defined __unix__ || defined __EMX__ || defined _MSC_VER
|
274
|
+
# define FILENO(__fp) fileno ((__fp))
|
275
|
+
# else
|
276
|
+
# define FILENO(__fp) fileno ((__fp))
|
277
|
+
# endif
|
278
|
+
#else
|
279
|
+
# define FILENO(__fd) (__fd)
|
280
|
+
#endif
|
281
|
+
|
282
|
+
|
283
|
+
//
|
284
|
+
// If we have access to a file via file name, we can open the file with an
|
285
|
+
// additional "b" or a O_BINARY within the (f)open function to get a
|
286
|
+
// transparent untranslated data stream which is necessary for audio bitstream
|
287
|
+
// data and also for PCM data. If we are working with
|
288
|
+
// stdin/stdout/FILENO_STDIN/FILENO_STDOUT we can't open the file with this
|
289
|
+
// attributes, because the files are already open. So we need a non
|
290
|
+
// standardized sequence to switch to this mode (not necessary for Unix).
|
291
|
+
// Mostly the sequency is the same for incoming and outgoing streams, but only
|
292
|
+
// mostly so we need one for IN and one for OUT.
|
293
|
+
// Macros are called with the file pointer and you get back the untransalted file
|
294
|
+
// pointer which can be equal or different from the original.
|
295
|
+
//
|
296
|
+
|
297
|
+
#if defined __EMX__
|
298
|
+
# define SETBINARY_IN(__fp) (_fsetmode ( (__fp), "b" ), (__fp))
|
299
|
+
# define SETBINARY_OUT(__fp) (_fsetmode ( (__fp), "b" ), (__fp))
|
300
|
+
#elif defined __TURBOC__ || defined __BORLANDC__
|
301
|
+
# define SETBINARY_IN(__fp) (setmode ( FILENO ((__fp)), O_BINARY ), (__fp))
|
302
|
+
# define SETBINARY_OUT(__fp) (setmode ( FILENO ((__fp)), O_BINARY ), (__fp))
|
303
|
+
#elif defined __CYGWIN__
|
304
|
+
# define SETBINARY_IN(__fp) (setmode ( FILENO ((__fp)), _O_BINARY ), (__fp))
|
305
|
+
# define SETBINARY_OUT(__fp) (setmode ( FILENO ((__fp)), _O_BINARY ), (__fp))
|
306
|
+
#elif defined _WIN32
|
307
|
+
# define SETBINARY_IN(__fp) (_setmode ( FILENO ((__fp)), _O_BINARY ), (__fp))
|
308
|
+
# define SETBINARY_OUT(__fp) (_setmode ( FILENO ((__fp)), _O_BINARY ), (__fp))
|
309
|
+
#elif defined _MSC_VER
|
310
|
+
# define SETBINARY_IN(__fp) (setmode ( FILENO ((__fp)), O_BINARY ), (__fp))
|
311
|
+
# define SETBINARY_OUT(__fp) (setmode ( FILENO ((__fp)), O_BINARY ), (__fp))
|
312
|
+
#elif defined __unix__
|
313
|
+
# define SETBINARY_IN(__fp) (__fp)
|
314
|
+
# define SETBINARY_OUT(__fp) (__fp)
|
315
|
+
#elif 0
|
316
|
+
# define SETBINARY_IN(__fp) (freopen ( NULL, "rb", (__fp) ), (__fp))
|
317
|
+
# define SETBINARY_OUT(__fp) (freopen ( NULL, "wb", (__fp) ), (__fp))
|
318
|
+
#else
|
319
|
+
# define SETBINARY_IN(__fp) (__fp)
|
320
|
+
# define SETBINARY_OUT(__fp) (__fp)
|
321
|
+
#endif
|
322
|
+
|
323
|
+
// file I/O using ANSI buffered file I/O via file pointer FILE* (fopen, fread, fwrite, fclose)
|
324
|
+
#if FILEIO == 1
|
325
|
+
# define OFF_T signed long
|
326
|
+
# define FILE_T FILE*
|
327
|
+
# define OPEN(name) fopen (name, "rb" )
|
328
|
+
# define OPENRW(name) fopen (name, "r+b")
|
329
|
+
# define CREATE(name) fopen (name, "wb" )
|
330
|
+
# define INVALID_FILEDESC NULL
|
331
|
+
# define CLOSE(fp) fclose (fp) // CLOSE returns -1 on error, otherwise 0
|
332
|
+
# define READ(fp,ptr,len) fread (ptr, 1, len, fp) // READ returns -1 or 0 on error/EOF, otherwise > 0
|
333
|
+
# define READ1(fp,ptr) fread (ptr, 1, 1, fp) // READ returns -1 or 0 on error/EOF, otherwise > 0
|
334
|
+
# define WRITE(fp,ptr,len) fwrite (ptr, 1, len, fp) // WRITE returns -1 or 0 on error/EOF, otherwise > 0
|
335
|
+
# define SEEK(fp,offs,lbl) fseek (fp, offs, lbl) // SEEK returns -1 on error, otherwise >= 0
|
336
|
+
# define FILEPOS(fp) ftell (fp) // FILEPOS returns -1 on error, otherwise >= 0
|
337
|
+
# define STDIN stdin
|
338
|
+
# define STDOUT stdout
|
339
|
+
# define STDERR stderr
|
340
|
+
# define FDOPEN(fd,mode) fdopen (fd, mode)
|
341
|
+
# define UNBUFFER(fp) setvbuf(fp, NULL, _IONBF, 0 )
|
342
|
+
# define FLUSH(fp) fflush (fp)
|
343
|
+
#endif /* FILEIO==1 */
|
344
|
+
|
345
|
+
// file I/O using POSIX unbuffered file I/O via file descriptors (open, read, write, close)
|
346
|
+
#if FILEIO == 2
|
347
|
+
# ifdef WIN32
|
348
|
+
# define OFF_T _off_t
|
349
|
+
# else
|
350
|
+
# define OFF_T off_t
|
351
|
+
# endif
|
352
|
+
# define FILE_T int
|
353
|
+
# define OPEN(name) open (name, O_RDONLY|O_BINARY)
|
354
|
+
# define OPENRW(name) open (name, O_RDWR |O_BINARY)
|
355
|
+
# define CREATE(name) open (name, O_WRONLY|O_BINARY|O_TRUNC|O_CREAT, 0644)
|
356
|
+
# define INVALID_FILEDESC (-1)
|
357
|
+
# define CLOSE(fd) close (fd) // CLOSE returns -1 on error, otherwise 0
|
358
|
+
# if defined HAVE_INCOMPLETE_READ
|
359
|
+
# define READ(fd,ptr,len) complete_read (fd, ptr, len) // READ returns -1 or 0 on error/EOF, otherwise > 0
|
360
|
+
# else
|
361
|
+
# define READ(fd,ptr,len) (size_t)read (fd, ptr, len)// READ returns -1 or 0 on error/EOF, otherwise > 0
|
362
|
+
# endif
|
363
|
+
# define READ1(fd,ptr) (size_t)read (fd, ptr, 1) // READ returns -1 or 0 on error/EOF, otherwise > 0
|
364
|
+
# define WRITE(fd,ptr,len) (size_t)write (fd, ptr, len)// WRITE returns -1 or 0 on error/EOF, otherwise > 0
|
365
|
+
# define SEEK(fd,offs,lbl) lseek (fd, offs, lbl) // SEEK returns -1 on error, otherwise >= 0
|
366
|
+
# define FILEPOS(fd) lseek (fd, 0L, SEEK_CUR) // FILEPOS returns -1 on error, otherwise >= 0
|
367
|
+
# define STDIN 0
|
368
|
+
# define STDOUT 1
|
369
|
+
# define STDERR 2
|
370
|
+
# define FDOPEN(fd,mode) (fd)
|
371
|
+
# define UNBUFFER(fd) (void)(fd)
|
372
|
+
# define FLUSH(fd) (void)(fd)
|
373
|
+
#endif /* FILEIO==2 */
|
374
|
+
|
375
|
+
// file I/O using Turbo-C lowest level unbuffered file I/O via file descriptors (_open, _read, _write, _close)
|
376
|
+
#if FILEIO == 3
|
377
|
+
# define OFF_T signed long
|
378
|
+
# define FILE_T int
|
379
|
+
# define OPEN(name) _open (name, O_RDONLY)
|
380
|
+
# define OPENRW(name) _open (name, O_RDWR )
|
381
|
+
# define CREATE(name) _creat(name, 0)
|
382
|
+
# define INVALID_FILEDESC (-1)
|
383
|
+
# define CLOSE(fd) _close (fd) // CLOSE returns -1 on error, otherwise 0
|
384
|
+
# define READ(fd,ptr,len) (size_t)_read (fd, ptr, len)// READ returns -1 or 0 on error/EOF, otherwise > 0
|
385
|
+
# define READ1(fd,ptr) (size_t)_read (fd, ptr, 1) // READ returns -1 or 0 on error/EOF, otherwise > 0
|
386
|
+
# define WRITE(fd,ptr,len) (size_t)_write (fd, ptr, len)// WRITE returns -1 or 0 on error/EOF, otherwise > 0
|
387
|
+
# define SEEK(fd,offs,lbl) lseek (fd, offs, lbl) // SEEK returns -1 on error, otherwise >= 0
|
388
|
+
# define FILEPOS(fd) lseek (fd, 0L, SEEK_CUR) // FILEPOS returns -1 on error, otherwise >= 0
|
389
|
+
# define STDIN 0
|
390
|
+
# define STDOUT 1
|
391
|
+
# define STDERR 2
|
392
|
+
# undef SETBINARY_IN
|
393
|
+
# undef SETBINARY_OUT
|
394
|
+
# define SETBINARY_IN(fd) (fd)
|
395
|
+
# define SETBINARY_OUT(fd) (fd)
|
396
|
+
# define FDOPEN(fd,mode) (fd)
|
397
|
+
# define UNBUFFER(fd) (void)(fd)
|
398
|
+
# define FLUSH(fd) (void)(fd)
|
399
|
+
#endif /* FILEIO==3 */
|
400
|
+
|
401
|
+
#if FILEIO != 2 && defined USE_HTTP
|
402
|
+
# error HTTP can only be used by FILEIO==2
|
403
|
+
#endif
|
404
|
+
|
405
|
+
#if defined _WIN32 || defined __BEOS__
|
406
|
+
# define WRITE_SOCKET(sock,ptr,len) send (sock, ptr, len, 0)
|
407
|
+
# define READ_SOCKET(sock,ptr,len) recv (sock, ptr, len, 0)
|
408
|
+
#else
|
409
|
+
# define WRITE_SOCKET(sock,ptr,len) write (sock, ptr, len)
|
410
|
+
# define READ_SOCKET(sock,ptr,len) read (sock, ptr, len)
|
411
|
+
#endif
|
412
|
+
|
413
|
+
#ifdef _WIN32
|
414
|
+
# define POPEN_READ_BINARY_OPEN(cmd) _popen ((cmd), "rb")
|
415
|
+
# define POPEN_WRITE_BINARY_OPEN(cmd) _popen ((cmd), "wb")
|
416
|
+
# define PCLOSE(fp) _pclose(fp)
|
417
|
+
#else
|
418
|
+
# define POPEN_READ_BINARY_OPEN(cmd) popen ((cmd), "r")
|
419
|
+
# define POPEN_WRITE_BINARY_OPEN(cmd) popen ((cmd), "w")
|
420
|
+
# define PCLOSE(fp) pclose(fp)
|
421
|
+
#endif
|
422
|
+
|
423
|
+
#if defined _WIN32
|
424
|
+
# define STRUCT_STAT struct _stat
|
425
|
+
# define STAT_CMD(f,s) _stat (f, s)
|
426
|
+
#else
|
427
|
+
# define STRUCT_STAT struct stat
|
428
|
+
# define STAT_CMD(f,s) stat (f, s)
|
429
|
+
#endif /* WIN32 */
|
430
|
+
|
431
|
+
#ifndef S_ISDIR
|
432
|
+
# if defined S_IFDIR
|
433
|
+
# define S_ISDIR(x) ((x) & S_IFDIR)
|
434
|
+
# elif defined _S_IFDIR
|
435
|
+
# define S_ISDIR(x) ((x) & _S_IFDIR)
|
436
|
+
# elif defined __S_IFDIR
|
437
|
+
# define S_ISDIR(x) ((x) & __S_IFDIR)
|
438
|
+
# else
|
439
|
+
# error Cannot find a way to test for a directory
|
440
|
+
# endif
|
441
|
+
#endif /* !S_ISDIR */
|
442
|
+
|
443
|
+
#if defined __unix__ || defined __bsdi__ || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ || defined __TURBOC__ || defined _WIN32 || defined __APPLE__
|
444
|
+
# define ISATTY(fd) isatty (fd)
|
445
|
+
#else
|
446
|
+
# define ISATTY(fd) 0
|
447
|
+
#endif
|
448
|
+
|
449
|
+
// Path separator
|
450
|
+
#if defined __unix__ || defined __bsdi__ || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ || defined __APPLE__
|
451
|
+
//# define PATH_SEP '/'
|
452
|
+
# define DRIVE_SEP '\0'
|
453
|
+
# define EXE_EXT ""
|
454
|
+
# define DEV_NULL "/dev/null"
|
455
|
+
# define ENVPATH_SEP ':'
|
456
|
+
#elif defined _WIN32 || defined __TURBOC__ || defined __ZTC__ || defined _MSC_VER
|
457
|
+
//# define PATH_SEP '\\'
|
458
|
+
# define DRIVE_SEP ':'
|
459
|
+
# define EXE_EXT ".exe"
|
460
|
+
# define DEV_NULL "\\nul"
|
461
|
+
# define ENVPATH_SEP ';'
|
462
|
+
#else
|
463
|
+
//# define PATH_SEP '/' // Amiga: C:/
|
464
|
+
# define DRIVE_SEP ':'
|
465
|
+
# define EXE_EXT ""
|
466
|
+
# define DEV_NULL "nul"
|
467
|
+
# define ENVPATH_SEP ';'
|
468
|
+
#endif
|
469
|
+
|
470
|
+
// maximum length of file names
|
471
|
+
#ifndef PATHLEN_MAX
|
472
|
+
# if defined FILENAME_MAX
|
473
|
+
# define PATHLEN_MAX FILENAME_MAX
|
474
|
+
# elif INT_MAX < 2147483647L
|
475
|
+
# define PATHLEN_MAX 128
|
476
|
+
# else
|
477
|
+
# define PATHLEN_MAX 1024
|
478
|
+
# endif
|
479
|
+
#endif /* !PATHLEN_MAX */
|
480
|
+
|
481
|
+
#ifdef _WIN32
|
482
|
+
# define TitleBar(text) SetConsoleTitle (text)
|
483
|
+
#else
|
484
|
+
# define TitleBar(text) (void) (text)
|
485
|
+
#endif
|
486
|
+
|
487
|
+
|
488
|
+
//// constants /////////////////////////////////////////////////////
|
489
|
+
#ifdef USE_SV8
|
490
|
+
# define MAX_SV "SV8"
|
491
|
+
#else
|
492
|
+
# define MAX_SV "SV7"
|
493
|
+
#endif
|
494
|
+
|
495
|
+
#ifdef USE_ASM
|
496
|
+
# define BUILD "3DNow/SSE"
|
497
|
+
#else
|
498
|
+
# define BUILD ""
|
499
|
+
#endif
|
500
|
+
|
501
|
+
|
502
|
+
#define COPYRIGHT "(C) 1999-2003 Buschmann/Klemm/Piecha/Wolf"
|
503
|
+
|
504
|
+
#define DECODER_DELAY (512 - 32 + 1)
|
505
|
+
#define BLK_SIZE (36 * 32)
|
506
|
+
|
507
|
+
|
508
|
+
//// logging defines, for development only /////////////////////////
|
509
|
+
#if defined _WIN32 || defined __TURBOC__
|
510
|
+
# define LOGPATH ".\\"
|
511
|
+
# define MUSICPATH "D:\\AUDIO\\"
|
512
|
+
#else
|
513
|
+
# define LOGPATH "./"
|
514
|
+
# define MUSICPATH "/Archive/Audio/"
|
515
|
+
#endif
|
516
|
+
//#define _(x) (void)(fprintf(stderr,"<%d>\n",(x)),fflush(stderr))
|
517
|
+
|
518
|
+
#ifdef DEBUG
|
519
|
+
# define REP(x) (void)(x)
|
520
|
+
#else
|
521
|
+
# define REP(x)
|
522
|
+
#endif
|
523
|
+
|
524
|
+
|
525
|
+
//// numerical constants ///////////////////////////////////////////
|
526
|
+
#define C00 (Float) 0.500000000000000000000000L // Cxx = 0.5 / cos (xx*M_PI/64)
|
527
|
+
#define C01 (Float) 0.500602998235196301334178L
|
528
|
+
#define C02 (Float) 0.502419286188155705518560L
|
529
|
+
#define C03 (Float) 0.505470959897543659956626L
|
530
|
+
#define C04 (Float) 0.509795579104159168925062L
|
531
|
+
#define C05 (Float) 0.515447309922624546962323L
|
532
|
+
#define C06 (Float) 0.522498614939688880640101L
|
533
|
+
#define C07 (Float) 0.531042591089784174473998L
|
534
|
+
#define C08 (Float) 0.541196100146196984405269L
|
535
|
+
#define C09 (Float) 0.553103896034444527838540L
|
536
|
+
#define C10 (Float) 0.566944034816357703685831L
|
537
|
+
#define C11 (Float) 0.582934968206133873665654L
|
538
|
+
#define C12 (Float) 0.601344886935045280535340L
|
539
|
+
#define C13 (Float) 0.622504123035664816182728L
|
540
|
+
#define C14 (Float) 0.646821783359990129535794L
|
541
|
+
#define C15 (Float) 0.674808341455005746033820L
|
542
|
+
#define C16 (Float) 0.707106781186547524436104L
|
543
|
+
#define C17 (Float) 0.744536271002298449773679L
|
544
|
+
#define C18 (Float) 0.788154623451250224773056L
|
545
|
+
#define C19 (Float) 0.839349645415527038721463L
|
546
|
+
#define C20 (Float) 0.899976223136415704611808L
|
547
|
+
#define C21 (Float) 0.972568237861960693780520L
|
548
|
+
#define C22 (Float) 1.060677685990347471323668L
|
549
|
+
#define C23 (Float) 1.169439933432884955134476L
|
550
|
+
#define C24 (Float) 1.306562964876376527851784L
|
551
|
+
#define C25 (Float) 1.484164616314166277319733L
|
552
|
+
#define C26 (Float) 1.722447098238333927796261L
|
553
|
+
#define C27 (Float) 2.057781009953411550808880L
|
554
|
+
#define C28 (Float) 2.562915447741506178719328L
|
555
|
+
#define C29 (Float) 3.407608418468718785698107L
|
556
|
+
#define C30 (Float) 5.101148618689163857960189L
|
557
|
+
#define C31 (Float)10.190008123548056810994678L
|
558
|
+
|
559
|
+
#define SS05 (Float) 0.840896415253714543018917L // 0.5^0.25
|
560
|
+
|
561
|
+
|
562
|
+
#ifndef M_PI
|
563
|
+
# define M_PI 3.1415926535897932384626433832795029 // 4*atan(1)
|
564
|
+
# define M_PIl 3.1415926535897932384626433832795029L
|
565
|
+
# define M_LN2 0.6931471805599453094172321214581766 // ln(2)
|
566
|
+
# define M_LN2l 0.6931471805599453094172321214581766L
|
567
|
+
# define M_LN10 2.3025850929940456840179914546843642 // ln 10 */
|
568
|
+
# define M_LN10l 2.3025850929940456840179914546843642L
|
569
|
+
#endif
|
570
|
+
|
571
|
+
|
572
|
+
//// 'Cdecl' forces to use standard C/C++ calling convention ///////
|
573
|
+
#if defined _WIN32
|
574
|
+
# define Cdecl __cdecl
|
575
|
+
#elif defined __ZTC__
|
576
|
+
# define Cdecl _cdecl
|
577
|
+
#elif defined __TURBOC__
|
578
|
+
# define Cdecl cdecl
|
579
|
+
#else
|
580
|
+
# define Cdecl
|
581
|
+
#endif
|
582
|
+
|
583
|
+
//// expect handling of GCC ////////////////////////////////////////
|
584
|
+
#ifdef __GNUC__
|
585
|
+
# if __GNUC__ < 3
|
586
|
+
# define __builtin_expect(cond,exp) (cond)
|
587
|
+
# ifndef expect
|
588
|
+
# define expect(cond,exp) __builtin_expect(cond,exp)
|
589
|
+
# endif
|
590
|
+
# else
|
591
|
+
# ifndef expect
|
592
|
+
# define expect(cond,exp) __builtin_expect(cond,exp)
|
593
|
+
# endif
|
594
|
+
# endif
|
595
|
+
#else
|
596
|
+
# define __builtin_expect(cond,exp) (cond)
|
597
|
+
# ifndef expect
|
598
|
+
# define expect(cond,exp) __builtin_expect(cond,exp)
|
599
|
+
# endif
|
600
|
+
#endif
|
601
|
+
|
602
|
+
#define if0(x) if (expect(x,0))
|
603
|
+
#define if1(x) if (expect(x,1))
|
604
|
+
#define while0(x) while (expect(x,0))
|
605
|
+
#define while1(x) while (expect(x,1))
|
606
|
+
|
607
|
+
#ifndef __GNUC__
|
608
|
+
# define __attribute__(x)
|
609
|
+
#else
|
610
|
+
# define __attribute__(x)
|
611
|
+
#endif
|
612
|
+
|
613
|
+
//// Remaining macros //////////////////////////////////////////////
|
614
|
+
// selects input buffer size and some constants needed for input buffer handling
|
615
|
+
#ifndef IBUFLOG2 // must be at least 10 (bitrate always <626 kbps) or better 11 ( <1253 kbps)
|
616
|
+
# if INT_MAX < 2147483647L
|
617
|
+
# define IBUFLOG2 11 // 8 KByte buffer, possible 11...13 (32 KByte limit)
|
618
|
+
# else
|
619
|
+
# define IBUFLOG2 21 // 8 MByte buffer, possible 11...29 ( 2 GByte limit)
|
620
|
+
# endif
|
621
|
+
#endif
|
622
|
+
#define IBUFSIZE ((size_t)(1LU<<(IBUFLOG2)))
|
623
|
+
#define IBUFSIZE2 ((size_t)((IBUFSIZE)/2))
|
624
|
+
#define IBUFMASK ((size_t)((IBUFSIZE)-1))
|
625
|
+
|
626
|
+
// save memory space for 16 bit compiler (data + stack < 64 KByte)
|
627
|
+
#if INT_MAX < 2147483647L
|
628
|
+
# if VIRT_SHIFT > 6
|
629
|
+
# undef VIRT_SHIFT
|
630
|
+
# define VIRT_SHIFT 6
|
631
|
+
# endif
|
632
|
+
# if IBUFLOG2 > 11
|
633
|
+
# undef IBUFLOG2
|
634
|
+
# define IBUFLOG2 11
|
635
|
+
# endif
|
636
|
+
# define USE_HUFF_PACK
|
637
|
+
# define USE_ARRAY_PACK
|
638
|
+
#endif
|
639
|
+
|
640
|
+
// generate a macro which contains information about compile time settings
|
641
|
+
#define STR(x) _STR(x)
|
642
|
+
#define _STR(x) #x
|
643
|
+
#ifdef NDEBUG
|
644
|
+
# define T1 ""
|
645
|
+
#else
|
646
|
+
# define T1 "DEBUG "
|
647
|
+
#endif
|
648
|
+
#if defined USE_OSS_AUDIO || defined USE_ESD_AUDIO || defined USE_SUN_AUDIO || defined USE_WIN_AUDIO
|
649
|
+
# define T2 "SND "
|
650
|
+
#else
|
651
|
+
# define T2 ""
|
652
|
+
#endif
|
653
|
+
#ifdef USE_NICE
|
654
|
+
# define T3 "NICE "
|
655
|
+
#else
|
656
|
+
# define T3 ""
|
657
|
+
#endif
|
658
|
+
#if defined USE_REALTIME
|
659
|
+
# define T4 "RT "
|
660
|
+
#else
|
661
|
+
# define T4 ""
|
662
|
+
#endif
|
663
|
+
#ifdef HAVE_IEEE754_FLOAT
|
664
|
+
# define T5 "IEEE "
|
665
|
+
#else
|
666
|
+
# define T5 ""
|
667
|
+
#endif
|
668
|
+
#define T6 "IO=" STR(FILEIO) " "
|
669
|
+
#ifdef USE_HUFF_PACK
|
670
|
+
# define T7 "H-PCK "
|
671
|
+
#else
|
672
|
+
# define T7 ""
|
673
|
+
#endif
|
674
|
+
#ifdef USE_ARRAY_PACK
|
675
|
+
# define T8 "A-PCK "
|
676
|
+
#else
|
677
|
+
# define T8 ""
|
678
|
+
#endif
|
679
|
+
#define T9 "SHFT=" STR(VIRT_SHIFT) " "
|
680
|
+
#define T10 "IBUF=" STR(IBUFLOG2) " "
|
681
|
+
|
682
|
+
#define COMPILER_FLAGS T1 T2 T3 T4 T5 T6 T7 T8 T9 T10
|
683
|
+
|
684
|
+
// align a pointer by maybe incrementing it
|
685
|
+
#define ALIGN(ptr,alignment) \
|
686
|
+
(void*)((((ptrdiff_t)(ptr)) & (-(ptrdiff_t)(alignment))) + (alignment)) // aligns a pointer with alignment, the source array should be at least alignment-1 Bytes longer than the needed length
|
687
|
+
|
688
|
+
|
689
|
+
//// Simple types //////////////////////////////////////////////////
|
690
|
+
|
691
|
+
#if CHAR_BIT == 8 && SCHAR_MAX == 127L
|
692
|
+
typedef unsigned char Uint8_t; // guaranteed 8 bit unsigned integer type with range 0...255
|
693
|
+
typedef signed char Int8_t; // guaranteed 8 bit signed integer type with range -128...127
|
694
|
+
#else
|
695
|
+
# error No 8 bit int type found. Tested: char
|
696
|
+
#endif
|
697
|
+
|
698
|
+
#if SHRT_MAX == 32767L
|
699
|
+
typedef unsigned short int Uint16_t; // guaranteed 16 bit unsigned integer type with range 0...65535
|
700
|
+
typedef signed short int Int16_t; // guaranteed 16 bit signed integer type with range -32768...32767
|
701
|
+
#else
|
702
|
+
# error No 16 bit int type found. Tested: short
|
703
|
+
#endif
|
704
|
+
|
705
|
+
#if INT_MAX == 2147483647L
|
706
|
+
typedef unsigned int Uint32_t; // guaranteed 32 bit unsigned integer type with range 0...4294967295
|
707
|
+
typedef signed int Int32_t; // guaranteed 32 bit signed integer type with range -2147483648...2147483647
|
708
|
+
#elif LONG_MAX == 2147483647L
|
709
|
+
typedef unsigned long int Uint32_t; // guaranteed 32 bit unsigned integer type with range 0...4294967295
|
710
|
+
typedef signed long int Int32_t; // guaranteed 32 bit signed integer type with range -2147483648...2147483647
|
711
|
+
#else
|
712
|
+
# error No 32 bit int type found. Tested: int, long
|
713
|
+
#endif
|
714
|
+
|
715
|
+
#if defined __C99__ // C9x has a type which is exact 64 bit
|
716
|
+
typedef int64_t Int64_t;
|
717
|
+
typedef uint64_t Uint64_t;
|
718
|
+
typedef intmax_t IntMax_t;
|
719
|
+
typedef uintmax_t UintMax_t;
|
720
|
+
# define IntMax_MIN -9223372036854775808
|
721
|
+
# define IntMax_MAX 9223372036854775807
|
722
|
+
# define UintMax_MAX 18446744073709551615
|
723
|
+
# define UintMAX_FP(x) (long double)(x)
|
724
|
+
#elif defined __GNUC__ // GCC uses long long as 64 bit
|
725
|
+
typedef signed long long Int64_t;
|
726
|
+
typedef unsigned long long Uint64_t;
|
727
|
+
typedef signed long long IntMax_t;
|
728
|
+
typedef unsigned long long UintMax_t;
|
729
|
+
# define IntMax_MIN -9223372036854775808LL
|
730
|
+
# define IntMax_MAX 9223372036854775807LL
|
731
|
+
# define UintMax_MAX 18446744073709551615LLU
|
732
|
+
# define UintMAX_FP(x) (long double)(x)
|
733
|
+
#elif defined _MSC_VER
|
734
|
+
typedef signed __int64 Int64_t;
|
735
|
+
typedef unsigned __int64 Uint64_t;
|
736
|
+
typedef signed __int64 IntMax_t;
|
737
|
+
typedef unsigned __int64 UintMax_t;
|
738
|
+
# define IntMax_MIN -9223372036854775808I64
|
739
|
+
# define IntMax_MAX 9223372036854775807I64
|
740
|
+
# define UintMax_MAX 18446744073709551615UI64
|
741
|
+
# define UintMAX_FP(x) (long double)(IntMax_t)(x)
|
742
|
+
#elif defined LLONG_MAX // long long (when existing) is normally 64 bit
|
743
|
+
typedef signed long long Int64_t;
|
744
|
+
typedef unsigned long long Uint64_t;
|
745
|
+
typedef signed long long IntMax_t;
|
746
|
+
typedef unsigned long long UintMax_t;
|
747
|
+
# define IntMax_MIN -9223372036854775808LL
|
748
|
+
# define IntMax_MAX 9223372036854775807LL
|
749
|
+
# define UintMax_MAX 18446744073709551615LLU
|
750
|
+
# define UintMAX_FP(x) (long double)(x)
|
751
|
+
#elif LONG_MAX > 0xFFFFFFFFLU // long is longer than 33 bit, assume 64 bit
|
752
|
+
typedef signed long Int64_t;
|
753
|
+
typedef unsigned long Uint64_t;
|
754
|
+
typedef signed long IntMax_t;
|
755
|
+
typedef unsigned long UintMax_t;
|
756
|
+
# define IntMax_MIN -9223372036854775808L
|
757
|
+
# define IntMax_MAX 9223372036854775807L
|
758
|
+
# define UintMax_MAX 18446744073709551615LU
|
759
|
+
# define UintMAX_FP(x) (long double)(x)
|
760
|
+
#elif defined _WIN32 // Microsoft and Intel call it __int64
|
761
|
+
typedef signed __int64 Int64_t;
|
762
|
+
typedef unsigned __int64 Uint64_t;
|
763
|
+
typedef signed __int64 IntMax_t;
|
764
|
+
typedef unsigned __int64 UintMax_t;
|
765
|
+
# define IntMax_MIN -9223372036854775808I64
|
766
|
+
# define IntMax_MAX 9223372036854775807I64
|
767
|
+
# define UintMax_MAX 18446744073709551615UI64
|
768
|
+
# define UintMAX_FP(x) (long double)(IntMax_t)(x)
|
769
|
+
#else
|
770
|
+
# define NO_INT64_T // no type mapped to 64 bit integer
|
771
|
+
typedef signed long IntMax_t;
|
772
|
+
typedef unsigned long UintMax_t;
|
773
|
+
# define IntMax_MIN -2147483648L
|
774
|
+
# define IntMax_MAX 2147483647L
|
775
|
+
# define UintMax_MAX 4294967295LU
|
776
|
+
# define UintMAX_FP(x) (long double)(x)
|
777
|
+
#endif
|
778
|
+
|
779
|
+
|
780
|
+
#if defined _WIN32 && !defined __GNUC__ && !defined __C99__
|
781
|
+
typedef signed long ssize_t;
|
782
|
+
#endif
|
783
|
+
|
784
|
+
#ifdef USE_ARRAY_PACK
|
785
|
+
typedef signed char Bool_t; // ==0: false, !=0: true
|
786
|
+
#else
|
787
|
+
typedef signed int Bool_t; // ==0: false, !=0: true
|
788
|
+
#endif
|
789
|
+
typedef Uint32_t Ibuf_t; // type for input buffer, currently this type must be 32 bit
|
790
|
+
typedef signed char Schar; // at least -127...+127
|
791
|
+
typedef unsigned char Uchar; // at least 0...255
|
792
|
+
typedef signed short int Short; // at least -32767...+32767, memory economic type
|
793
|
+
typedef unsigned short int Ushort; // at least 0...65535, memory economic type
|
794
|
+
typedef signed int Int; // at least -32767...+32767, fast type
|
795
|
+
typedef unsigned int Uint; // at least 0...65535, fast type
|
796
|
+
typedef signed long int Long; // at least -2147483647...+2147483647, but more is better
|
797
|
+
typedef unsigned long int Ulong; // at least 0...4294967295, but more is better
|
798
|
+
// size_t; // size of memory objects
|
799
|
+
// ptrdiff_t; // pointer differences, may be larger than size_t
|
800
|
+
typedef float Float32_t; // guaranteed 32 bit floating point type
|
801
|
+
typedef double Float64_t; // guaranteed 64 bit floating point type
|
802
|
+
typedef float Float; // fastest floating point type, memory economic (used for all PCM calculations)
|
803
|
+
#define SIZEOF_Float 4 // size of the type 'Float' in sizeof units
|
804
|
+
typedef double Double; // floating point with extended precision (more than 32 bit mantissa)
|
805
|
+
typedef long double Ldouble; // most exact floating point format
|
806
|
+
typedef Int16_t Int2x16_t [2];
|
807
|
+
typedef Int32_t Int2x32_t [2];
|
808
|
+
|
809
|
+
#if defined MAKE_16BIT || defined MAKE_24BIT || defined MAKE_32BIT
|
810
|
+
# ifdef NO_INT64_T
|
811
|
+
# error No 64 bit int type found, needed for HQ 16...32 bit output
|
812
|
+
# endif
|
813
|
+
typedef Int2x32_t Int2xSample_t;
|
814
|
+
# if defined MAKE_32BIT
|
815
|
+
# define SAMPLE_SIZE 32
|
816
|
+
# define PROG_NAME "mppdec32"
|
817
|
+
# define SAMPLE_SIZE_STRING " (32 bit HQ)"
|
818
|
+
# define Write_PCM(fd,p,b) Write_PCM_HQ_2x32bit ( fd, p, b )
|
819
|
+
# define Synthese_Filter(Stream,offset,Vi,Yi,ch) \
|
820
|
+
Synthese_Filter_32_C ( Stream, offset, Vi, Yi, ch )
|
821
|
+
# undef USE_ESD_AUDIO
|
822
|
+
# elif defined MAKE_24BIT
|
823
|
+
# define SAMPLE_SIZE 24
|
824
|
+
# define PROG_NAME "mppdec24"
|
825
|
+
# define SAMPLE_SIZE_STRING " (24 bit HQ)"
|
826
|
+
# define Write_PCM(fd,p,b) Write_PCM_HQ_2x24bit ( fd, p, b )
|
827
|
+
# define Synthese_Filter(Stream,offset,Vi,Yi,ch) \
|
828
|
+
Synthese_Filter_32_C ( Stream, offset, Vi, Yi, ch )
|
829
|
+
# undef USE_ESD_AUDIO
|
830
|
+
# elif defined MAKE_16BIT
|
831
|
+
# define SAMPLE_SIZE 16
|
832
|
+
# define PROG_NAME "mppdec16"
|
833
|
+
# define SAMPLE_SIZE_STRING " (16 bit HQ)"
|
834
|
+
# define Write_PCM(fd,p,b) Write_PCM_HQ_2x16bit ( fd, p, b )
|
835
|
+
# define Synthese_Filter(Stream,offset,Vi,Yi,ch) \
|
836
|
+
Synthese_Filter_32_C ( Stream, offset, Vi, Yi, ch )
|
837
|
+
# endif
|
838
|
+
#else
|
839
|
+
typedef Int2x16_t Int2xSample_t;
|
840
|
+
# define SAMPLE_SIZE 16
|
841
|
+
# define PROG_NAME "mppdec"
|
842
|
+
# define SAMPLE_SIZE_STRING ""
|
843
|
+
# define Write_PCM(fd,p,b) Write_PCM_2x16bit ( fd, p, b )
|
844
|
+
# ifdef USE_ASM
|
845
|
+
# define Synthese_Filter(Stream,offset,Vi,Yi,ch) \
|
846
|
+
Synthese_Filter_16 ( Stream, offset, Vi, Yi )
|
847
|
+
# else
|
848
|
+
# define Synthese_Filter(Stream,offset,Vi,Yi,ch) \
|
849
|
+
Synthese_Filter_16_C ( Stream, offset, Vi, Yi )
|
850
|
+
# endif /* USE_ASM */
|
851
|
+
#endif
|
852
|
+
|
853
|
+
|
854
|
+
//// More complex types ////////////////////////////////////////////
|
855
|
+
typedef struct {
|
856
|
+
Int L [36];
|
857
|
+
Int R [36];
|
858
|
+
} Quant_t ;
|
859
|
+
|
860
|
+
typedef struct {
|
861
|
+
Uint L;
|
862
|
+
Uint R;
|
863
|
+
} UPair_t ;
|
864
|
+
|
865
|
+
typedef struct {
|
866
|
+
Int L;
|
867
|
+
Int R;
|
868
|
+
} Pair_t ;
|
869
|
+
|
870
|
+
typedef struct {
|
871
|
+
#ifdef USE_ARRAY_PACK
|
872
|
+
Schar L;
|
873
|
+
Schar R;
|
874
|
+
#else
|
875
|
+
Int L;
|
876
|
+
Int R;
|
877
|
+
#endif
|
878
|
+
} CPair_t ;
|
879
|
+
|
880
|
+
typedef Float FloatArray [32];
|
881
|
+
typedef UPair_t UPairArray [32];
|
882
|
+
typedef Pair_t PairArray [32];
|
883
|
+
typedef CPair_t CPairArray [32];
|
884
|
+
typedef Float SCFTriple [3];
|
885
|
+
typedef struct {
|
886
|
+
#ifndef MPP_ENCODER
|
887
|
+
Uint32_t Code; // >=32 bit
|
888
|
+
# ifdef USE_HUFF_PACK
|
889
|
+
Schar Value; // >= 7 bit
|
890
|
+
Uchar Length; // >= 4 bit
|
891
|
+
# else
|
892
|
+
Int Value;
|
893
|
+
Uint Length;
|
894
|
+
# endif
|
895
|
+
#else
|
896
|
+
# ifdef USE_HUFF_PACK
|
897
|
+
Uint8_t Length; // >= 4 bit
|
898
|
+
Uint8_t ___;
|
899
|
+
Uint16_t Code; // >= 14 bit
|
900
|
+
# else
|
901
|
+
Uint Code;
|
902
|
+
Uint Length;
|
903
|
+
# endif
|
904
|
+
#endif
|
905
|
+
} Huffman_t ;
|
906
|
+
|
907
|
+
typedef struct {
|
908
|
+
Uint Code : 16; // >= 14 bit
|
909
|
+
Uint Length : 8; // >= 4 bit
|
910
|
+
} HuffSrc_t ;
|
911
|
+
|
912
|
+
typedef struct {
|
913
|
+
OFF_T FileSize;
|
914
|
+
Int GenreNo;
|
915
|
+
Int TrackNo;
|
916
|
+
char Genre [128];
|
917
|
+
char Year [ 20];
|
918
|
+
char Track [ 8];
|
919
|
+
char Title [256];
|
920
|
+
char Artist [256];
|
921
|
+
char Album [256];
|
922
|
+
char Comment [512];
|
923
|
+
} TagInfo_t ;
|
924
|
+
|
925
|
+
typedef void (*SyntheseFilter16_t) ( Int2x16_t* Stream, Int* const offset, Float* Vi, const FloatArray* Yi );
|
926
|
+
typedef void (*SyntheseFilter32_t) ( Int2x32_t* Stream, Int* const offset, Float* Vi, const FloatArray* Yi, int ch );
|
927
|
+
typedef Int (*HeaderWriter_t) ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels, Ulong SamplesPerChannel );
|
928
|
+
|
929
|
+
#if defined MAKE_16BIT || defined MAKE_24BIT || defined MAKE_32BIT
|
930
|
+
typedef struct {
|
931
|
+
const Float* FilterCoeff;
|
932
|
+
Uint64_t Mask;
|
933
|
+
Float64_t Add;
|
934
|
+
Float Dither;
|
935
|
+
Uint32_t Overdrives;
|
936
|
+
Int64_t MaxLevel;
|
937
|
+
Bool_t NoShaping;
|
938
|
+
Float ErrorHistory [2] [16]; // max. 2 channels, 16th order Noise shaping
|
939
|
+
Float DitherHistory [2] [16];
|
940
|
+
Int32_t LastRandomNumber [2];
|
941
|
+
} dither_t;
|
942
|
+
#else
|
943
|
+
typedef struct {
|
944
|
+
Uint32_t Overdrives;
|
945
|
+
Int32_t MaxLevel;
|
946
|
+
} dither_t;
|
947
|
+
#endif
|
948
|
+
|
949
|
+
|
950
|
+
//// Variables /////////////////////////////////////////////////////
|
951
|
+
|
952
|
+
// decode.c
|
953
|
+
extern Ibuf_t InputBuff [IBUFSIZE]; // read buffer for the MP+ data stream
|
954
|
+
extern size_t InputCnt; // current offset in this buffer
|
955
|
+
|
956
|
+
// huffsv7.c
|
957
|
+
extern Huffman_t HuffHdr [10];
|
958
|
+
extern Huffman_t HuffSCFI [ 4];
|
959
|
+
extern Huffman_t HuffDSCF [16];
|
960
|
+
extern Huffman_t HuffQ1 [2] [ 3*3*3];
|
961
|
+
extern Huffman_t HuffQ2 [2] [ 5*5];
|
962
|
+
extern Huffman_t HuffQ3 [2] [ 7];
|
963
|
+
extern Huffman_t HuffN3 [2] [ 7*7];
|
964
|
+
extern Huffman_t HuffQ4 [2] [ 9];
|
965
|
+
extern Huffman_t HuffQ5 [2] [15];
|
966
|
+
extern Huffman_t HuffQ6 [2] [31];
|
967
|
+
extern Huffman_t HuffQ7 [2] [63];
|
968
|
+
extern Huffman_t HuffN8 [2][127];
|
969
|
+
extern const Huffman_t* HuffQ [2] [ 8];
|
970
|
+
extern const Huffman_t* HuffN [2] [ 9];
|
971
|
+
extern Uint8_t LUT1_0 [1<< 6];
|
972
|
+
extern Uint8_t LUT1_1 [1<< 9];
|
973
|
+
extern Uint8_t LUT2_0 [1<< 7];
|
974
|
+
extern Uint8_t LUT2_1 [1<<10];
|
975
|
+
extern Uint8_t LUT3_0 [1<< 4];
|
976
|
+
extern Uint8_t LUT3_1 [1<< 5];
|
977
|
+
extern Uint8_t LUT4_0 [1<< 4];
|
978
|
+
extern Uint8_t LUT4_1 [1<< 5];
|
979
|
+
extern Uint8_t LUT5_0 [1<< 6];
|
980
|
+
extern Uint8_t LUT5_1 [1<< 8];
|
981
|
+
extern Uint8_t LUT6_0 [1<< 7];
|
982
|
+
extern Uint8_t LUT6_1 [1<< 7];
|
983
|
+
extern Uint8_t LUT7_0 [1<< 8];
|
984
|
+
extern Uint8_t LUT7_1 [1<< 8];
|
985
|
+
extern Uint8_t LUTDSCF [1<< 6];
|
986
|
+
|
987
|
+
// huffsv46.c
|
988
|
+
extern const Huffman_t* Entropie [18];
|
989
|
+
extern const Huffman_t* Region [32];
|
990
|
+
extern Huffman_t SCFI_Bundle [ 8];
|
991
|
+
extern Huffman_t DSCF_Entropie [13];
|
992
|
+
|
993
|
+
// mppdec.c
|
994
|
+
extern Float Y_L [36] [32];
|
995
|
+
extern Float Y_R [36] [32];
|
996
|
+
extern CPair_t SCF_Index [3] [32]; // Scalefactor
|
997
|
+
extern CPair_t Res [32]; // resolution steps of the subbands
|
998
|
+
extern Quant_t Q [32]; // quantized samples
|
999
|
+
extern CPair_t SCFI [32]; // transfer order of the SCF
|
1000
|
+
extern Bool_t MS_Band [32]; // subband-wise flag for M/S-signal guidance
|
1001
|
+
extern Bool_t MS_used; // global flag for M/S-signal guidance
|
1002
|
+
extern Bool_t IS_used;
|
1003
|
+
|
1004
|
+
#define LITTLE 0
|
1005
|
+
#define BIG 1
|
1006
|
+
extern Bool_t output_endianess;
|
1007
|
+
#if ENDIAN == HAVE_LITTLE_ENDIAN
|
1008
|
+
# define machine_endianess LITTLE
|
1009
|
+
#elif ENDIAN == HAVE_BIG_ENDIAN
|
1010
|
+
# define machine_endianess BIG
|
1011
|
+
#endif
|
1012
|
+
|
1013
|
+
// requant.c
|
1014
|
+
extern Float __SCF [6 + 128]; // tabulated Scalefactors from -6 to +127
|
1015
|
+
#define SCF ( __SCF + 6 )
|
1016
|
+
extern Int8_t Q_bit [32]; // number of bits to save the resolution (SV6)
|
1017
|
+
extern Int8_t Q_res [32] [16]; // Index -> resolution (SV6)
|
1018
|
+
extern Uint Bitrate;
|
1019
|
+
extern Int Min_Band;
|
1020
|
+
extern Int Max_Band;
|
1021
|
+
extern Float __Cc [1 + 18];
|
1022
|
+
extern const Uint __Dc [1 + 18];
|
1023
|
+
#define Cc ( __Cc + 1 )
|
1024
|
+
#define Dc ( __Dc + 1 )
|
1025
|
+
|
1026
|
+
// synthtab.c
|
1027
|
+
extern const Float Cos64 [32];
|
1028
|
+
extern const Float Di_opt [32] [16];
|
1029
|
+
|
1030
|
+
// stderr.c
|
1031
|
+
|
1032
|
+
|
1033
|
+
//// procedures/functions //////////////////////////////////////////
|
1034
|
+
// cpu_feat.c
|
1035
|
+
Bool_t Cdecl Has_MMX ( void );
|
1036
|
+
Bool_t Cdecl Has_SIMD ( void );
|
1037
|
+
Bool_t Cdecl Has_SIMD2 ( void );
|
1038
|
+
Bool_t Cdecl Has_3DNow ( void );
|
1039
|
+
|
1040
|
+
// decode.c
|
1041
|
+
void Bitstream_init ( void );
|
1042
|
+
Ulong BitsRead ( void );
|
1043
|
+
Uint32_t Bitstream_read ( Int bits );
|
1044
|
+
Uint32_t Bitstream_peek ( Uint pos, Int bits );
|
1045
|
+
void Bitstream_skip ( Uint bits );
|
1046
|
+
Uint32_t Bitstream_preview ( Int bits ); // same as above, but data doesn't get receipted yet
|
1047
|
+
void Read_Bitstream_SV6 ( void );
|
1048
|
+
void Read_Bitstream_SV7 ( void );
|
1049
|
+
void Read_Bitstream_SV8 ( void );
|
1050
|
+
|
1051
|
+
// http.c
|
1052
|
+
int http_open ( const char* URL );
|
1053
|
+
|
1054
|
+
// huffsv7.c
|
1055
|
+
void Init_Huffman_Decoder_SV7 ( void );
|
1056
|
+
void Init_Huffman_Encoder_SV7 ( void );
|
1057
|
+
|
1058
|
+
// huffsv46.c
|
1059
|
+
void Init_Huffman_Decoder_SV4_6 ( void );
|
1060
|
+
|
1061
|
+
// id3tag.c
|
1062
|
+
Int Read_ID3V1_Tags ( FILE_T fp, TagInfo_t* tip );
|
1063
|
+
Int Read_APE_Tags ( FILE_T fp, TagInfo_t* tip );
|
1064
|
+
|
1065
|
+
// requant.c
|
1066
|
+
void Init_QuantTab ( Int maximum_Band, Bool_t used_IS, Double amplification, Uint StreamVersion );
|
1067
|
+
|
1068
|
+
// synth.c
|
1069
|
+
Uint32_t random_int ( void );
|
1070
|
+
|
1071
|
+
void Cdecl Calculate_New_V_i387 ( const Float* Sample, Float* V );
|
1072
|
+
void Cdecl Calculate_New_V_3DNow ( const Float* Sample, Float* V );
|
1073
|
+
void Cdecl New_V_Helper2 ( Float* A, const Float* Sample );
|
1074
|
+
void Cdecl New_V_Helper3 ( Float* A, const Float* Sample );
|
1075
|
+
void Cdecl New_V_Helper4 ( Float* V );
|
1076
|
+
|
1077
|
+
void Cdecl VectorMult_i387 ( void* buff, const Float* V );
|
1078
|
+
void Cdecl VectorMult_3DNow ( void* buff, const Float* V );
|
1079
|
+
void Cdecl VectorMult_SIMD ( void* buff, const Float* V );
|
1080
|
+
|
1081
|
+
void Synthese_Filter_16_C ( Int2x16_t* Stream, Int* const offset, Float* Vi, const FloatArray* Yi );
|
1082
|
+
void Synthese_Filter_32_C ( Int2x32_t* Stream, Int* const offset, Float* Vi, const FloatArray* Yi, Uint channel );
|
1083
|
+
|
1084
|
+
void Cdecl Reset_FPU ( void );
|
1085
|
+
void Cdecl Reset_FPU_3DNow ( void );
|
1086
|
+
void Cdecl memcpy_dn_MMX ( void* dst, const void* src, size_t words64byte );
|
1087
|
+
void Cdecl memcpy_dn_SIMD ( void* dst, const void* src, size_t words128byte );
|
1088
|
+
|
1089
|
+
void Init_Dither ( Int bits, int shapingtype, Double dither );
|
1090
|
+
void OverdriveReport ( void );
|
1091
|
+
SyntheseFilter16_t
|
1092
|
+
Get_Synthese_Filter ( void );
|
1093
|
+
|
1094
|
+
// tools.c
|
1095
|
+
size_t Read_LittleEndians ( FILE_T fp, Uint32_t* dst, size_t words32bit );
|
1096
|
+
void Requantize_MidSideStereo ( Int Stop_Band, const Bool_t* used_MS );
|
1097
|
+
void Requantize_IntensityStereo ( Int Start_Band, Int Stop_Band );
|
1098
|
+
void Resort_HuffTable ( Huffman_t* const Table, const size_t elements, Int offset );
|
1099
|
+
void Make_HuffTable ( Huffman_t* dst, const HuffSrc_t* src, size_t len );
|
1100
|
+
void Make_LookupTable ( Uint8_t* LUT, size_t LUT_len, const Huffman_t* const Table, const size_t elements );
|
1101
|
+
size_t complete_read ( int fd, void* dest, size_t bytes );
|
1102
|
+
int isdir ( const char* Name );
|
1103
|
+
void Init_FPU ( void );
|
1104
|
+
|
1105
|
+
// wave_out.c
|
1106
|
+
Int Write_WAVE_Header ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels, Ulong SamplesPerChannel );
|
1107
|
+
Int Write_AIFF_Header ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels, Ulong SamplesPerChannel );
|
1108
|
+
Int Write_Raw_Header ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels, Ulong SamplesPerChannel );
|
1109
|
+
Int Set_DSP_OSS_Params ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels );
|
1110
|
+
Int Set_DSP_Sun_Params ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels );
|
1111
|
+
Int Set_ESD_Params ( FILE_T dummyFile , Ldouble SampleFreq, Uint BitsPerSample, Uint Channels );
|
1112
|
+
Int Set_WIN_Params ( FILE_T dummyFile , Ldouble SampleFreq, Uint BitsPerSample, Uint Channels );
|
1113
|
+
Int Set_IRIX_Params ( FILE_T dummyFile , Ldouble SampleFreq, Uint BitsPerSample, Uint Channels );
|
1114
|
+
size_t Write_PCM_2x16bit ( FILE_T outputFile, Int2x16_t* data, size_t len );
|
1115
|
+
size_t Write_PCM_HQ_2x16bit ( FILE_T outputFile, Int2x32_t* data, size_t len );
|
1116
|
+
size_t Write_PCM_HQ_2x24bit ( FILE_T outputFile, Int2x32_t* data, size_t len );
|
1117
|
+
size_t Write_PCM_HQ_2x32bit ( FILE_T outputFile, Int2x32_t* data, size_t len );
|
1118
|
+
int WIN_Play_Samples ( const void* buff, size_t len );
|
1119
|
+
int IRIX_Play_Samples ( const void* buff, size_t len );
|
1120
|
+
int WIN_Audio_close ( void );
|
1121
|
+
int IRIX_Audio_close ( void );
|
1122
|
+
void DisableSUID ( void );
|
1123
|
+
void EnableSUID ( void );
|
1124
|
+
|
1125
|
+
// pipeopen.c
|
1126
|
+
FILE* pipeopen ( const char* command, const char* filename );
|
1127
|
+
|
1128
|
+
// stderr.c
|
1129
|
+
void SetStderrSilent ( Bool_t state );
|
1130
|
+
Bool_t GetStderrSilent ( void );
|
1131
|
+
int Cdecl stderr_printf ( const char* format, ... );
|
1132
|
+
|
1133
|
+
// _setargv.c
|
1134
|
+
long treewalk ( const char* start, const char** mask, int (*fn)(const char* filename, void* aux), void* aux );
|
1135
|
+
void mysetargv ( int* argc, char*** argv, const char** extentions );
|
1136
|
+
|
1137
|
+
#if ENDIAN == HAVE_BIG_ENDIAN
|
1138
|
+
|
1139
|
+
# define ReadLE32(dst,psrc) dst = *(Uint32_t*)(psrc)
|
1140
|
+
# define ReadBE32(dst,psrc) \
|
1141
|
+
((Uint8_t*)&(dst))[0] = ((Uint8_t*)(psrc))[3], \
|
1142
|
+
((Uint8_t*)&(dst))[1] = ((Uint8_t*)(psrc))[2], \
|
1143
|
+
((Uint8_t*)&(dst))[2] = ((Uint8_t*)(psrc))[1], \
|
1144
|
+
((Uint8_t*)&(dst))[3] = ((Uint8_t*)(psrc))[0]
|
1145
|
+
|
1146
|
+
|
1147
|
+
#elif defined __i386__ /* 486+ */
|
1148
|
+
|
1149
|
+
# define ReadBE32(dst,psrc) __asm__ ( "bswap %0" : "=r" (dst) : "0" (*(Uint32_t*)(psrc)) )
|
1150
|
+
# define ReadLE32(dst,psrc) dst = *(Uint32_t*)(psrc)
|
1151
|
+
|
1152
|
+
# else
|
1153
|
+
|
1154
|
+
# define ReadBE32(dst,psrc) \
|
1155
|
+
((Uint8_t*)&(dst))[0] = ((Uint8_t*)(psrc))[3], \
|
1156
|
+
((Uint8_t*)&(dst))[1] = ((Uint8_t*)(psrc))[2], \
|
1157
|
+
((Uint8_t*)&(dst))[2] = ((Uint8_t*)(psrc))[1], \
|
1158
|
+
((Uint8_t*)&(dst))[3] = ((Uint8_t*)(psrc))[0]
|
1159
|
+
# define ReadLE32(dst,psrc) dst = *(Uint32_t*)(psrc)
|
1160
|
+
|
1161
|
+
# endif
|
1162
|
+
|
1163
|
+
//// Profiler include //////////////////////////////////////////////
|
1164
|
+
|
1165
|
+
#ifdef _MSC_VER
|
1166
|
+
#pragma warning ( disable : 4244 )
|
1167
|
+
#endif
|
1168
|
+
|
1169
|
+
#endif /* MPPDEC_MPPDEC_H */
|
1170
|
+
|
1171
|
+
/* end of mppdec.h */
|