catori 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- 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 */
|