Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
db71d7c0
Commit
db71d7c0
authored
Aug 19, 2009
by
Aric Stewart
Committed by
Alexandre Julliard
Aug 24, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
winemp3.acm: Link to system libmpg123.so.
parent
ba38f219
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
123 additions
and
1703 deletions
+123
-1703
configure
configure
+64
-0
configure.ac
configure.ac
+12
-0
Makefile.in
dlls/winemp3.acm/Makefile.in
+2
-9
common.c
dlls/winemp3.acm/common.c
+0
-261
dct64_i386.c
dlls/winemp3.acm/dct64_i386.c
+0
-0
decode_i386.c
dlls/winemp3.acm/decode_i386.c
+0
-164
huffman.h
dlls/winemp3.acm/huffman.h
+0
-0
interface.c
dlls/winemp3.acm/interface.c
+0
-254
l2tables.h
dlls/winemp3.acm/l2tables.h
+0
-175
layer1.c
dlls/winemp3.acm/layer1.c
+0
-159
layer2.c
dlls/winemp3.acm/layer2.c
+0
-301
layer3.c
dlls/winemp3.acm/layer3.c
+0
-0
mpegl3.c
dlls/winemp3.acm/mpegl3.c
+42
-50
mpg123.h
dlls/winemp3.acm/mpg123.h
+0
-166
mpglib.h
dlls/winemp3.acm/mpglib.h
+0
-69
tabinit.c
dlls/winemp3.acm/tabinit.c
+0
-95
config.h.in
include/config.h.in
+3
-0
No files found.
configure
View file @
db71d7c0
...
...
@@ -616,6 +616,7 @@ LDPATH
BUILTINFLAG
EXTRACFLAGS
LIBKSTAT
LIBMPG123
PNGINCL
FONTCONFIGINCL
CUPSINCL
...
...
@@ -788,6 +789,7 @@ with_hal
with_jack
with_jpeg
with_ldap
with_mpg123
with_nas
with_opengl
with_openssl
...
...
@@ -1469,6 +1471,7 @@ Optional Packages:
--without-jack do not use the Jack sound support
--without-jpeg do not use JPEG
--without-ldap do not use LDAP
--without-mpg123 do not use the mpg123 library
--without-nas do not use the NAS sound support
--without-opengl do not use OpenGL
--without-openssl do not use OpenSSL
...
...
@@ -2599,6 +2602,12 @@ if test "${with_ldap+set}" = set; then :
fi
# Check whether --with-mpg123 was given.
if
test
"
${
with_mpg123
+set
}
"
=
set
;
then
:
withval
=
$with_mpg123
;
if
test
"x
$withval
"
=
"xno"
;
then
ac_cv_header_mpg123_h
=
no
;
fi
fi
# Check whether --with-nas was given.
if
test
"
${
with_nas
+set
}
"
=
set
;
then
:
withval
=
$with_nas
;
if
test
"x
$withval
"
=
"xno"
;
then
ac_cv_header_audio_audiolib_h
=
no
;
fi
...
...
@@ -5488,6 +5497,7 @@ for ac_header in \
machine/limits.h
\
machine/soundcard.h
\
mntent.h
\
mpg123.h
\
ncurses.h
\
netdb.h
\
netinet/in.h
\
...
...
@@ -11055,6 +11065,60 @@ This is an error since --with-png was requested." "$LINENO" 5 ;;
esac
fi
if
test
"
$ac_cv_header_mpg123_h
"
=
"yes"
then
{
$as_echo
"
$as_me
:
${
as_lineno
-
$LINENO
}
: checking for mpg123_init in -lmpg123"
>
&5
$as_echo_n
"checking for mpg123_init in -lmpg123... "
>
&6
;
}
if
test
"
${
ac_cv_lib_mpg123_mpg123_init
+set
}
"
=
set
;
then
:
$as_echo_n
"(cached) "
>
&6
else
ac_check_lib_save_LIBS
=
$LIBS
LIBS
=
"-lmpg123
$LIBS
"
cat
confdefs.h -
<<
_ACEOF
>conftest.
$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char mpg123_init ();
int
main ()
{
return mpg123_init ();
;
return 0;
}
_ACEOF
if
ac_fn_c_try_link
"
$LINENO
"
;
then
:
ac_cv_lib_mpg123_mpg123_init
=
yes
else
ac_cv_lib_mpg123_mpg123_init
=
no
fi
rm
-f
core conftest.err conftest.
$ac_objext
\
conftest
$ac_exeext
conftest.
$ac_ext
LIBS
=
$ac_check_lib_save_LIBS
fi
{
$as_echo
"
$as_me
:
${
as_lineno
-
$LINENO
}
: result:
$ac_cv_lib_mpg123_mpg123_init
"
>
&5
$as_echo
"
$ac_cv_lib_mpg123_mpg123_init
"
>
&6
;
}
if
test
"x
$ac_cv_lib_mpg123_mpg123_init
"
=
x
""
yes
;
then
:
LIBMPG123
=
"-lmpg123"
fi
fi
if
test
"x
$ac_cv_lib_mpg123_mpg123_init
"
!=
xyes
;
then
:
case
"x
$with_mpg123
"
in
x
)
wine_notices
=
"
$wine_notices
|libmpg123
${
notice_platform
}
development files not found, mp3 codec won't be supported."
;;
xno
)
;;
*
)
as_fn_error
"libmpg123
${
notice_platform
}
development files not found, mp3 codec won't be supported.
This is an error since --with-mpg123 was requested."
"
$LINENO
"
5
;;
esac
fi
test
"x
$ac_cv_lib_mpg123_mpg123_init
"
=
xyes
||
enable_winemp3_acm
=
${
enable_winemp3_acm
:-
no
}
if
test
"
$ac_cv_header_kstat_h
"
=
"yes"
then
{
$as_echo
"
$as_me
:
${
as_lineno
-
$LINENO
}
: checking for kstat_open in -lkstat"
>
&5
...
...
configure.ac
View file @
db71d7c0
...
...
@@ -49,6 +49,8 @@ AC_ARG_WITH(jpeg, AS_HELP_STRING([--without-jpeg],[do not use JPEG]),
[if test "x$withval" = "xno"; then ac_cv_header_jpeglib_h=no; fi])
AC_ARG_WITH(ldap, AS_HELP_STRING([--without-ldap],[do not use LDAP]),
[if test "x$withval" = "xno"; then ac_cv_header_ldap_h=no; ac_cv_header_lber_h=no; fi])
AC_ARG_WITH(mpg123, AS_HELP_STRING([--without-mpg123],[do not use the mpg123 library]),
[if test "x$withval" = "xno"; then ac_cv_header_mpg123_h=no; fi])
AC_ARG_WITH(nas, AS_HELP_STRING([--without-nas],[do not use the NAS sound support]),
[if test "x$withval" = "xno"; then ac_cv_header_audio_audiolib_h=no; fi])
AC_ARG_WITH(opengl, AS_HELP_STRING([--without-opengl],[do not use OpenGL]))
...
...
@@ -343,6 +345,7 @@ AC_CHECK_HEADERS(\
machine/limits.h \
machine/soundcard.h \
mntent.h \
mpg123.h \
ncurses.h \
netdb.h \
netinet/in.h \
...
...
@@ -1402,6 +1405,15 @@ fi
WINE_WARNING_WITH(png,[test "x$ac_cv_lib_soname_png" = "x"],
[libpng ${notice_platform}development files not found, PNG won't be supported.])
dnl **** Check for mpg123 ****
if test "$ac_cv_header_mpg123_h" = "yes"
then
AC_CHECK_LIB(mpg123,mpg123_init,[AC_SUBST(LIBMPG123,"-lmpg123")])
fi
WINE_NOTICE_WITH(mpg123,[test "x$ac_cv_lib_mpg123_mpg123_init" != xyes],
[libmpg123 ${notice_platform}development files not found, mp3 codec won't be supported.])
test "x$ac_cv_lib_mpg123_mpg123_init" = xyes || enable_winemp3_acm=${enable_winemp3_acm:-no}
dnl **** Check for libkstat ****
if test "$ac_cv_header_kstat_h" = "yes"
then
...
...
dlls/winemp3.acm/Makefile.in
View file @
db71d7c0
...
...
@@ -4,17 +4,10 @@ SRCDIR = @srcdir@
VPATH
=
@srcdir@
MODULE
=
winemp3.acm
IMPORTS
=
winmm user32 kernel32
EXTRALIBS
=
@LIBMPG123@
C_SRCS
=
\
common.c
\
dct64_i386.c
\
decode_i386.c
\
interface.c
\
layer1.c
\
layer2.c
\
layer3.c
\
mpegl3.c
\
tabinit.c
mpegl3.c
@MAKE_DLL_RULES@
...
...
dlls/winemp3.acm/common.c
deleted
100644 → 0
View file @
ba38f219
/*
* Copyright (c) Michael Hipp and other authors of the mpglib project.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include <ctype.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#include <fcntl.h>
#include "mpg123.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
mpeg3
);
static
const
struct
parameter
param
=
{
1
,
1
,
0
,
0
};
static
const
int
tabsel_123
[
2
][
3
][
16
]
=
{
{
{
0
,
32
,
64
,
96
,
128
,
160
,
192
,
224
,
256
,
288
,
320
,
352
,
384
,
416
,
448
,},
{
0
,
32
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
160
,
192
,
224
,
256
,
320
,
384
,},
{
0
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
160
,
192
,
224
,
256
,
320
,}
},
{
{
0
,
32
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
,
176
,
192
,
224
,
256
,},
{
0
,
8
,
16
,
24
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
,},
{
0
,
8
,
16
,
24
,
32
,
40
,
48
,
56
,
64
,
80
,
96
,
112
,
128
,
144
,
160
,}
}
};
static
const
long
freqs
[
9
]
=
{
44100
,
48000
,
32000
,
22050
,
24000
,
16000
,
11025
,
12000
,
8000
};
int
bitindex
;
unsigned
char
*
wordpointer
;
unsigned
char
*
pcm_sample
;
int
pcm_point
=
0
;
#define HDRCMPMASK 0xfffffd00
static
int
head_check
(
unsigned
long
head
)
{
if
(
(
head
&
0xffe00000
)
!=
0xffe00000
)
return
FALSE
;
if
(
!
((
head
>>
17
)
&
3
))
return
FALSE
;
if
(
((
head
>>
12
)
&
0xf
)
==
0xf
)
return
FALSE
;
if
(
((
head
>>
10
)
&
0x3
)
==
0x3
)
return
FALSE
;
return
TRUE
;
}
/*
* decode a header and write the information
* into the frame structure
*/
int
decode_header
(
struct
frame
*
fr
,
unsigned
long
newhead
)
{
if
(
head_check
(
newhead
)
==
FALSE
)
return
(
0
);
if
(
newhead
&
(
1
<<
20
)
)
{
fr
->
lsf
=
(
newhead
&
(
1
<<
19
))
?
0x0
:
0x1
;
fr
->
mpeg25
=
0
;
}
else
{
fr
->
lsf
=
1
;
fr
->
mpeg25
=
1
;
}
fr
->
lay
=
4
-
((
newhead
>>
17
)
&
3
);
if
(
fr
->
mpeg25
)
{
fr
->
sampling_frequency
=
6
+
((
newhead
>>
10
)
&
0x3
);
}
else
fr
->
sampling_frequency
=
((
newhead
>>
10
)
&
0x3
)
+
(
fr
->
lsf
*
3
);
fr
->
error_protection
=
((
newhead
>>
16
)
&
0x1
)
^
0x1
;
if
(
fr
->
mpeg25
)
/* allow Bitrate change for 2.5 ... */
fr
->
bitrate_index
=
((
newhead
>>
12
)
&
0xf
);
fr
->
bitrate_index
=
((
newhead
>>
12
)
&
0xf
);
fr
->
padding
=
((
newhead
>>
9
)
&
0x1
);
fr
->
extension
=
((
newhead
>>
8
)
&
0x1
);
fr
->
mode
=
((
newhead
>>
6
)
&
0x3
);
fr
->
mode_ext
=
((
newhead
>>
4
)
&
0x3
);
fr
->
copyright
=
((
newhead
>>
3
)
&
0x1
);
fr
->
original
=
((
newhead
>>
2
)
&
0x1
);
fr
->
emphasis
=
newhead
&
0x3
;
fr
->
stereo
=
(
fr
->
mode
==
MPG_MD_MONO
)
?
1
:
2
;
if
(
!
fr
->
bitrate_index
)
{
FIXME
(
"Free format not supported.
\n
"
);
return
(
0
);
}
switch
(
fr
->
lay
)
{
case
1
:
#ifdef LAYER1
#if 0
fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ?
(fr->mode_ext<<2)+4 : 32;
#endif
fr
->
framesize
=
(
long
)
tabsel_123
[
fr
->
lsf
][
0
][
fr
->
bitrate_index
]
*
12000
;
fr
->
framesize
/=
freqs
[
fr
->
sampling_frequency
];
fr
->
framesize
=
((
fr
->
framesize
+
fr
->
padding
)
<<
2
)
-
4
;
break
;
#else
FIXME
(
"Layer 1 not supported!
\n
"
);
return
0
;
#endif
case
2
:
#ifdef LAYER2
#if 0
fr->jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ?
(fr->mode_ext<<2)+4 : fr->II_sblimit;
#endif
fr
->
framesize
=
(
long
)
tabsel_123
[
fr
->
lsf
][
1
][
fr
->
bitrate_index
]
*
144000
;
fr
->
framesize
/=
freqs
[
fr
->
sampling_frequency
];
fr
->
framesize
+=
fr
->
padding
-
4
;
break
;
#else
FIXME
(
"Layer 2 not supported!
\n
"
);
return
0
;
#endif
case
3
:
#if 0
fr->do_layer = do_layer3;
if(fr->lsf)
ssize = (fr->stereo == 1) ? 9 : 17;
else
ssize = (fr->stereo == 1) ? 17 : 32;
#endif
#if 0
if(fr->error_protection)
ssize += 2;
#endif
fr
->
framesize
=
(
long
)
tabsel_123
[
fr
->
lsf
][
2
][
fr
->
bitrate_index
]
*
144000
;
fr
->
framesize
/=
freqs
[
fr
->
sampling_frequency
]
<<
(
fr
->
lsf
);
fr
->
framesize
=
fr
->
framesize
+
fr
->
padding
-
4
;
break
;
default:
FIXME
(
"Unknown layer type: %d
\n
"
,
fr
->
lay
);
return
(
0
);
}
return
1
;
}
#if 0
void print_header(struct frame *fr)
{
static const char * const modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" };
static const char * const layers[4] = { "Unknown" , "I", "II", "III" };
FIXME("MPEG %s, Layer: %s, Freq: %ld, mode: %s, modext: %d, BPF : %d\n",
fr->mpeg25 ? "2.5" : (fr->lsf ? "2.0" : "1.0"),
layers[fr->lay],freqs[fr->sampling_frequency],
modes[fr->mode],fr->mode_ext,fr->framesize+4);
FIXME("Channels: %d, copyright: %s, original: %s, CRC: %s, emphasis: %d.\n",
fr->stereo,fr->copyright?"Yes":"No",
fr->original?"Yes":"No",fr->error_protection?"Yes":"No",
fr->emphasis);
FIXME("Bitrate: %d Kbits/s, Extension value: %d\n",
tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index],fr->extension);
}
void print_header_compact(struct frame *fr)
{
static const char * const modes[4] = { "stereo", "joint-stereo", "dual-channel", "mono" };
static const char * const layers[4] = { "Unknown" , "I", "II", "III" };
FIXME("MPEG %s layer %s, %d kbit/s, %ld Hz %s\n",
fr->mpeg25 ? "2.5" : (fr->lsf ? "2.0" : "1.0"),
layers[fr->lay],
tabsel_123[fr->lsf][fr->lay-1][fr->bitrate_index],
freqs[fr->sampling_frequency], modes[fr->mode]);
}
#endif
unsigned
int
getbits
(
int
number_of_bits
)
{
unsigned
long
rval
;
if
(
!
number_of_bits
)
return
0
;
{
rval
=
wordpointer
[
0
];
rval
<<=
8
;
rval
|=
wordpointer
[
1
];
rval
<<=
8
;
rval
|=
wordpointer
[
2
];
rval
<<=
bitindex
;
rval
&=
0xffffff
;
bitindex
+=
number_of_bits
;
rval
>>=
(
24
-
number_of_bits
);
wordpointer
+=
(
bitindex
>>
3
);
bitindex
&=
7
;
}
return
rval
;
}
unsigned
int
getbits_fast
(
int
number_of_bits
)
{
unsigned
long
rval
;
{
rval
=
wordpointer
[
0
];
rval
<<=
8
;
rval
|=
wordpointer
[
1
];
rval
<<=
bitindex
;
rval
&=
0xffff
;
bitindex
+=
number_of_bits
;
rval
>>=
(
16
-
number_of_bits
);
wordpointer
+=
(
bitindex
>>
3
);
bitindex
&=
7
;
}
return
rval
;
}
unsigned
int
get1bit
(
void
)
{
unsigned
char
rval
;
rval
=
*
wordpointer
<<
bitindex
;
bitindex
++
;
wordpointer
+=
(
bitindex
>>
3
);
bitindex
&=
7
;
return
rval
>>
7
;
}
dlls/winemp3.acm/dct64_i386.c
deleted
100644 → 0
View file @
ba38f219
This diff is collapsed.
Click to expand it.
dlls/winemp3.acm/decode_i386.c
deleted
100644 → 0
View file @
ba38f219
/*
* Mpeg Layer-1,2,3 audio decoder
* ------------------------------
* copyright (c) 1995,1996,1997 by Michael Hipp, All rights reserved.
* See also 'README'
*
* Slightly optimized for machines without autoincrement/decrement.
* The performance is highly compiler dependent. Maybe
* the decode.c version for 'normal' processor may be faster
* even for Intel processors.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "mpg123.h"
#include "mpglib.h"
/* old WRITE_SAMPLE */
#define WRITE_SAMPLE(samples,sum,clip) \
if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \
else { *(samples) = sum; }
int
synth_1to1_mono
(
struct
mpstr
*
mp
,
real
*
bandPtr
,
unsigned
char
*
samples
,
int
*
pnt
)
{
short
samples_tmp
[
64
];
short
*
tmp1
=
samples_tmp
;
int
i
,
ret
;
int
pnt1
=
0
;
ret
=
synth_1to1
(
mp
,
bandPtr
,
0
,(
unsigned
char
*
)
samples_tmp
,
&
pnt1
);
samples
+=
*
pnt
;
for
(
i
=
0
;
i
<
32
;
i
++
)
{
*
(
(
short
*
)
samples
)
=
*
tmp1
;
samples
+=
2
;
tmp1
+=
2
;
}
*
pnt
+=
64
;
return
ret
;
}
int
synth_1to1
(
struct
mpstr
*
mp
,
real
*
bandPtr
,
int
channel
,
unsigned
char
*
out
,
int
*
pnt
)
{
static
const
int
step
=
2
;
int
bo
;
short
*
samples
=
(
short
*
)
(
out
+
*
pnt
);
real
*
b0
,(
*
buf
)[
0x110
];
int
clip
=
0
;
int
bo1
;
bo
=
mp
->
synth_bo
;
if
(
!
channel
)
{
bo
--
;
bo
&=
0xf
;
buf
=
mp
->
synth_buffs
[
0
];
}
else
{
samples
++
;
buf
=
mp
->
synth_buffs
[
1
];
}
if
(
bo
&
0x1
)
{
b0
=
buf
[
0
];
bo1
=
bo
;
dct64
(
buf
[
1
]
+
((
bo
+
1
)
&
0xf
),
buf
[
0
]
+
bo
,
bandPtr
);
}
else
{
b0
=
buf
[
1
];
bo1
=
bo
+
1
;
dct64
(
buf
[
0
]
+
bo
,
buf
[
1
]
+
bo
+
1
,
bandPtr
);
}
mp
->
synth_bo
=
bo
;
{
register
int
j
;
real
*
window
=
decwin
+
16
-
bo1
;
for
(
j
=
16
;
j
;
j
--
,
b0
+=
0x10
,
window
+=
0x20
,
samples
+=
step
)
{
real
sum
;
sum
=
window
[
0x0
]
*
b0
[
0x0
];
sum
-=
window
[
0x1
]
*
b0
[
0x1
];
sum
+=
window
[
0x2
]
*
b0
[
0x2
];
sum
-=
window
[
0x3
]
*
b0
[
0x3
];
sum
+=
window
[
0x4
]
*
b0
[
0x4
];
sum
-=
window
[
0x5
]
*
b0
[
0x5
];
sum
+=
window
[
0x6
]
*
b0
[
0x6
];
sum
-=
window
[
0x7
]
*
b0
[
0x7
];
sum
+=
window
[
0x8
]
*
b0
[
0x8
];
sum
-=
window
[
0x9
]
*
b0
[
0x9
];
sum
+=
window
[
0xA
]
*
b0
[
0xA
];
sum
-=
window
[
0xB
]
*
b0
[
0xB
];
sum
+=
window
[
0xC
]
*
b0
[
0xC
];
sum
-=
window
[
0xD
]
*
b0
[
0xD
];
sum
+=
window
[
0xE
]
*
b0
[
0xE
];
sum
-=
window
[
0xF
]
*
b0
[
0xF
];
WRITE_SAMPLE
(
samples
,
sum
,
clip
);
}
{
real
sum
;
sum
=
window
[
0x0
]
*
b0
[
0x0
];
sum
+=
window
[
0x2
]
*
b0
[
0x2
];
sum
+=
window
[
0x4
]
*
b0
[
0x4
];
sum
+=
window
[
0x6
]
*
b0
[
0x6
];
sum
+=
window
[
0x8
]
*
b0
[
0x8
];
sum
+=
window
[
0xA
]
*
b0
[
0xA
];
sum
+=
window
[
0xC
]
*
b0
[
0xC
];
sum
+=
window
[
0xE
]
*
b0
[
0xE
];
WRITE_SAMPLE
(
samples
,
sum
,
clip
);
b0
-=
0x10
,
window
-=
0x20
,
samples
+=
step
;
}
window
+=
bo1
<<
1
;
for
(
j
=
15
;
j
;
j
--
,
b0
-=
0x10
,
window
-=
0x20
,
samples
+=
step
)
{
real
sum
;
sum
=
-
window
[
-
0x1
]
*
b0
[
0x0
];
sum
-=
window
[
-
0x2
]
*
b0
[
0x1
];
sum
-=
window
[
-
0x3
]
*
b0
[
0x2
];
sum
-=
window
[
-
0x4
]
*
b0
[
0x3
];
sum
-=
window
[
-
0x5
]
*
b0
[
0x4
];
sum
-=
window
[
-
0x6
]
*
b0
[
0x5
];
sum
-=
window
[
-
0x7
]
*
b0
[
0x6
];
sum
-=
window
[
-
0x8
]
*
b0
[
0x7
];
sum
-=
window
[
-
0x9
]
*
b0
[
0x8
];
sum
-=
window
[
-
0xA
]
*
b0
[
0x9
];
sum
-=
window
[
-
0xB
]
*
b0
[
0xA
];
sum
-=
window
[
-
0xC
]
*
b0
[
0xB
];
sum
-=
window
[
-
0xD
]
*
b0
[
0xC
];
sum
-=
window
[
-
0xE
]
*
b0
[
0xD
];
sum
-=
window
[
-
0xF
]
*
b0
[
0xE
];
sum
-=
window
[
-
0x0
]
*
b0
[
0xF
];
WRITE_SAMPLE
(
samples
,
sum
,
clip
);
}
}
*
pnt
+=
128
;
return
clip
;
}
dlls/winemp3.acm/huffman.h
deleted
100644 → 0
View file @
ba38f219
This diff is collapsed.
Click to expand it.
dlls/winemp3.acm/interface.c
deleted
100644 → 0
View file @
ba38f219
/*
* Copyright (c) Michael Hipp and other authors of the mpglib project.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include "windef.h"
#include "winbase.h"
#include "wine/debug.h"
#include "mpg123.h"
#include "mpglib.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
mpeg3
);
BOOL
InitMP3
(
struct
mpstr
*
mp
)
{
static
int
init
=
0
;
memset
(
mp
,
0
,
sizeof
(
struct
mpstr
));
mp
->
framesize
=
0
;
mp
->
fsizeold
=
-
1
;
mp
->
bsize
=
0
;
mp
->
head
=
mp
->
tail
=
NULL
;
mp
->
fr
.
single
=
-
1
;
mp
->
bsnum
=
0
;
mp
->
synth_bo
=
1
;
mp
->
fr
.
mp
=
mp
;
if
(
!
init
)
{
init
=
1
;
make_decode_tables
(
32767
);
init_layer2
();
init_layer3
(
SBLIMIT
);
}
return
!
0
;
}
void
ClearMP3Buffer
(
struct
mpstr
*
mp
)
{
struct
buf
*
b
,
*
bn
;
b
=
mp
->
tail
;
while
(
b
)
{
HeapFree
(
GetProcessHeap
(),
0
,
b
->
pnt
);
bn
=
b
->
next
;
HeapFree
(
GetProcessHeap
(),
0
,
b
);
b
=
bn
;
}
mp
->
tail
=
NULL
;
mp
->
head
=
NULL
;
mp
->
bsize
=
0
;
}
static
struct
buf
*
addbuf
(
struct
mpstr
*
mp
,
const
unsigned
char
*
buf
,
int
size
)
{
struct
buf
*
nbuf
;
nbuf
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
struct
buf
));
if
(
!
nbuf
)
{
WARN
(
"Out of memory!
\n
"
);
return
NULL
;
}
nbuf
->
pnt
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
if
(
!
nbuf
->
pnt
)
{
HeapFree
(
GetProcessHeap
(),
0
,
nbuf
);
WARN
(
"Out of memory!
\n
"
);
return
NULL
;
}
nbuf
->
size
=
size
;
memcpy
(
nbuf
->
pnt
,
buf
,
size
);
nbuf
->
next
=
NULL
;
nbuf
->
prev
=
mp
->
head
;
nbuf
->
pos
=
0
;
if
(
!
mp
->
tail
)
{
mp
->
tail
=
nbuf
;
}
else
{
mp
->
head
->
next
=
nbuf
;
}
mp
->
head
=
nbuf
;
mp
->
bsize
+=
size
;
return
nbuf
;
}
static
void
remove_buf
(
struct
mpstr
*
mp
)
{
struct
buf
*
buf
=
mp
->
tail
;
mp
->
tail
=
buf
->
next
;
if
(
mp
->
tail
)
mp
->
tail
->
prev
=
NULL
;
else
{
mp
->
tail
=
mp
->
head
=
NULL
;
}
HeapFree
(
GetProcessHeap
(),
0
,
buf
->
pnt
);
HeapFree
(
GetProcessHeap
(),
0
,
buf
);
}
static
int
read_buf_byte
(
struct
mpstr
*
mp
)
{
unsigned
int
b
;
int
pos
;
pos
=
mp
->
tail
->
pos
;
while
(
pos
>=
mp
->
tail
->
size
)
{
remove_buf
(
mp
);
pos
=
mp
->
tail
->
pos
;
}
b
=
mp
->
tail
->
pnt
[
pos
];
mp
->
bsize
--
;
mp
->
tail
->
pos
++
;
return
b
;
}
static
void
read_head
(
struct
mpstr
*
mp
)
{
unsigned
long
head
;
head
=
read_buf_byte
(
mp
);
head
<<=
8
;
head
|=
read_buf_byte
(
mp
);
head
<<=
8
;
head
|=
read_buf_byte
(
mp
);
head
<<=
8
;
head
|=
read_buf_byte
(
mp
);
mp
->
header
=
head
;
}
int
decodeMP3
(
struct
mpstr
*
mp
,
const
unsigned
char
*
in
,
int
isize
,
unsigned
char
*
out
,
int
osize
,
int
*
done
)
{
int
len
;
if
(
osize
<
4608
)
{
ERR
(
"Output buffer too small
\n
"
);
return
MP3_ERR
;
}
if
(
in
)
{
if
(
addbuf
(
mp
,
in
,
isize
)
==
NULL
)
{
return
MP3_ERR
;
}
}
/* First decode header */
if
(
mp
->
framesize
==
0
)
{
int
ret
;
if
(
mp
->
bsize
<
4
)
{
return
MP3_NEED_MORE
;
}
read_head
(
mp
);
while
(
!
(
ret
=
decode_header
(
&
mp
->
fr
,
mp
->
header
))
&&
mp
->
bsize
)
{
mp
->
header
=
mp
->
header
<<
8
;
mp
->
header
|=
read_buf_byte
(
mp
);
}
if
(
!
ret
)
{
return
MP3_NEED_MORE
;
}
mp
->
framesize
=
mp
->
fr
.
framesize
;
}
if
(
mp
->
fr
.
framesize
>
mp
->
bsize
)
return
MP3_NEED_MORE
;
wordpointer
=
mp
->
bsspace
[
mp
->
bsnum
]
+
512
;
mp
->
bsnum
=
(
mp
->
bsnum
+
1
)
&
0x1
;
bitindex
=
0
;
len
=
0
;
while
(
len
<
mp
->
framesize
)
{
int
nlen
;
int
blen
=
mp
->
tail
->
size
-
mp
->
tail
->
pos
;
if
(
(
mp
->
framesize
-
len
)
<=
blen
)
{
nlen
=
mp
->
framesize
-
len
;
}
else
{
nlen
=
blen
;
}
memcpy
(
wordpointer
+
len
,
mp
->
tail
->
pnt
+
mp
->
tail
->
pos
,
nlen
);
len
+=
nlen
;
mp
->
tail
->
pos
+=
nlen
;
mp
->
bsize
-=
nlen
;
if
(
mp
->
tail
->
pos
==
mp
->
tail
->
size
)
{
remove_buf
(
mp
);
}
}
*
done
=
0
;
if
(
mp
->
fr
.
error_protection
)
getbits
(
16
);
switch
(
mp
->
fr
.
lay
)
{
case
1
:
do_layer1
(
&
mp
->
fr
,
out
,
done
);
break
;
case
2
:
do_layer2
(
&
mp
->
fr
,
out
,
done
);
break
;
case
3
:
do_layer3
(
&
mp
->
fr
,
out
,
done
);
break
;
}
mp
->
fsizeold
=
mp
->
framesize
;
mp
->
framesize
=
0
;
return
MP3_OK
;
}
int
set_pointer
(
struct
mpstr
*
mp
,
long
backstep
)
{
unsigned
char
*
bsbufold
;
if
(
mp
->
fsizeold
<
0
&&
backstep
>
0
)
{
/* This is not a bug if we just did seeking, the first frame is dropped then */
WARN
(
"Can't step back %ld!
\n
"
,
backstep
);
return
MP3_ERR
;
}
bsbufold
=
mp
->
bsspace
[
mp
->
bsnum
]
+
512
;
wordpointer
-=
backstep
;
if
(
backstep
)
memcpy
(
wordpointer
,
bsbufold
+
mp
->
fsizeold
-
backstep
,
backstep
);
bitindex
=
0
;
return
MP3_OK
;
}
dlls/winemp3.acm/l2tables.h
deleted
100644 → 0
View file @
ba38f219
/*
* Copyright (c) Michael Hipp and other authors of the mpglib project.
*
* Layer 2 Alloc tables ..
* most other tables are calculated on program start (which is (of course)
* not ISO-conform) ..
* Layer-3 huffman table is in huffman.h
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
struct
al_table
{
short
bits
;
short
d
;
};
static
const
struct
al_table
alloc_0
[]
=
{
{
4
,
0
},{
5
,
3
},{
3
,
-
3
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},{
10
,
-
511
},
{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
3
,
-
3
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},{
10
,
-
511
},
{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
3
,
-
3
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},{
10
,
-
511
},
{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
}
};
static
const
struct
al_table
alloc_1
[]
=
{
{
4
,
0
},{
5
,
3
},{
3
,
-
3
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},{
10
,
-
511
},
{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
3
,
-
3
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},{
10
,
-
511
},
{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
3
,
-
3
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},{
10
,
-
511
},
{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
16
,
-
32767
}
};
static
const
struct
al_table
alloc_2
[]
=
{
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},
{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},
{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
}
};
static
const
struct
al_table
alloc_3
[]
=
{
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},
{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},{
9
,
-
255
},
{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},{
15
,
-
16383
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
}
};
static
const
struct
al_table
alloc_4
[]
=
{
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},
{
4
,
0
},{
5
,
3
},{
7
,
5
},{
3
,
-
3
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},{
8
,
-
127
},
{
9
,
-
255
},{
10
,
-
511
},{
11
,
-
1023
},{
12
,
-
2047
},{
13
,
-
4095
},{
14
,
-
8191
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
3
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},{
4
,
-
7
},{
5
,
-
15
},{
6
,
-
31
},{
7
,
-
63
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
},
{
2
,
0
},{
5
,
3
},{
7
,
5
},{
10
,
9
}
};
dlls/winemp3.acm/layer1.c
deleted
100644 → 0
View file @
ba38f219
/*
* Mpeg Layer-1 audio decoder
* --------------------------
* copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README'
* This file has been copied from mpglib.
* near unoptimzed ...
*
* may have a few bugs after last optimization ...
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "mpg123.h"
static
void
I_step_one
(
unsigned
int
balloc
[],
unsigned
int
scale_index
[
2
][
SBLIMIT
],
struct
frame
*
fr
)
{
unsigned
int
*
ba
=
balloc
;
unsigned
int
*
sca
=
(
unsigned
int
*
)
scale_index
;
if
(
fr
->
stereo
)
{
int
i
;
int
jsbound
=
fr
->
jsbound
;
for
(
i
=
0
;
i
<
jsbound
;
i
++
)
{
*
ba
++
=
getbits
(
4
);
*
ba
++
=
getbits
(
4
);
}
for
(
i
=
jsbound
;
i
<
SBLIMIT
;
i
++
)
*
ba
++
=
getbits
(
4
);
ba
=
balloc
;
for
(
i
=
0
;
i
<
jsbound
;
i
++
)
{
if
((
*
ba
++
))
*
sca
++
=
getbits
(
6
);
if
((
*
ba
++
))
*
sca
++
=
getbits
(
6
);
}
for
(
i
=
jsbound
;
i
<
SBLIMIT
;
i
++
)
if
((
*
ba
++
))
{
*
sca
++
=
getbits
(
6
);
*
sca
++
=
getbits
(
6
);
}
}
else
{
int
i
;
for
(
i
=
0
;
i
<
SBLIMIT
;
i
++
)
*
ba
++
=
getbits
(
4
);
ba
=
balloc
;
for
(
i
=
0
;
i
<
SBLIMIT
;
i
++
)
if
((
*
ba
++
))
*
sca
++
=
getbits
(
6
);
}
}
static
void
I_step_two
(
real
fraction
[
2
][
SBLIMIT
],
unsigned
int
balloc
[
2
*
SBLIMIT
],
unsigned
int
scale_index
[
2
][
SBLIMIT
],
struct
frame
*
fr
)
{
int
i
,
n
;
int
smpb
[
2
*
SBLIMIT
];
/* values: 0-65535 */
int
*
sample
;
register
unsigned
int
*
ba
;
register
unsigned
int
*
sca
=
(
unsigned
int
*
)
scale_index
;
if
(
fr
->
stereo
)
{
int
jsbound
=
fr
->
jsbound
;
register
real
*
f0
=
fraction
[
0
];
register
real
*
f1
=
fraction
[
1
];
ba
=
balloc
;
for
(
sample
=
smpb
,
i
=
0
;
i
<
jsbound
;
i
++
)
{
if
((
n
=
*
ba
++
))
*
sample
++
=
getbits
(
n
+
1
);
if
((
n
=
*
ba
++
))
*
sample
++
=
getbits
(
n
+
1
);
}
for
(
i
=
jsbound
;
i
<
SBLIMIT
;
i
++
)
if
((
n
=
*
ba
++
))
*
sample
++
=
getbits
(
n
+
1
);
ba
=
balloc
;
for
(
sample
=
smpb
,
i
=
0
;
i
<
jsbound
;
i
++
)
{
if
((
n
=*
ba
++
))
*
f0
++
=
(
real
)
(
((
-
1
)
<<
n
)
+
(
*
sample
++
)
+
1
)
*
muls
[
n
+
1
][
*
sca
++
];
else
*
f0
++
=
0
.
0
;
if
((
n
=*
ba
++
))
*
f1
++
=
(
real
)
(
((
-
1
)
<<
n
)
+
(
*
sample
++
)
+
1
)
*
muls
[
n
+
1
][
*
sca
++
];
else
*
f1
++
=
0
.
0
;
}
for
(
i
=
jsbound
;
i
<
SBLIMIT
;
i
++
)
{
if
((
n
=*
ba
++
))
{
real
samp
=
(
((
-
1
)
<<
n
)
+
(
*
sample
++
)
+
1
);
*
f0
++
=
samp
*
muls
[
n
+
1
][
*
sca
++
];
*
f1
++
=
samp
*
muls
[
n
+
1
][
*
sca
++
];
}
else
*
f0
++
=
*
f1
++
=
0
.
0
;
}
}
else
{
register
real
*
f0
=
fraction
[
0
];
ba
=
balloc
;
for
(
sample
=
smpb
,
i
=
0
;
i
<
SBLIMIT
;
i
++
)
if
((
n
=
*
ba
++
))
*
sample
++
=
getbits
(
n
+
1
);
ba
=
balloc
;
for
(
sample
=
smpb
,
i
=
0
;
i
<
SBLIMIT
;
i
++
)
{
if
((
n
=*
ba
++
))
*
f0
++
=
(
real
)
(
((
-
1
)
<<
n
)
+
(
*
sample
++
)
+
1
)
*
muls
[
n
+
1
][
*
sca
++
];
else
*
f0
++
=
0
.
0
;
}
}
}
int
do_layer1
(
struct
frame
*
fr
,
unsigned
char
*
pcm_sample
,
int
*
pcm_point
)
{
int
clip
=
0
;
int
i
,
stereo
=
fr
->
stereo
;
unsigned
int
balloc
[
2
*
SBLIMIT
];
unsigned
int
scale_index
[
2
][
SBLIMIT
];
real
fraction
[
2
][
SBLIMIT
];
int
single
=
fr
->
single
;
fr
->
jsbound
=
(
fr
->
mode
==
MPG_MD_JOINT_STEREO
)
?
(
fr
->
mode_ext
<<
2
)
+
4
:
32
;
if
(
stereo
==
1
||
single
==
3
)
single
=
0
;
I_step_one
(
balloc
,
scale_index
,
fr
);
for
(
i
=
0
;
i
<
SCALE_BLOCK
;
i
++
)
{
I_step_two
(
fraction
,
balloc
,
scale_index
,
fr
);
if
(
single
>=
0
)
{
clip
+=
synth_1to1_mono
(
fr
->
mp
,
fraction
[
single
],
pcm_sample
,
pcm_point
);
}
else
{
int
p1
=
*
pcm_point
;
clip
+=
synth_1to1
(
fr
->
mp
,
fraction
[
0
],
0
,
pcm_sample
,
&
p1
);
clip
+=
synth_1to1
(
fr
->
mp
,
fraction
[
1
],
1
,
pcm_sample
,
pcm_point
);
}
}
return
clip
;
}
dlls/winemp3.acm/layer2.c
deleted
100644 → 0
View file @
ba38f219
/*
* Mpeg Layer-2 audio decoder
* --------------------------
* copyright (c) 1995 by Michael Hipp, All rights reserved. See also 'README'
* This file has been copied from mpglib.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "mpg123.h"
#include "l2tables.h"
static
int
grp_3tab
[
32
*
3
]
=
{
0
,
};
/* used: 27 */
static
int
grp_5tab
[
128
*
3
]
=
{
0
,
};
/* used: 125 */
static
int
grp_9tab
[
1024
*
3
]
=
{
0
,
};
/* used: 729 */
real
muls
[
27
][
64
];
/* also used by layer 1 */
void
init_layer2
(
void
)
{
static
const
double
mulmul
[
27
]
=
{
0
.
0
,
-
2
.
0
/
3
.
0
,
2
.
0
/
3
.
0
,
2
.
0
/
7
.
0
,
2
.
0
/
15
.
0
,
2
.
0
/
31
.
0
,
2
.
0
/
63
.
0
,
2
.
0
/
127
.
0
,
2
.
0
/
255
.
0
,
2
.
0
/
511
.
0
,
2
.
0
/
1023
.
0
,
2
.
0
/
2047
.
0
,
2
.
0
/
4095
.
0
,
2
.
0
/
8191
.
0
,
2
.
0
/
16383
.
0
,
2
.
0
/
32767
.
0
,
2
.
0
/
65535
.
0
,
-
4
.
0
/
5
.
0
,
-
2
.
0
/
5
.
0
,
2
.
0
/
5
.
0
,
4
.
0
/
5
.
0
,
-
8
.
0
/
9
.
0
,
-
4
.
0
/
9
.
0
,
-
2
.
0
/
9
.
0
,
2
.
0
/
9
.
0
,
4
.
0
/
9
.
0
,
8
.
0
/
9
.
0
};
static
const
int
base
[
3
][
9
]
=
{
{
1
,
0
,
2
,
}
,
{
17
,
18
,
0
,
19
,
20
,
}
,
{
21
,
1
,
22
,
23
,
0
,
24
,
25
,
2
,
26
}
};
int
i
,
j
,
k
,
l
,
len
;
real
*
table
;
static
const
int
tablen
[
3
]
=
{
3
,
5
,
9
};
static
int
*
itable
,
*
tables
[
3
]
=
{
grp_3tab
,
grp_5tab
,
grp_9tab
};
for
(
i
=
0
;
i
<
3
;
i
++
)
{
itable
=
tables
[
i
];
len
=
tablen
[
i
];
for
(
j
=
0
;
j
<
len
;
j
++
)
for
(
k
=
0
;
k
<
len
;
k
++
)
for
(
l
=
0
;
l
<
len
;
l
++
)
{
*
itable
++
=
base
[
i
][
l
];
*
itable
++
=
base
[
i
][
k
];
*
itable
++
=
base
[
i
][
j
];
}
}
for
(
k
=
0
;
k
<
27
;
k
++
)
{
double
m
=
mulmul
[
k
];
table
=
muls
[
k
];
for
(
j
=
3
,
i
=
0
;
i
<
63
;
i
++
,
j
--
)
*
table
++
=
m
*
pow
(
2
.
0
,(
double
)
j
/
3
.
0
);
*
table
++
=
0
.
0
;
}
}
static
void
II_step_one
(
unsigned
int
*
bit_alloc
,
int
*
scale
,
struct
frame
*
fr
)
{
int
stereo
=
fr
->
stereo
-
1
;
int
sblimit
=
fr
->
II_sblimit
;
int
jsbound
=
fr
->
jsbound
;
int
sblimit2
=
fr
->
II_sblimit
<<
stereo
;
const
struct
al_table
*
alloc1
=
fr
->
alloc
;
int
i
;
static
unsigned
int
scfsi_buf
[
64
];
unsigned
int
*
scfsi
,
*
bita
;
int
sc
,
step
;
bita
=
bit_alloc
;
if
(
stereo
)
{
for
(
i
=
jsbound
;
i
;
i
--
,
alloc1
+=
(
1
<<
step
))
{
*
bita
++
=
(
char
)
getbits
(
step
=
alloc1
->
bits
);
*
bita
++
=
(
char
)
getbits
(
step
);
}
for
(
i
=
sblimit
-
jsbound
;
i
;
i
--
,
alloc1
+=
(
1
<<
step
))
{
bita
[
0
]
=
(
char
)
getbits
(
step
=
alloc1
->
bits
);
bita
[
1
]
=
bita
[
0
];
bita
+=
2
;
}
bita
=
bit_alloc
;
scfsi
=
scfsi_buf
;
for
(
i
=
sblimit2
;
i
;
i
--
)
if
(
*
bita
++
)
*
scfsi
++
=
(
char
)
getbits_fast
(
2
);
}
else
/* mono */
{
for
(
i
=
sblimit
;
i
;
i
--
,
alloc1
+=
(
1
<<
step
))
*
bita
++
=
(
char
)
getbits
(
step
=
alloc1
->
bits
);
bita
=
bit_alloc
;
scfsi
=
scfsi_buf
;
for
(
i
=
sblimit
;
i
;
i
--
)
if
(
*
bita
++
)
*
scfsi
++
=
(
char
)
getbits_fast
(
2
);
}
bita
=
bit_alloc
;
scfsi
=
scfsi_buf
;
for
(
i
=
sblimit2
;
i
;
i
--
)
if
(
*
bita
++
)
switch
(
*
scfsi
++
)
{
case
0
:
*
scale
++
=
getbits_fast
(
6
);
*
scale
++
=
getbits_fast
(
6
);
*
scale
++
=
getbits_fast
(
6
);
break
;
case
1
:
*
scale
++
=
sc
=
getbits_fast
(
6
);
*
scale
++
=
sc
;
*
scale
++
=
getbits_fast
(
6
);
break
;
case
2
:
*
scale
++
=
sc
=
getbits_fast
(
6
);
*
scale
++
=
sc
;
*
scale
++
=
sc
;
break
;
default:
/* case 3 */
*
scale
++
=
getbits_fast
(
6
);
*
scale
++
=
sc
=
getbits_fast
(
6
);
*
scale
++
=
sc
;
break
;
}
}
static
void
II_step_two
(
unsigned
int
*
bit_alloc
,
real
fraction
[
2
][
4
][
SBLIMIT
],
int
*
scale
,
struct
frame
*
fr
,
int
x1
)
{
int
i
,
j
,
k
,
ba
;
int
stereo
=
fr
->
stereo
;
int
sblimit
=
fr
->
II_sblimit
;
int
jsbound
=
fr
->
jsbound
;
const
struct
al_table
*
alloc2
,
*
alloc1
=
fr
->
alloc
;
unsigned
int
*
bita
=
bit_alloc
;
int
d1
,
step
;
for
(
i
=
0
;
i
<
jsbound
;
i
++
,
alloc1
+=
(
1
<<
step
))
{
step
=
alloc1
->
bits
;
for
(
j
=
0
;
j
<
stereo
;
j
++
)
{
if
(
(
ba
=*
bita
++
)
)
{
k
=
(
alloc2
=
alloc1
+
ba
)
->
bits
;
if
(
(
d1
=
alloc2
->
d
)
<
0
)
{
real
cm
=
muls
[
k
][
scale
[
x1
]];
fraction
[
j
][
0
][
i
]
=
((
real
)
((
int
)
getbits
(
k
)
+
d1
))
*
cm
;
fraction
[
j
][
1
][
i
]
=
((
real
)
((
int
)
getbits
(
k
)
+
d1
))
*
cm
;
fraction
[
j
][
2
][
i
]
=
((
real
)
((
int
)
getbits
(
k
)
+
d1
))
*
cm
;
}
else
{
static
int
*
table
[]
=
{
0
,
0
,
0
,
grp_3tab
,
0
,
grp_5tab
,
0
,
0
,
0
,
grp_9tab
};
unsigned
int
idx
,
*
tab
,
m
=
scale
[
x1
];
idx
=
getbits
(
k
);
tab
=
(
unsigned
int
*
)
(
table
[
d1
]
+
idx
+
idx
+
idx
);
fraction
[
j
][
0
][
i
]
=
muls
[
*
tab
++
][
m
];
fraction
[
j
][
1
][
i
]
=
muls
[
*
tab
++
][
m
];
fraction
[
j
][
2
][
i
]
=
muls
[
*
tab
][
m
];
}
scale
+=
3
;
}
else
fraction
[
j
][
0
][
i
]
=
fraction
[
j
][
1
][
i
]
=
fraction
[
j
][
2
][
i
]
=
0
.
0
;
}
}
for
(
i
=
jsbound
;
i
<
sblimit
;
i
++
,
alloc1
+=
(
1
<<
step
))
{
step
=
alloc1
->
bits
;
bita
++
;
/* channel 1 and channel 2 bitalloc are the same */
if
(
(
ba
=*
bita
++
)
)
{
k
=
(
alloc2
=
alloc1
+
ba
)
->
bits
;
if
(
(
d1
=
alloc2
->
d
)
<
0
)
{
real
cm
;
cm
=
muls
[
k
][
scale
[
x1
+
3
]];
fraction
[
1
][
0
][
i
]
=
(
fraction
[
0
][
0
][
i
]
=
(
real
)
((
int
)
getbits
(
k
)
+
d1
)
)
*
cm
;
fraction
[
1
][
1
][
i
]
=
(
fraction
[
0
][
1
][
i
]
=
(
real
)
((
int
)
getbits
(
k
)
+
d1
)
)
*
cm
;
fraction
[
1
][
2
][
i
]
=
(
fraction
[
0
][
2
][
i
]
=
(
real
)
((
int
)
getbits
(
k
)
+
d1
)
)
*
cm
;
cm
=
muls
[
k
][
scale
[
x1
]];
fraction
[
0
][
0
][
i
]
*=
cm
;
fraction
[
0
][
1
][
i
]
*=
cm
;
fraction
[
0
][
2
][
i
]
*=
cm
;
}
else
{
static
int
*
table
[]
=
{
0
,
0
,
0
,
grp_3tab
,
0
,
grp_5tab
,
0
,
0
,
0
,
grp_9tab
};
unsigned
int
idx
,
*
tab
,
m1
,
m2
;
m1
=
scale
[
x1
];
m2
=
scale
[
x1
+
3
];
idx
=
getbits
(
k
);
tab
=
(
unsigned
int
*
)
(
table
[
d1
]
+
idx
+
idx
+
idx
);
fraction
[
0
][
0
][
i
]
=
muls
[
*
tab
][
m1
];
fraction
[
1
][
0
][
i
]
=
muls
[
*
tab
++
][
m2
];
fraction
[
0
][
1
][
i
]
=
muls
[
*
tab
][
m1
];
fraction
[
1
][
1
][
i
]
=
muls
[
*
tab
++
][
m2
];
fraction
[
0
][
2
][
i
]
=
muls
[
*
tab
][
m1
];
fraction
[
1
][
2
][
i
]
=
muls
[
*
tab
][
m2
];
}
scale
+=
6
;
}
else
{
fraction
[
0
][
0
][
i
]
=
fraction
[
0
][
1
][
i
]
=
fraction
[
0
][
2
][
i
]
=
fraction
[
1
][
0
][
i
]
=
fraction
[
1
][
1
][
i
]
=
fraction
[
1
][
2
][
i
]
=
0
.
0
;
}
/*
should we use individual scalefac for channel 2 or
is the current way the right one , where we just copy channel 1 to
channel 2 ??
The current 'strange' thing is, that we throw away the scalefac
values for the second channel ...!!
-> changed .. now we use the scalefac values of channel one !!
*/
}
for
(
i
=
sblimit
;
i
<
SBLIMIT
;
i
++
)
for
(
j
=
0
;
j
<
stereo
;
j
++
)
fraction
[
j
][
0
][
i
]
=
fraction
[
j
][
1
][
i
]
=
fraction
[
j
][
2
][
i
]
=
0
.
0
;
}
static
void
II_select_table
(
struct
frame
*
fr
)
{
static
const
int
translate
[
3
][
2
][
16
]
=
{
{
{
0
,
2
,
2
,
2
,
2
,
2
,
2
,
0
,
0
,
0
,
1
,
1
,
1
,
1
,
1
,
0
}
,
{
0
,
2
,
2
,
0
,
0
,
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
}
}
,
{
{
0
,
2
,
2
,
2
,
2
,
2
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
}
,
{
0
,
2
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
}
}
,
{
{
0
,
3
,
3
,
3
,
3
,
3
,
3
,
0
,
0
,
0
,
1
,
1
,
1
,
1
,
1
,
0
}
,
{
0
,
3
,
3
,
0
,
0
,
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
0
}
}
};
int
table
,
sblim
;
static
const
struct
al_table
*
tables
[
5
]
=
{
alloc_0
,
alloc_1
,
alloc_2
,
alloc_3
,
alloc_4
};
static
const
int
sblims
[
5
]
=
{
27
,
30
,
8
,
12
,
30
};
if
(
fr
->
lsf
)
table
=
4
;
else
table
=
translate
[
fr
->
sampling_frequency
][
2
-
fr
->
stereo
][
fr
->
bitrate_index
];
sblim
=
sblims
[
table
];
fr
->
alloc
=
tables
[
table
];
fr
->
II_sblimit
=
sblim
;
}
int
do_layer2
(
struct
frame
*
fr
,
unsigned
char
*
pcm_sample
,
int
*
pcm_point
)
{
int
clip
=
0
;
int
i
,
j
;
int
stereo
=
fr
->
stereo
;
real
fraction
[
2
][
4
][
SBLIMIT
];
/* pick_table clears unused subbands */
unsigned
int
bit_alloc
[
64
];
int
scale
[
192
];
int
single
=
fr
->
single
;
II_select_table
(
fr
);
fr
->
jsbound
=
(
fr
->
mode
==
MPG_MD_JOINT_STEREO
)
?
(
fr
->
mode_ext
<<
2
)
+
4
:
fr
->
II_sblimit
;
if
(
stereo
==
1
||
single
==
3
)
single
=
0
;
II_step_one
(
bit_alloc
,
scale
,
fr
);
for
(
i
=
0
;
i
<
SCALE_BLOCK
;
i
++
)
{
II_step_two
(
bit_alloc
,
fraction
,
scale
,
fr
,
i
>>
2
);
for
(
j
=
0
;
j
<
3
;
j
++
)
{
if
(
single
>=
0
)
{
clip
+=
synth_1to1_mono
(
fr
->
mp
,
fraction
[
0
][
j
],
pcm_sample
,
pcm_point
);
}
else
{
int
p1
=
*
pcm_point
;
clip
+=
synth_1to1
(
fr
->
mp
,
fraction
[
0
][
j
],
0
,
pcm_sample
,
&
p1
);
clip
+=
synth_1to1
(
fr
->
mp
,
fraction
[
1
][
j
],
1
,
pcm_sample
,
pcm_point
);
}
}
}
return
clip
;
}
dlls/winemp3.acm/layer3.c
deleted
100644 → 0
View file @
ba38f219
This diff is collapsed.
Click to expand it.
dlls/winemp3.acm/mpegl3.c
View file @
db71d7c0
...
...
@@ -2,6 +2,7 @@
* MPEG Layer 3 handling
*
* Copyright (C) 2002 Eric Pouech
* Copyright (C) 2009 CodeWeavers, Aric Stewart
*
*
* This library is free software; you can redistribute it and/or
...
...
@@ -19,6 +20,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#include <assert.h>
#include <stdarg.h>
#include <string.h>
...
...
@@ -31,8 +34,10 @@
#include "mmreg.h"
#include "msacm.h"
#include "msacmdrv.h"
#include "mpg123.h"
#include "mpglib.h"
#ifdef HAVE_MPG123_H
#include <mpg123.h>
#endif
#include "wine/debug.h"
...
...
@@ -43,6 +48,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mpeg3);
*/
static
LRESULT
MPEG3_drvOpen
(
LPCSTR
str
)
{
mpg123_init
();
return
1
;
}
...
...
@@ -51,6 +57,7 @@ static LRESULT MPEG3_drvOpen(LPCSTR str)
*/
static
LRESULT
MPEG3_drvClose
(
DWORD_PTR
dwDevID
)
{
mpg123_exit
();
return
1
;
}
...
...
@@ -58,7 +65,7 @@ typedef struct tagAcmMpeg3Data
{
void
(
*
convert
)(
PACMDRVSTREAMINSTANCE
adsi
,
const
unsigned
char
*
,
LPDWORD
,
unsigned
char
*
,
LPDWORD
);
struct
mpstr
mp
;
mpg123_handle
*
mh
;
}
AcmMpeg3Data
;
/* table to list all supported formats... those are the basic ones. this
...
...
@@ -133,68 +140,49 @@ static DWORD MPEG3_GetFormatIndex(LPWAVEFORMATEX wfx)
return
0xFFFFFFFF
;
}
static
DWORD
get_num_buffered_bytes
(
struct
mpstr
*
mp
)
{
DWORD
numBuff
=
0
;
struct
buf
*
p
=
mp
->
tail
;
while
(
p
)
{
numBuff
+=
p
->
size
-
p
->
pos
;
p
=
p
->
next
;
}
return
numBuff
;
}
static
void
mp3_horse
(
PACMDRVSTREAMINSTANCE
adsi
,
const
unsigned
char
*
src
,
LPDWORD
nsrc
,
unsigned
char
*
dst
,
LPDWORD
ndst
)
{
AcmMpeg3Data
*
amd
=
(
AcmMpeg3Data
*
)
adsi
->
dwDriver
;
int
size
,
ret
;
int
ret
;
size_t
size
;
DWORD
dpos
=
0
;
DWORD
buffered_before
;
DWORD
buffered_during
;
DWORD
buffered_after
;
/* Skip leading ID v3 header */
if
(
amd
->
mp
.
fsizeold
==
-
1
&&
!
strncmp
(
"ID3"
,
(
char
*
)
src
,
3
))
ret
=
mpg123_feed
(
amd
->
mh
,
src
,
*
nsrc
);
if
(
ret
!=
MPG123_OK
)
{
UINT
length
=
10
;
const
char
*
header
=
(
char
*
)
src
;
TRACE
(
"Found ID3 v2.%d.%d
\n
"
,
header
[
3
],
header
[
4
]);
length
+=
(
header
[
6
]
&
0x7F
)
<<
21
;
length
+=
(
header
[
7
]
&
0x7F
)
<<
14
;
length
+=
(
header
[
8
]
&
0x7F
)
<<
7
;
length
+=
(
header
[
9
]
&
0x7F
);
TRACE
(
"Length: %u
\n
"
,
length
);
*
nsrc
=
length
;
*
ndst
=
0
;
ERR
(
"Error feeding data
\n
"
);
*
ndst
=
*
nsrc
=
0
;
return
;
}
buffered_before
=
get_num_buffered_bytes
(
&
amd
->
mp
);
ret
=
decodeMP3
(
&
amd
->
mp
,
src
,
*
nsrc
,
dst
,
*
ndst
,
&
size
);
buffered_during
=
get_num_buffered_bytes
(
&
amd
->
mp
);
if
(
ret
!=
MP3_OK
)
ret
=
mpg123_read
(
amd
->
mh
,
NULL
,
0
,
&
size
);
if
(
ret
==
MPG123_NEW_FORMAT
)
{
if
TRACE_ON
(
mpeg3
)
{
long
rate
;
int
channels
,
enc
;
mpg123_getformat
(
amd
->
mh
,
&
rate
,
&
channels
,
&
enc
);
TRACE
(
"New format: %li Hz, %i channels, encoding value %i
\n
"
,
rate
,
channels
,
enc
);
}
}
else
if
(
ret
==
MPG123_ERR
)
{
if
(
ret
==
MP3_ERR
)
FIXME
(
"Error occurred during decoding!
\n
"
);
*
ndst
=
*
nsrc
=
0
;
return
;
}
do
{
dpos
+=
size
;
if
(
*
ndst
-
dpos
<
4608
)
break
;
ret
=
decodeMP3
(
&
amd
->
mp
,
NULL
,
0
,
dst
+
dpos
,
*
ndst
-
dpos
,
&
size
);
}
while
(
ret
==
MP3_OK
);
ret
=
mpg123_read
(
amd
->
mh
,
dst
+
dpos
,
*
ndst
-
dpos
,
&
size
);
}
while
(
ret
==
MPG123_OK
);
*
ndst
=
dpos
;
buffered_after
=
get_num_buffered_bytes
(
&
amd
->
mp
);
TRACE
(
"before %d put %d during %d after %d
\n
"
,
buffered_before
,
*
nsrc
,
buffered_during
,
buffered_after
);
*
nsrc
-=
buffered_after
;
ClearMP3Buffer
(
&
amd
->
mp
);
*
nsrc
=
0
;
}
/***********************************************************************
...
...
@@ -217,7 +205,7 @@ static LRESULT MPEG3_DriverDetails(PACMDRIVERDETAILSW add)
add
->
szShortName
,
sizeof
(
add
->
szShortName
)
/
sizeof
(
WCHAR
)
);
MultiByteToWideChar
(
CP_ACP
,
0
,
"Wine MPEG3 decoder"
,
-
1
,
add
->
szLongName
,
sizeof
(
add
->
szLongName
)
/
sizeof
(
WCHAR
)
);
MultiByteToWideChar
(
CP_ACP
,
0
,
"Brought to you by the Wine team
(based on mpglib by Michael Hipp)
..."
,
-
1
,
MultiByteToWideChar
(
CP_ACP
,
0
,
"Brought to you by the Wine team..."
,
-
1
,
add
->
szCopyright
,
sizeof
(
add
->
szCopyright
)
/
sizeof
(
WCHAR
)
);
MultiByteToWideChar
(
CP_ACP
,
0
,
"Refer to LICENSE file"
,
-
1
,
add
->
szLicensing
,
sizeof
(
add
->
szLicensing
)
/
sizeof
(
WCHAR
)
);
...
...
@@ -408,8 +396,9 @@ static LRESULT MPEG3_FormatSuggest(PACMDRVFORMATSUGGEST adfs)
*/
static
void
MPEG3_Reset
(
PACMDRVSTREAMINSTANCE
adsi
,
AcmMpeg3Data
*
aad
)
{
ClearMP3Buffer
(
&
aad
->
mp
);
InitMP3
(
&
aad
->
mp
);
mpg123_feedseek
(
aad
->
mh
,
0
,
SEEK_SET
,
NULL
);
mpg123_close
(
aad
->
mh
);
mpg123_open_feed
(
aad
->
mh
);
}
/***********************************************************************
...
...
@@ -419,6 +408,7 @@ static void MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad)
static
LRESULT
MPEG3_StreamOpen
(
PACMDRVSTREAMINSTANCE
adsi
)
{
AcmMpeg3Data
*
aad
;
int
err
;
assert
(
!
(
adsi
->
fdwOpen
&
ACM_STREAMOPENF_ASYNC
));
...
...
@@ -447,7 +437,8 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
adsi
->
pwfxDst
->
wBitsPerSample
!=
16
)
goto
theEnd
;
aad
->
convert
=
mp3_horse
;
InitMP3
(
&
aad
->
mp
);
aad
->
mh
=
mpg123_new
(
NULL
,
&
err
);
mpg123_open_feed
(
aad
->
mh
);
}
/* no encoding yet
else if (adsi->pwfxSrc->wFormatTag == WAVE_FORMAT_PCM &&
...
...
@@ -470,7 +461,8 @@ static LRESULT MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
*/
static
LRESULT
MPEG3_StreamClose
(
PACMDRVSTREAMINSTANCE
adsi
)
{
ClearMP3Buffer
(
&
((
AcmMpeg3Data
*
)
adsi
->
dwDriver
)
->
mp
);
mpg123_close
(((
AcmMpeg3Data
*
)
adsi
->
dwDriver
)
->
mh
);
mpg123_delete
(((
AcmMpeg3Data
*
)
adsi
->
dwDriver
)
->
mh
);
HeapFree
(
GetProcessHeap
(),
0
,
(
void
*
)
adsi
->
dwDriver
);
return
MMSYSERR_NOERROR
;
}
...
...
dlls/winemp3.acm/mpg123.h
deleted
100644 → 0
View file @
ba38f219
/*
* Copyright (c) Michael Hipp and other authors of the mpglib project.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdio.h>
#include <string.h>
#include <signal.h>
#ifndef WIN32
#include <sys/signal.h>
#include <unistd.h>
#endif
#include <math.h>
#ifdef _WIN32
# undef WIN32
# define WIN32
# define M_PI 3.14159265358979323846
# define M_SQRT2 1.41421356237309504880
# define REAL_IS_FLOAT
#endif
#ifdef REAL_IS_FLOAT
# define real float
#elif defined(REAL_IS_LONG_DOUBLE)
# define real long double
#else
# define real double
#endif
#ifdef __GNUC__
#define INLINE inline
#else
#define INLINE
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define SBLIMIT 32
#define SSLIMIT 18
#define SCALE_BLOCK 12
#define MPG_MD_STEREO 0
#define MPG_MD_JOINT_STEREO 1
#define MPG_MD_DUAL_CHANNEL 2
#define MPG_MD_MONO 3
#define MAXFRAMESIZE 1792
struct
frame
{
int
stereo
;
int
jsbound
;
int
single
;
int
lsf
;
int
mpeg25
;
int
header_change
;
int
lay
;
int
error_protection
;
int
bitrate_index
;
int
sampling_frequency
;
int
padding
;
int
extension
;
int
mode
;
int
mode_ext
;
int
copyright
;
int
original
;
int
emphasis
;
int
framesize
;
/* computed framesize */
/* layer2 stuff */
int
II_sblimit
;
const
struct
al_table
*
alloc
;
struct
mpstr
*
mp
;
};
struct
parameter
{
int
quiet
;
/* shut up! */
int
tryresync
;
/* resync stream after error */
int
verbose
;
/* verbose level */
int
checkrange
;
};
extern
unsigned
int
get1bit
(
void
);
extern
unsigned
int
getbits
(
int
);
extern
unsigned
int
getbits_fast
(
int
);
extern
int
set_pointer
(
struct
mpstr
*
,
long
);
extern
unsigned
char
*
wordpointer
;
extern
int
bitindex
;
extern
void
make_decode_tables
(
long
scaleval
);
extern
int
do_layer3
(
struct
frame
*
fr
,
unsigned
char
*
,
int
*
);
extern
int
do_layer2
(
struct
frame
*
fr
,
unsigned
char
*
,
int
*
);
extern
int
do_layer1
(
struct
frame
*
fr
,
unsigned
char
*
,
int
*
);
extern
int
decode_header
(
struct
frame
*
fr
,
unsigned
long
newhead
);
struct
gr_info_s
{
int
scfsi
;
unsigned
part2_3_length
;
unsigned
big_values
;
unsigned
scalefac_compress
;
unsigned
block_type
;
unsigned
mixed_block_flag
;
unsigned
table_select
[
3
];
unsigned
subblock_gain
[
3
];
unsigned
maxband
[
3
];
unsigned
maxbandl
;
unsigned
maxb
;
unsigned
region1start
;
unsigned
region2start
;
unsigned
preflag
;
unsigned
scalefac_scale
;
unsigned
count1table_select
;
real
*
full_gain
[
3
];
real
*
pow2gain
;
};
struct
III_sideinfo
{
unsigned
main_data_begin
;
unsigned
private_bits
;
struct
{
struct
gr_info_s
gr
[
2
];
}
ch
[
2
];
};
extern
int
synth_1to1
(
struct
mpstr
*
,
real
*
,
int
,
unsigned
char
*
,
int
*
);
extern
int
synth_1to1_mono
(
struct
mpstr
*
,
real
*
,
unsigned
char
*
,
int
*
);
extern
void
init_layer3
(
int
);
extern
void
init_layer2
(
void
);
extern
void
make_decode_tables
(
long
scale
);
extern
void
dct64
(
real
*
,
real
*
,
real
*
);
extern
unsigned
char
*
conv16to8
;
extern
real
muls
[
27
][
64
];
extern
real
decwin
[
512
+
32
];
extern
real
*
pnts
[
5
];
dlls/winemp3.acm/mpglib.h
deleted
100644 → 0
View file @
ba38f219
/*
* Copyright (c) Michael Hipp and other authors of the mpglib project.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
struct
buf
{
unsigned
char
*
pnt
;
long
size
;
long
pos
;
struct
buf
*
next
;
struct
buf
*
prev
;
};
struct
framebuf
{
struct
buf
*
buf
;
long
pos
;
struct
frame
*
next
;
struct
frame
*
prev
;
};
struct
mpstr
{
struct
buf
*
head
,
*
tail
;
int
bsize
;
int
framesize
;
int
fsizeold
;
struct
frame
fr
;
unsigned
char
bsspace
[
2
][
MAXFRAMESIZE
+
512
];
/* MAXFRAMESIZE */
real
hybrid_block
[
2
][
2
][
SBLIMIT
*
SSLIMIT
];
int
hybrid_blc
[
2
];
unsigned
long
header
;
int
bsnum
;
real
synth_buffs
[
2
][
2
][
0x110
];
int
synth_bo
;
};
#ifndef BOOL
#define BOOL int
#endif
#define MP3_ERR -1
#define MP3_OK 0
#define MP3_NEED_MORE 1
#ifdef __cplusplus
extern
"C"
{
#endif
BOOL
InitMP3
(
struct
mpstr
*
mp
);
int
decodeMP3
(
struct
mpstr
*
mp
,
const
unsigned
char
*
inmemory
,
int
inmemsize
,
unsigned
char
*
outmemory
,
int
outmemsize
,
int
*
done
);
void
ClearMP3Buffer
(
struct
mpstr
*
mp
);
#ifdef __cplusplus
}
#endif
dlls/winemp3.acm/tabinit.c
deleted
100644 → 0
View file @
ba38f219
/*
* Copyright (c) Michael Hipp and other authors of the mpglib project.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdlib.h>
#include "mpg123.h"
real
decwin
[
512
+
32
];
static
real
cos64
[
16
],
cos32
[
8
],
cos16
[
4
],
cos8
[
2
],
cos4
[
1
];
real
*
pnts
[]
=
{
cos64
,
cos32
,
cos16
,
cos8
,
cos4
};
#if 0
static unsigned char *conv16to8_buf = NULL;
unsigned char *conv16to8;
#endif
static
const
long
intwinbase
[]
=
{
0
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
2
,
-
2
,
-
2
,
-
2
,
-
3
,
-
3
,
-
4
,
-
4
,
-
5
,
-
5
,
-
6
,
-
7
,
-
7
,
-
8
,
-
9
,
-
10
,
-
11
,
-
13
,
-
14
,
-
16
,
-
17
,
-
19
,
-
21
,
-
24
,
-
26
,
-
29
,
-
31
,
-
35
,
-
38
,
-
41
,
-
45
,
-
49
,
-
53
,
-
58
,
-
63
,
-
68
,
-
73
,
-
79
,
-
85
,
-
91
,
-
97
,
-
104
,
-
111
,
-
117
,
-
125
,
-
132
,
-
139
,
-
147
,
-
154
,
-
161
,
-
169
,
-
176
,
-
183
,
-
190
,
-
196
,
-
202
,
-
208
,
-
213
,
-
218
,
-
222
,
-
225
,
-
227
,
-
228
,
-
228
,
-
227
,
-
224
,
-
221
,
-
215
,
-
208
,
-
200
,
-
189
,
-
177
,
-
163
,
-
146
,
-
127
,
-
106
,
-
83
,
-
57
,
-
29
,
2
,
36
,
72
,
111
,
153
,
197
,
244
,
294
,
347
,
401
,
459
,
519
,
581
,
645
,
711
,
779
,
848
,
919
,
991
,
1064
,
1137
,
1210
,
1283
,
1356
,
1428
,
1498
,
1567
,
1634
,
1698
,
1759
,
1817
,
1870
,
1919
,
1962
,
2001
,
2032
,
2057
,
2075
,
2085
,
2087
,
2080
,
2063
,
2037
,
2000
,
1952
,
1893
,
1822
,
1739
,
1644
,
1535
,
1414
,
1280
,
1131
,
970
,
794
,
605
,
402
,
185
,
-
45
,
-
288
,
-
545
,
-
814
,
-
1095
,
-
1388
,
-
1692
,
-
2006
,
-
2330
,
-
2663
,
-
3004
,
-
3351
,
-
3705
,
-
4063
,
-
4425
,
-
4788
,
-
5153
,
-
5517
,
-
5879
,
-
6237
,
-
6589
,
-
6935
,
-
7271
,
-
7597
,
-
7910
,
-
8209
,
-
8491
,
-
8755
,
-
8998
,
-
9219
,
-
9416
,
-
9585
,
-
9727
,
-
9838
,
-
9916
,
-
9959
,
-
9966
,
-
9935
,
-
9863
,
-
9750
,
-
9592
,
-
9389
,
-
9139
,
-
8840
,
-
8492
,
-
8092
,
-
7640
,
-
7134
,
-
6574
,
-
5959
,
-
5288
,
-
4561
,
-
3776
,
-
2935
,
-
2037
,
-
1082
,
-
70
,
998
,
2122
,
3300
,
4533
,
5818
,
7154
,
8540
,
9975
,
11455
,
12980
,
14548
,
16155
,
17799
,
19478
,
21189
,
22929
,
24694
,
26482
,
28289
,
30112
,
31947
,
33791
,
35640
,
37489
,
39336
,
41176
,
43006
,
44821
,
46617
,
48390
,
50137
,
51853
,
53534
,
55178
,
56778
,
58333
,
59838
,
61289
,
62684
,
64019
,
65290
,
66494
,
67629
,
68692
,
69679
,
70590
,
71420
,
72169
,
72835
,
73415
,
73908
,
74313
,
74630
,
74856
,
74992
,
75038
};
void
make_decode_tables
(
long
scaleval
)
{
int
i
,
j
,
k
,
kr
,
divv
;
real
*
table
,
*
costab
;
for
(
i
=
0
;
i
<
5
;
i
++
)
{
kr
=
0x10
>>
i
;
divv
=
0x40
>>
i
;
costab
=
pnts
[
i
];
for
(
k
=
0
;
k
<
kr
;
k
++
)
costab
[
k
]
=
1
.
0
/
(
2
.
0
*
cos
(
M_PI
*
((
double
)
k
*
2
.
0
+
1
.
0
)
/
(
double
)
divv
));
}
table
=
decwin
;
scaleval
=
-
scaleval
;
for
(
i
=
0
,
j
=
0
;
i
<
256
;
i
++
,
j
++
,
table
+=
32
)
{
if
(
table
<
decwin
+
512
+
16
)
table
[
16
]
=
table
[
0
]
=
(
double
)
intwinbase
[
j
]
/
65536
.
0
*
(
double
)
scaleval
;
if
(
i
%
32
==
31
)
table
-=
1023
;
if
(
i
%
64
==
63
)
scaleval
=
-
scaleval
;
}
for
(
/* i=256 */
;
i
<
512
;
i
++
,
j
--
,
table
+=
32
)
{
if
(
table
<
decwin
+
512
+
16
)
table
[
16
]
=
table
[
0
]
=
(
double
)
intwinbase
[
j
]
/
65536
.
0
*
(
double
)
scaleval
;
if
(
i
%
32
==
31
)
table
-=
1023
;
if
(
i
%
64
==
63
)
scaleval
=
-
scaleval
;
}
}
include/config.h.in
View file @
db71d7c0
...
...
@@ -465,6 +465,9 @@
/* Define to 1 if you have the `mousemask' function. */
#undef HAVE_MOUSEMASK
/* Define to 1 if you have the <mpg123.h> header file. */
#undef HAVE_MPG123_H
/* Define if you have NAS including devel headers */
#undef HAVE_NAS
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment